Tools for working with physical units and quantities
Project description
OOMpy a/k/a order-of-magnitude python
OOMpy is a python package for working with physical units and quantities. Unlike astropy
it works in gaussian units, supports a multitude of physical dimensions, constants, and conversion between them.
Installation
pip install oompy
Usage
Importing the main objects:
# import units and constants
from oompy import Units as u
from oompy import Constants as c
Simple manipulations and unit conversions
Several common usage examples:
# example #1
m_m87 = 6.5e9 * u.Msun
rg_m87 = c.G * m_m87 / c.c**2
rg_m87 >> 'au'
# ^
# |
# basic conversion
#
# Output: 64.16104122314108 au
# example #2
psr_bfield = 1e12 * u.G # magnetic field in Gauss
gold_density = 19.3 * u.g / u.cm**3
((psr_bfield / c.c)**2).cgs
# ^
# |
# convert to cgs
#
# Output: 1112.6500560536185 g cm^-3
#
(psr_bfield / c.c)**2 / gold_density >> ""
#
# Output: 57.650261971690085
# example #3
gamma_factor = 1000
b_field = u.MG # = Mega Gauss
omega_B = (c.q_e * b_field / (c.m_e * c.c))
sync_omega = gamma_factor**2 * omega_B
c.hbar * sync_omega >> 'keV'
# ^
# |
# understands powers of 10 prefixes
# (from 1e-12 to 1e18)
#
# Output: 11.576759893742388 keV
# example #4
# get the reduced physical type of the quantity (i.e., dimension in base units)
~(c.hbar * sync_omega)
#
# Output: {<Type.MASS: 3>: Fraction(1, 1), <Type.LENGTH: 1>: Fraction(2, 1), <Type.TIME: 2>: Fraction(-2, 1)}
# example #5
# compare physical quantities in arbitrary units
(c.R_sun >> 'ly') == c.R_sun # True
c.M_sun < (c.m_e >> "lb") # False
c.R_sun >= (c.m_e >> "lb") # Error: incompatible units
To see all units and/or constants:
u.all
c.all
Create your own quantities:
from oompy import Quantity
# example #4
my_speed = Quantity('25 m sec^-1')
# ^
# |
# as a string
rabbit_speed = Quantity(55, 'mi hr^-1')
# ^
# |
# as a tuple
elephant_speed = Quantity('km hr^-1')
(elephant_speed * my_speed / rabbit_speed) >> 'ly Gyr^-1'
# ^
# |
# converts lightyear per Gigayear :)
#
# Output: 0.9421232705492877 ly Gyr^-1
Vague conversions
This technique enables a comparison between incompatible units under certain assumptions. For instance, one might assume that we consider a photon, and thus its energy, wavelength and frequency are connected via c
and h
.
from oompy import Assumptions as assume
# uses h
freq = 5 * u.GHz
freq >> assume.Light >> "cm"
#
# Output: 5.995849160000001 cm
# uses h-bar as freq has a dimension of radians per second
freq = 2 * c.pi * u.rad / u.sec
freq >> assume.Light >> "eV"
#
# Output: 4.1356667496413186e-15 eV
# temperature to/from energy
10000 * u.K >> assume.Thermal >> "eV"
#
# Output: 0.8617339407568576 eV
To list all the available assumptions:
list(assume)
For developers
Testing the code is done in three steps using black
to check the formatting, mypy
to check the types and typehints, and pytest
to run the tests. First install all the dependencies:
pip install black mypy pytest
Then run the tests one-by-one:
black oom --check --diff
mypy oom
pytest
These tests are also run automatically on every commit using GitHub Actions.
To do
- add more units & constants
- (added in v1.1.0) comparison of quantities (
==
,!=
,>
,<
,>=
,<=
) - (added in v1.1.0) conversion with an rshift (
>>
) operator - (added in v1.1.0) base unit extraction (with
~
) - (added in v1.2.0) add a possibility to perform vague conversions (e.g. Kelvin to eV, Hz to erg) etc.
- (added in v1.3.0) unit tests
- distance to redshift vague conversion
- add formatting and TeX support
- add a way to work with scaling relations
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file oompy-1.3.4.tar.gz
.
File metadata
- Download URL: oompy-1.3.4.tar.gz
- Upload date:
- Size: 26.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49e0c215758b87dd2d3352fa6cfa8bdd953fe979be52ca1e187d03eae014c1b2 |
|
MD5 | 64be7bd19e8d8ccbc74c4c02620cd72d |
|
BLAKE2b-256 | ed7c01dcd0bd48858980013fb418d6cd8c866ec5b06a74f8f985dfa1140cb24d |