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.
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
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.
There are some tests using unittest
. Thanks to Travis-CI each push to github triggers a test:
The following steps are needed:
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 register -r pypitest python setup.py sdist upload -r pypitest
Productive release with:
python setup.py register -r pypi python setup.py sdist upload -r pypi
- 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
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.