Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Exact Constructible Numbers Representation

Project Description

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.


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


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:

Releasing on PYPI

The following steps are needed:

  • Update the version in

  • 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 register -r pypitest
    python sdist upload -r pypitest
  • Productive release with:

    python register -r pypi
    python 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.

Release History

This version
History Node


History Node


History Node


History Node


History Node


Download Files

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

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(5.3 kB) Copy SHA256 Hash SHA256
Source None Oct 23, 2016

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Kabu Creative Kabu Creative UX & Design Google Google Cloud Servers Fastly Fastly CDN StatusPage StatusPage Statuspage DigiCert DigiCert EV Certificate