Skip to main content

Exact Constructible Numbers Representation

Project description

Build Status: Build Status

The constructible module provides exact representation of constructible numbers in Python.

Python 2 and Python 3 are supported.

The constructible numbers are the smallest field containing the rational numbers, where the square root of any non-negative constructible number is constructible as well. The non-negative constructible numbers are the lengths which can be constructed from the unit length using only a compass and a straightedge.

Usage

Usually the sqrt function is enough to work with constructible numbers:

>>> from constructible import sqrt
>>> x = sqrt(2) + sqrt(3)
>>> print(x)
((0 + 1 * sqrt(2)) + (1 + 0 * sqrt(2)) * sqrt((3 + 0 * sqrt(2))))
>>> y = x*x
>>> print(y)
((5 + 0 * sqrt(2)) + (0 + 2 * sqrt(2)) * sqrt((3 + 0 * sqrt(2))))
>>> z = y*y
>>> t = 10*y - z
>>> t == 1
True

Installation

To install from PYPI just type

pip install constructible

The library is a single pure python file, so it is also easy to install by hand.

Testing

There are some tests using unittest. Thanks to Travis-CI each push to github triggers a test: Build Status

Releasing on PYPI

The following steps are needed:

  • make sure .pypirc is up to date:

    [distutils]
    index-servers =
      pypi
      pypitest
    
    [pypi]
    repository=https://pypi.org/legacy/
    username=xxx
    password=xxx
    
    [pypitest]
    repository=https://test.pypi.org/legacy/
    username=xxx
    password=xxx
  • Update the version in setup.py

  • Tag the version in git:

    git tag 0.1 -m "Adds a tag so that we can put this on PyPI."
    git push --tags origin
  • Test release with:

    python setup.py sdist upload -r pypitest
  • Productive release with:

    python setup.py sdist upload -r pypi

Changelog

  • 2016-05-23 V0.1 Initial Release

  • 2016-09-30 V0.2 Fixing Issue 1 and added Tests

  • 2016-10-03 V0.3 Fixing Issue 2

  • 2016-10-23 V0.4 Added __hash__ and __float__, speed optimizations

  • 2020-07-08 V0.5 New hash function and improvements by Arsenii A.

Aknowledgements

Thanks to Anders Kaseorg whose implementation of constructible numbers in Haskell provided inspiration and in particular the algorithm for taking square roots in quadratic extension fields.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

constructible-0.5.0.zip (6.8 kB view details)

Uploaded Source

File details

Details for the file constructible-0.5.0.zip.

File metadata

  • Download URL: constructible-0.5.0.zip
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.5

File hashes

Hashes for constructible-0.5.0.zip
Algorithm Hash digest
SHA256 df86b3b738e609cee017c7c76f29d740e8b00fde24f48d952926165dc4881ccb
MD5 a846959d66a468f4046cfd011d5bea53
BLAKE2b-256 464daafc6633d14beac32990874f82a6e5c2462518c5c32bc99497d2b80b91fb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page