This Python package allows the user to perform algebraic operations on physical quantities, each of which consists of three parts: a value, an error, and units. Errors are propagated automatically in quadrature. The package also comes with a vast set of pre-defined physical constants, which makes it extremely convenient for carrying out computations on physical problems.
The package requires Python 3.3 or later.
For typical use, simply import physical.<system> in an interactive session or in a script, where <system> is one of si, cgs, esu, emu, and gauss:
>>> from math import pi
>>> from physical.si import *The quantity (9.81 ± 0.01) m s⁻² can be declared explicitly as
>>> Quantity(9.81, 0.01, {'Meter': 1, 'Second': -2}, system)
(9.810 ± 0.010) m s^(-2)If a quantity has no error, it is much easier to write it in the better-known form
>>> 9.81*m/s**2
9.81 m s^(-2)The components of a quantity can be assessed through its members value, error, units, and system. The global variable system represents the unit system in use and is automatically defined when physical.<system> is imported.
Below is an exhaustive list of units and constants defined in the SI system:
>>> sorted(a for a, b in globals().items() if isinstance(b, Quantity))
['AU', 'Ba', 'Bq', 'G', 'Gal', 'Gy', 'Hz', 'Jy', 'K', 'LSun', 'MEarth', 'MJupiter', 'MSun', 'NA', 'P', 'R', 'Ry', 'St', 'Sv', 'Torr', 'a', 'a0', 'aSB', 'alpha', 'amu', 'angstrom', 'arcmin', 'arcsec', 'at', 'atm', 'bar', 'c', 'cm', 'd', 'deg', 'dyn', 'eV', 'erg', 'g', 'g0', 'ge', 'gmu', 'gn', 'gp', 'h', 'hbar', 'kB', 'kat', 'lambdae', 'ly', 'mH', 'mHe', 'me', 'mmu', 'mn', 'mol', 'mp', 'pc', 'rEarth', 'rJupiter', 'rSun', 'rad', 're', 's', 'sigmaH', 'sigmaSB', 'sigmaT', 'sr']They are likewise printed when the package is run as a script: python3 -m physical <system>.
Mathematical functions have been extended to take quantities with no units as input:
>>> exp(eV / (hbar*1e15*Hz))
4.568877028379119
>>> sqrt(Quantity(2, 1, {}, system))
1.41 ± 0.35The package also guards against the misuse of units:
>>> m + kg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'Quantity' and 'Quantity'We can determine the gravitational radius of the Sun:
>>> (G*MSun/c**2).expand()
(1.476625 ± 0.000047)e+03 mWe can express the Schwarzschild radius of a typical super-massive black hole in astronomical units:
>>> (2*G*1e8*MSun/c**2 / AU).expand()
1.974126 ± 0.000063We can compute the ionization energy of hydrogen atoms in electron volts:
>>> (Ry / eV).expand()
(1.36056931229 ± 0.00000000059)e+01We can convert room temperature, expressed as the kinetic energy of air molecules, to electron volts:
>>> (kB*300*K / eV).expand()
0.025851999786435535We can find the approximate mean free path of an oxygen molecule in air, assuming they have a double bond of length 120.74 pm and a cross section the square of that length:
>>> (101325*Pa/(kB*300*K) * (120.74e-12*m)**2).expand()**-1
2.8040488928816928e-06 mWe can ask if the Sun floats on water:
>>> (MSun / (4*pi/3*rSun**3)).expand()
(1.409780 ± 0.000032)e+03 kg m^(-3)Finally, we can check the claim from every astronomer that there are about π × 10⁷ seconds to a year:
>>> log10(a / s)
7.499103967085228The variable for the unit gauss (G) is overridden by the gravitational constant (G), but the synonym abtesla (abT) can be used instead for the former.