Operate and manipulate physical quantities in Python
Clone or download
bors[bot] and impact27 Merge #705
705: Prevent loosing keywords r=hgrecco a=impact27

With a function as:
def f(a, *, b):
    return a+b
b needs to be a keyword. The wrapping is stripping the keywords and makes the function fail!

Co-authored-by: Quentin Peter <impact27@users.noreply.github.com>
Latest commit 33d1979 Oct 10, 2018


Latest Version Documentation License Python Versions CI Coverage Docs

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.7 and 3.3+ with no other dependency. It is licensed under BSD.

It is extremely easy and natural to use:

>>> 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:

>>> 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:

$ pip install pint

or utilizing conda, with the conda-forge channel:

$ conda install -c conda-forge pint

and then simply enjoy it!


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.7 and Python 3.3+.
  • Advanced NumPy support: While NumPy is not a requirement for Pint, when available ndarray methods and ufuncs can be used in Quantity objects.