Dimensional Analysis / Formula Validation/ Units Conversion / Error Propagation
In one single small file without dependencies

buckingham.py

http://code.google.com/p/buckingham/

based on the Buckingham Theorem

How to use

download the module
download Python
start Python
import the module:
>>> from buckingham import Number, sin, cos, exp, log, allunits, pm
Example of dimensional analysis and conversions

>>> a = Number(10,dims='meter/second')
>>> b = Number(2,dims='yard/minute')
>>> c = a + b
>>> print c.convert('kilometer/hour')
    (36.109728 ± 0)
>>> Number(1,dims='joule').convert('eV').value
    6.2415096471204178e+18
>>> print c.value, c.error, c.units()
    10.03048 0.0 meter*second^-1
Without conversion results are always in:

meters, seconds, grams, ampere, kelvin, currency (and combination)
The error is the standard deviation assuming the true value is Normal 
distributed

Error propagation assumes independence

>>> a = Number(1,dims='decimeter^3')
>>> b = Number(2,dims='liter')
>>> c = Number(5,dims='gram/centimeter^3')
>>> d = (a + b)*c
>>> print d.convert('kilogram')
    (15.000000 ± 0)
Simplified syntax

>>> globals().update(allunits())
>>> length = (4+pm(0.5)) * meter
>>> velocity = 5 * meter/second
>>> time = length/velocity
>>> print time
    (8.00 ± 1.00)/10 
Example of formula validation

>>> a = Number(10,dims='meter/second')
>>> b = Number(2,dims='yard^3')
>>> c = a + b
Traceback (most recent call last):
...
RuntimeError: Incompatible Dimensions
Examples of error propagation

>>> a = Number(10,error=2,dims='meter/second') # (10±2)m/s
>>> b = Number(5,error=1,dims='hour')  # (5±1)h
>>> c = a*b
>>> print c.convert('kilometer')
    (1.800 ± 0.509)x10^2
>>> print c.convert('lightyear')
    (1.903 ± 0.538)/10^11
>>> print c.convert('kilometer').value
    180.0
>>> print c.convert('kilometer').error
    50.9116882454
Examples of more complex formulas

>>> c = a**4/(7*b)     
>>> print '%s %s' % (c,c.units())
    (7.94 ± 6.54)/10^2 meter^4*second^-5
For pure numbers sin, cos, exp, log are also defined. You can use a.is_pure() 
to check if a number is pure.
Financial application example

>>> coupon = Number(200,error=1,dims="dollar/day")
>>> expiration = Number(1,error=0,dims="year")
>>> payoff = coupon*expiration
>>> print payoff.convert('dollar')
    (7.3048 ± 0.0365)x10^4
I.e. $73048 dollars with $365 dollars of one sigma uncertainly

Latex Output

>>> print payoff.as_latex()
    (7.3048 \pm 0.0365)\times 10^{4} 
Rouding

Notice the output as a string always uses scientific notation and value is 
automatically rounded compatibly with error/uncertainty in result.

Supported units and combination of

ampere, angstrom, atm, attoL, attoampere, attoangstrom, attoatm, attoau, 
attobar, attocalorie, attocoulomb, attocurrency, attoday, attodollar, attoeV, 
attoev, attofarad, attofaraday, attofermi, attofoot, attogram, attohenry, 
attohour, attohz, attoinch, attojoule, attokelvin, attolightyear, attoliter, 
attometer, attomho, attomile, attominute, attommhg, attonewton, attoohm, 
attopascal, attopound, attopsi, attopure, attoquart, attosecond, attosiemens, 
attovolt, attowatt, attoweber, attoyard, attoyear, au, bar, calorie, centiL, 
centiampere, centiangstrom, centiatm, centiau, centibar, centicalorie, 
centicoulomb, centicurrency, centiday, centidollar, centieV, centiev, 
centifarad, centifaraday, centifermi, centifoot, centigram, centihenry, 
centihour, centihz, centiinch, centijoule, centikelvin, centilightyear, 
centiliter, centimeter, centimho, centimile, centiminute, centimmhg, 
centinewton, centiohm, centipascal, centipound, centipsi, centipure, 
centiquart, centisecond, centisiemens, centivolt, centiwatt, centiweber, 
centiyard, centiyear, coulomb, currency, day, deciL, deciampere, deciangstrom, 
deciatm, deciau, decibar, decicalorie, decicoulomb, decicurrency, deciday, 
decidollar, decieV, deciev, decifarad, decifaraday, decifermi, decifoot, 
decigram, decihenry, decihour, decihz, deciinch, decijoule, decikelvin, 
decilightyear, deciliter, decimeter, decimho, decimile, deciminute, decimmhg, 
decinewton, deciohm, decipascal, decipound, decipsi, decipure, deciquart, 
decisecond, decisiemens, decivolt, deciwatt, deciweber, deciyard, deciyear, 
dekaL, dekaampere, dekaangstrom, dekaatm, dekaau, dekabar, dekacalorie, 
dekacoulomb, dekacurrency, dekaday, dekadollar, dekaeV, dekaev, dekafarad, 
dekafaraday, dekafermi, dekafoot, dekagram, dekahenry, dekahour, dekahz, 
dekainch, dekajoule, dekakelvin, dekalightyear, dekaliter, dekameter, dekamho, 
dekamile, dekaminute, dekammhg, dekanewton, dekaohm, dekapascal, dekapound, 
dekapsi, dekapure, dekaquart, dekasecond, dekasiemens, dekavolt, dekawatt, 
dekaweber, dekayard, dekayear, dollar, eV, ev, exaL, exaampere, exaangstrom, 
exaatm, exaau, exabar, exacalorie, exacoulomb, exacurrency, exaday, exadollar, 
exaeV, exaev, exafarad, exafaraday, exafermi, exafoot, exagram, exahenry, 
exahour, exahz, exainch, exajoule, exakelvin, exalightyear, exaliter, exameter, 
examho, examile, examinute, exammhg, exanewton, exaohm, exapascal, exapound, 
exapsi, exapure, exaquart, exasecond, exasiemens, exavolt, exawatt, exaweber, 
exayard, exayear, farad, faraday, femtoL, femtoampere, femtoangstrom, femtoatm, 
femtoau, femtobar, femtocalorie, femtocoulomb, femtocurrency, femtoday, 
femtodollar, femtoeV, femtoev, femtofarad, femtofaraday, femtofermi, femtofoot, 
femtogram, femtohenry, femtohour, femtohz, femtoinch, femtojoule, femtokelvin, 
femtolightyear, femtoliter, femtometer, femtomho, femtomile, femtominute, 
femtommhg, femtonewton, femtoohm, femtopascal, femtopound, femtopsi, femtopure, 
femtoquart, femtosecond, femtosiemens, femtovolt, femtowatt, femtoweber, 
femtoyard, femtoyear, fermi, foot, gigaL, gigaampere, gigaangstrom, gigaatm, 
gigaau, gigabar, gigacalorie, gigacoulomb, gigacurrency, gigaday, gigadollar, 
gigaeV, gigaev, gigafarad, gigafaraday, gigafermi, gigafoot, gigagram, 
gigahenry, gigahour, gigahz, gigainch, gigajoule, gigakelvin, gigalightyear, 
gigaliter, gigameter, gigamho, gigamile, gigaminute, gigammhg, giganewton, 
gigaohm, gigapascal, gigapound, gigapsi, gigapure, gigaquart, gigasecond, 
gigasiemens, gigavolt, gigawatt, gigaweber, gigayard, gigayear, gram, henctoL, 
henctoampere, henctoangstrom, henctoatm, henctoau, henctobar, henctocalorie, 
henctocoulomb, henctocurrency, henctoday, henctodollar, henctoeV, henctoev, 
henctofarad, henctofaraday, henctofermi, henctofoot, henctogram, henctohenry, 
henctohour, henctohz, henctoinch, henctojoule, henctokelvin, henctolightyear, 
henctoliter, henctometer, henctomho, henctomile, henctominute, henctommhg, 
henctonewton, henctoohm, henctopascal, henctopound, henctopsi, henctopure, 
henctoquart, henctosecond, henctosiemens, henctovolt, henctowatt, henctoweber, 
henctoyard, henctoyear, henry, hour, hz, inch, joule, kelvin, kiloL, 
kiloampere, kiloangstrom, kiloatm, kiloau, kilobar, kilocalorie, kilocoulomb, 
kilocurrency, kiloday, kilodollar, kiloeV, kiloev, kilofarad, kilofaraday, 
kilofermi, kilofoot, kilogram, kilohenry, kilohour, kilohz, kiloinch, 
kilojoule, kilokelvin, kilolightyear, kiloliter, kilometer, kilomho, kilomile, 
kilominute, kilommhg, kilonewton, kiloohm, kilopascal, kilopound, kilopsi, 
kilopure, kiloquart, kilosecond, kilosiemens, kilovolt, kilowatt, kiloweber, 
kiloyard, kiloyear, lightyear, liter, megaL, megaampere, megaangstrom, megaatm, 
megaau, megabar, megacalorie, megacoulomb, megacurrency, megaday, megadollar, 
megaeV, megaev, megafarad, megafaraday, megafermi, megafoot, megagram, 
megahenry, megahour, megahz, megainch, megajoule, megakelvin, megalightyear, 
megaliter, megameter, megamho, megamile,  megaminute, megammhg, meganewton, 
megaohm, megapascal, megapound, megapsi, megapure, megaquart, megasecond, 
megasiemens, megavolt, megawatt, megaweber, megayard, megayear, meter, mho, 
microL, microampere, microangstrom, microatm, microau, microbar, microcalorie, 
microcoulomb, microcurrency, microday, microdollar, microeV, microev, 
microfarad, microfaraday, microfermi, microfoot, microgram, microhenry, 
microhour, microhz, microinch, microjoule, microkelvin, microlightyear, 
microliter, micrometer, micromho, micromile, microminute, micrommhg, 
micronewton, microohm, micropascal, micropound, micropsi, micropure, 
microquart, microsecond, microsiemens, microvolt, microwatt, microweber, 
microyard, microyear, mile, milliL, milliampere, milliangstrom, milliatm, 
milliau, millibar, millicalorie, millicoulomb, millicurrency, milliday, 
millidollar, millieV, milliev, millifarad, millifaraday, millifermi, millifoot, 
milligram, millihenry, millihour, millihz, milliinch, millijoule, millikelvin, 
millilightyear, milliliter, millimeter, millimho, millimile, milliminute, 
millimmhg, millinewton, milliohm, millipascal, millipound, millipsi, millipure, 
milliquart, millisecond, millisiemens, millivolt, milliwatt, milliweber, 
milliyard, milliyear, minute, mmhg, nanoL, nanoampere, nanoangstrom, nanoatm, 
nanoau, nanobar, nanocalorie, nanocoulomb, nanocurrency, nanoday, nanodollar, 
nanoeV, nanoev, nanofarad, nanofaraday, nanofermi, nanofoot, nanogram, 
nanohenry, nanohour, nanohz, nanoinch, nanojoule, nanokelvin, nanolightyear, 
nanoliter, nanometer, nanomho, nanomile, nanominute, nanommhg, nanonewton, 
nanoohm, nanopascal, nanopound, nanopsi, nanopure, nanoquart, nanosecond, 
nanosiemens, nanovolt, nanowatt, nanoweber, nanoyard, nanoyear, newton, none, 
ohm, pascal, petaL, petaampere, petaangstrom, petaatm, petaau, petabar, 
petacalorie, petacoulomb, petacurrency, petaday, petadollar, petaeV, petaev, 
petafarad, petafaraday, petafermi, petafoot, petagram, petahenry, petahour, 
petahz, petainch, petajoule, petakelvin, petalightyear, petaliter, petameter, 
petamho, petamile, petaminute, petammhg, petanewton, petaohm, petapascal, 
petapound, petapsi, petapure, petaquart, petasecond, petasiemens, petavolt, 
petawatt, petaweber, petayard, petayear, picoL, picoampere, picoangstrom, 
picoatm, picoau, picobar, picocalorie, picocoulomb, picocurrency, picoday, 
picodollar, picoeV, picoev, picofarad, picofaraday, picofermi, picofoot, 
picogram, picohenry, picohour, picohz, picoinch, picojoule, picokelvin, 
picolightyear, picoliter, picometer, picomho, picomile, picominute, picommhg, 
piconewton, picoohm, picopascal, picopound, picopsi, picopure, picoquart, 
picosecond, picosiemens, picovolt, picowatt, picoweber, picoyard, picoyear, 
pound, psi, pure, quart, second, siemens, teraL, teraampere, teraangstrom, 
teraatm, teraau, terabar, teracalorie, teracoulomb, teracurrency, teraday, 
teradollar, teraeV, teraev, terafarad, terafaraday, terafermi, terafoot, 
teragram, terahenry, terahour, terahz, terainch, terajoule, terakelvin, 
teralightyear, teraliter, terameter, teramho, teramile, teraminute, terammhg, 
teranewton, teraohm, terapascal, terapound, terapsi, terapure, teraquart, 
terasecond, terasiemens, teravolt, terawatt, teraweber, terayard, terayear, 
volt, vottaL, vottaampere, vottaangstrom, vottaatm, vottaau, vottabar, 
vottacalorie, vottacoulomb, vottacurrency, vottaday, vottadollar, vottaeV, 
vottaev, vottafarad, vottafaraday, vottafermi, vottafoot, vottagram, 
vottahenry, vottahour, vottahz, vottainch, vottajoule, vottakelvin, 
vottalightyear, vottaliter, vottameter, vottamho, vottamile, vottaminute, 
vottammhg, vottanewton, vottaohm, vottapascal, vottapound, vottapsi, vottapure, 
vottaquart, vottasecond, vottasiemens, vottavolt, vottawatt, vottaweber, 
vottayard, vottayear, watt, weber, yard, year, yoctoL, yoctoampere, 
yoctoangstrom, yoctoatm, yoctoau, yoctobar, yoctocalorie, yoctocoulomb, 
yoctocurrency, yoctoday, yoctodollar, yoctoeV, yoctoev, yoctofarad, 
yoctofaraday, yoctofermi, yoctofoot, yoctogram, yoctohenry, yoctohour, yoctohz, 
yoctoinch, yoctojoule, yoctokelvin, yoctolightyear, yoctoliter, yoctometer, 
yoctomho, yoctomile, yoctominute, yoctommhg, yoctonewton, yoctoohm, 
yoctopascal, yoctopound, yoctopsi, yoctopure, yoctoquart, yoctosecond, 
yoctosiemens, yoctovolt, yoctowatt, yoctoweber, yoctoyard, yoctoyear, zeptoL, 
zeptoampere, zeptoangstrom, zeptoatm, zeptoau, zeptobar, zeptocalorie, 
zeptocoulomb, zeptocurrency, zeptoday, zeptodollar, zeptoeV, zeptoev, 
zeptofarad, zeptofaraday, zeptofermi, zeptofoot, zeptogram, zeptohenry, 
zeptohour, zeptohz, zeptoinch, zeptojoule, zeptokelvin, zeptolightyear, 
zeptoliter, zeptometer, zeptomho, zeptomile, zeptominute, zeptommhg, 
zeptonewton, zeptoohm, zeptopascal, zeptopound, zeptopsi, zeptopure, 
zeptoquart, zeptosecond, zeptosiemens, zeptovolt, zeptowatt, zeptoweber, 
zeptoyard, zeptoyear, zettaL, zettaampere, zettaangstrom, zettaatm, zettaau, 
zettabar, zettacalorie, zettacoulomb, zettacurrency, zettaday, zettadollar, 
zettaeV, zettaev, zettafarad, zettafaraday, zettafermi, zettafoot, zettagram, 
zettahenry, zettahour, zettahz, zettainch, zettajoule, zettakelvin, 
zettalightyear, zettaliter, zettameter, zettamho, zettamile, zettaminute, 
zettammhg, zettanewton, zettaohm, zettapascal, zettapound, zettapsi, zettapure, 
zettaquart, zettasecond, zettasiemens, zettavolt, zettawatt, zettaweber, 
zettayard, zettayear 
-- 
http://mail.python.org/mailman/listinfo/python-announce-list

        Support the Python Software Foundation:
        http://www.python.org/psf/donations/

Reply via email to