RETIRED, further work has moved to Debian project infrastructure
Go to file
bors[bot] db336319ce Merge #474
474: Actually support floor division and modulo r=hgrecco
Floor division is currently broken in pint. It is implemented like the normal division, just calling the floor division operator on the magnitude.

This is wrong. Floor division with units serves an important use case: imagine the question "I have a 1 m long log, how may pieces of 1 in can I make from that?". This question has a clear answer (it's 39), but pint gives the weird answer "1 meter / inch", which is just wrong.

Python gives a clear definition of what is expected for the divmod function, which calculates floor division and the modulo: "For floating point numbers the result is (q, a % b), where q is usually math.floor(a / b) but may be 1 less than that. In any case q * b + a % b is very close to a, if a % b is non-zero it has the same sign as b, and 0 <= abs(a % b) < abs(b)".

This statement also works well in the united case. The implications are: a // b must be unitless, because the floor of a united value does not make sense. a % b must have the same unit (or at least dimensionality) as a (and b), as otherwise the above sum looses sense.

This pull request implements and tests all of the above.
2017-03-31 04:00:21 +00:00
bench Added recursive function 2015-06-01 00:28:22 -03:00
docs Improved tutorial 2016-08-03 21:37:28 -03:00
pint Merge #474 2017-03-31 04:00:21 +00:00
.gitignore Fix for Issue #46, calling 'to_base_units' on Quality with Decimal magnitudes no longer throws a TypeError caused by attempting to multiply a float with Decimal. Further edge cases for other magnitude types might be required. 2013-08-16 15:28:28 -04:00
.travis-exclude.yml Python 3.2 is not available in conda, remove it from travis 2016-08-01 01:24:13 -03:00
.travis-full.yml Simplified .travis.yml for faster testing 2016-11-17 23:39:36 -03:00
.travis.yml Trying bors-ng 2017-03-31 00:32:15 -03:00
.zappr.yaml Started to used zappr 2016-11-16 22:27:47 -03:00
AUTHORS Updated AUTHORS and CHANGES 2015-07-22 22:32:52 -03:00
BADGES.rst Added docs to Badge 2016-02-12 15:55:29 -03:00
CHANGES Back to development: 0.8 2016-03-02 01:19:31 -03:00
CHANGES_DEV Updated CHANGES and CHANGES_DEV 2014-11-03 16:51:11 -03:00
LICENSE Docs and license 2012-05-03 02:21:14 +02:00
MANIFEST.in Updated MANIFEST.in 2016-02-20 19:17:34 -03:00
README Import numpy as np in README 2016-02-20 18:40:06 -03:00
README.rst Import numpy as np in README 2016-02-20 18:40:06 -03:00
bors.toml Trying bors-ng 2017-03-31 00:32:15 -03:00
setup.cfg Removed some zest entry points for setup.cfg 2014-11-03 16:39:20 -03:00
setup.py Fix setup.py for greater compatibility 2016-08-03 23:54:56 -03:00
tox.ini Add 3.4 to tox 2014-06-11 08:12:27 -03:00

README

Pint: makes units easy
======================

Pint is a Python package to define, operate and manipulate physical
quantities: the product of a numerical value and a unit of measurement.
It allows arithmetic operations between them and conversions from and
to different units.

It is distributed with a comprehensive list of physical units, prefixes
and constants. Due to its modular design, you can extend (or even rewrite!)
the complete list without changing the source code. It supports a lot of
numpy mathematical operations **without monkey patching or wrapping numpy**.

It has a complete test coverage. It runs in Python 2.6 and 3.X
with no other dependency. It is licensed under BSD.

It is extremely easy and natural to use:

.. code-block:: python

    >>> import pint
    >>> ureg = pint.UnitRegistry()
    >>> 3 * ureg.meter + 4 * ureg.cm
    <Quantity(3.04, 'meter')>

and you can make good use of numpy if you want:

.. code-block:: python

    >>> import numpy as np
    >>> [3, 4] * ureg.meter + [4, 3] * ureg.cm
    <Quantity([ 3.04  4.03], 'meter')>
    >>> np.sum(_)
    <Quantity(7.07, 'meter')>


Quick Installation
------------------

To install Pint, simply:

.. code-block:: bash

    $ pip install pint

and then simply enjoy it!


Documentation
-------------

Full documentation is available at http://pint.readthedocs.org/


Design principles
-----------------

Although there are already a few very good Python packages to handle physical
quantities, no one was really fitting my needs. Like most developers, I programed
Pint to scratch my own itches.

- Unit parsing: prefixed and pluralized forms of units are recognized without
  explicitly defining them. In other words: as the prefix *kilo* and the unit *meter*
  are defined, Pint understands *kilometers*. This results in a much shorter and
  maintainable unit definition list as compared to other packages.

- Standalone unit definitions: units definitions are loaded from simple and
  easy to edit text file. Adding and changing units and their definitions does
  not involve changing the code.

- Advanced string formatting: a quantity can be formatted into string using
  PEP 3101 syntax. Extended conversion flags are given to provide latex and pretty
  formatting.

- Small codebase: small and easy to maintain with a flat hierarchy.

- Dependency free: it depends only on Python and its standard library.

- Python 2 and 3: A single codebase that runs unchanged in Python 2.6+ and Python 3.0+.

- Advanced NumPy support: While NumPy is not a requirement for Pint,
  when available ndarray methods and ufuncs can be used in Quantity objects.