123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 |
- # isort:skip_file
- """
- Dimensional analysis and unit systems.
- This module defines dimension/unit systems and physical quantities. It is
- based on a group-theoretical construction where dimensions are represented as
- vectors (coefficients being the exponents), and units are defined as a dimension
- to which we added a scale.
- Quantities are built from a factor and a unit, and are the basic objects that
- one will use when doing computations.
- All objects except systems and prefixes can be used in SymPy expressions.
- Note that as part of a CAS, various objects do not combine automatically
- under operations.
- Details about the implementation can be found in the documentation, and we
- will not repeat all the explanations we gave there concerning our approach.
- Ideas about future developments can be found on the `Github wiki
- <https://github.com/sympy/sympy/wiki/Unit-systems>`_, and you should consult
- this page if you are willing to help.
- Useful functions:
- - ``find_unit``: easily lookup pre-defined units.
- - ``convert_to(expr, newunit)``: converts an expression into the same
- expression expressed in another unit.
- """
- from .dimensions import Dimension, DimensionSystem
- from .unitsystem import UnitSystem
- from .util import convert_to
- from .quantities import Quantity
- from .definitions.dimension_definitions import (
- amount_of_substance, acceleration, action, area,
- capacitance, charge, conductance, current, energy,
- force, frequency, impedance, inductance, length,
- luminous_intensity, magnetic_density,
- magnetic_flux, mass, momentum, power, pressure, temperature, time,
- velocity, voltage, volume
- )
- Unit = Quantity
- speed = velocity
- luminosity = luminous_intensity
- magnetic_flux_density = magnetic_density
- amount = amount_of_substance
- from .prefixes import (
- # 10-power based:
- yotta,
- zetta,
- exa,
- peta,
- tera,
- giga,
- mega,
- kilo,
- hecto,
- deca,
- deci,
- centi,
- milli,
- micro,
- nano,
- pico,
- femto,
- atto,
- zepto,
- yocto,
- # 2-power based:
- kibi,
- mebi,
- gibi,
- tebi,
- pebi,
- exbi,
- )
- from .definitions import (
- percent, percents,
- permille,
- rad, radian, radians,
- deg, degree, degrees,
- sr, steradian, steradians,
- mil, angular_mil, angular_mils,
- m, meter, meters,
- kg, kilogram, kilograms,
- s, second, seconds,
- A, ampere, amperes,
- K, kelvin, kelvins,
- mol, mole, moles,
- cd, candela, candelas,
- g, gram, grams,
- mg, milligram, milligrams,
- ug, microgram, micrograms,
- t, tonne, metric_ton,
- newton, newtons, N,
- joule, joules, J,
- watt, watts, W,
- pascal, pascals, Pa, pa,
- hertz, hz, Hz,
- coulomb, coulombs, C,
- volt, volts, v, V,
- ohm, ohms,
- siemens, S, mho, mhos,
- farad, farads, F,
- henry, henrys, H,
- tesla, teslas, T,
- weber, webers, Wb, wb,
- optical_power, dioptre, D,
- lux, lx,
- katal, kat,
- gray, Gy,
- becquerel, Bq,
- km, kilometer, kilometers,
- dm, decimeter, decimeters,
- cm, centimeter, centimeters,
- mm, millimeter, millimeters,
- um, micrometer, micrometers, micron, microns,
- nm, nanometer, nanometers,
- pm, picometer, picometers,
- ft, foot, feet,
- inch, inches,
- yd, yard, yards,
- mi, mile, miles,
- nmi, nautical_mile, nautical_miles,
- angstrom, angstroms,
- ha, hectare,
- l, L, liter, liters,
- dl, dL, deciliter, deciliters,
- cl, cL, centiliter, centiliters,
- ml, mL, milliliter, milliliters,
- ms, millisecond, milliseconds,
- us, microsecond, microseconds,
- ns, nanosecond, nanoseconds,
- ps, picosecond, picoseconds,
- minute, minutes,
- h, hour, hours,
- day, days,
- anomalistic_year, anomalistic_years,
- sidereal_year, sidereal_years,
- tropical_year, tropical_years,
- common_year, common_years,
- julian_year, julian_years,
- draconic_year, draconic_years,
- gaussian_year, gaussian_years,
- full_moon_cycle, full_moon_cycles,
- year, years,
- G, gravitational_constant,
- c, speed_of_light,
- elementary_charge,
- hbar,
- planck,
- eV, electronvolt, electronvolts,
- avogadro_number,
- avogadro, avogadro_constant,
- boltzmann, boltzmann_constant,
- stefan, stefan_boltzmann_constant,
- R, molar_gas_constant,
- faraday_constant,
- josephson_constant,
- von_klitzing_constant,
- Da, dalton, amu, amus, atomic_mass_unit, atomic_mass_constant,
- me, electron_rest_mass,
- gee, gees, acceleration_due_to_gravity,
- u0, magnetic_constant, vacuum_permeability,
- e0, electric_constant, vacuum_permittivity,
- Z0, vacuum_impedance,
- coulomb_constant, electric_force_constant,
- atmosphere, atmospheres, atm,
- kPa,
- bar, bars,
- pound, pounds,
- psi,
- dHg0,
- mmHg, torr,
- mmu, mmus, milli_mass_unit,
- quart, quarts,
- ly, lightyear, lightyears,
- au, astronomical_unit, astronomical_units,
- planck_mass,
- planck_time,
- planck_temperature,
- planck_length,
- planck_charge,
- planck_area,
- planck_volume,
- planck_momentum,
- planck_energy,
- planck_force,
- planck_power,
- planck_density,
- planck_energy_density,
- planck_intensity,
- planck_angular_frequency,
- planck_pressure,
- planck_current,
- planck_voltage,
- planck_impedance,
- planck_acceleration,
- bit, bits,
- byte,
- kibibyte, kibibytes,
- mebibyte, mebibytes,
- gibibyte, gibibytes,
- tebibyte, tebibytes,
- pebibyte, pebibytes,
- exbibyte, exbibytes,
- )
- from .systems import (
- mks, mksa, si
- )
- def find_unit(quantity, unit_system="SI"):
- """
- Return a list of matching units or dimension names.
- - If ``quantity`` is a string -- units/dimensions containing the string
- `quantity`.
- - If ``quantity`` is a unit or dimension -- units having matching base
- units or dimensions.
- Examples
- ========
- >>> from sympy.physics import units as u
- >>> u.find_unit('charge')
- ['C', 'coulomb', 'coulombs', 'planck_charge', 'elementary_charge']
- >>> u.find_unit(u.charge)
- ['C', 'coulomb', 'coulombs', 'planck_charge', 'elementary_charge']
- >>> u.find_unit("ampere")
- ['ampere', 'amperes']
- >>> u.find_unit('angstrom')
- ['angstrom', 'angstroms']
- >>> u.find_unit('volt')
- ['volt', 'volts', 'electronvolt', 'electronvolts', 'planck_voltage']
- >>> u.find_unit(u.inch**3)[:9]
- ['L', 'l', 'cL', 'cl', 'dL', 'dl', 'mL', 'ml', 'liter']
- """
- unit_system = UnitSystem.get_unit_system(unit_system)
- import sympy.physics.units as u
- rv = []
- if isinstance(quantity, str):
- rv = [i for i in dir(u) if quantity in i and isinstance(getattr(u, i), Quantity)]
- dim = getattr(u, quantity)
- if isinstance(dim, Dimension):
- rv.extend(find_unit(dim))
- else:
- for i in sorted(dir(u)):
- other = getattr(u, i)
- if not isinstance(other, Quantity):
- continue
- if isinstance(quantity, Quantity):
- if quantity.dimension == other.dimension:
- rv.append(str(i))
- elif isinstance(quantity, Dimension):
- if other.dimension == quantity:
- rv.append(str(i))
- elif other.dimension == Dimension(unit_system.get_dimensional_expr(quantity)):
- rv.append(str(i))
- return sorted(set(rv), key=lambda x: (len(x), x))
- # NOTE: the old units module had additional variables:
- # 'density', 'illuminance', 'resistance'.
- # They were not dimensions, but units (old Unit class).
- __all__ = [
- 'Dimension', 'DimensionSystem',
- 'UnitSystem',
- 'convert_to',
- 'Quantity',
- 'amount_of_substance', 'acceleration', 'action', 'area',
- 'capacitance', 'charge', 'conductance', 'current', 'energy',
- 'force', 'frequency', 'impedance', 'inductance', 'length',
- 'luminous_intensity', 'magnetic_density',
- 'magnetic_flux', 'mass', 'momentum', 'power', 'pressure', 'temperature', 'time',
- 'velocity', 'voltage', 'volume',
- 'Unit',
- 'speed',
- 'luminosity',
- 'magnetic_flux_density',
- 'amount',
- 'yotta',
- 'zetta',
- 'exa',
- 'peta',
- 'tera',
- 'giga',
- 'mega',
- 'kilo',
- 'hecto',
- 'deca',
- 'deci',
- 'centi',
- 'milli',
- 'micro',
- 'nano',
- 'pico',
- 'femto',
- 'atto',
- 'zepto',
- 'yocto',
- 'kibi',
- 'mebi',
- 'gibi',
- 'tebi',
- 'pebi',
- 'exbi',
- 'percent', 'percents',
- 'permille',
- 'rad', 'radian', 'radians',
- 'deg', 'degree', 'degrees',
- 'sr', 'steradian', 'steradians',
- 'mil', 'angular_mil', 'angular_mils',
- 'm', 'meter', 'meters',
- 'kg', 'kilogram', 'kilograms',
- 's', 'second', 'seconds',
- 'A', 'ampere', 'amperes',
- 'K', 'kelvin', 'kelvins',
- 'mol', 'mole', 'moles',
- 'cd', 'candela', 'candelas',
- 'g', 'gram', 'grams',
- 'mg', 'milligram', 'milligrams',
- 'ug', 'microgram', 'micrograms',
- 't', 'tonne', 'metric_ton',
- 'newton', 'newtons', 'N',
- 'joule', 'joules', 'J',
- 'watt', 'watts', 'W',
- 'pascal', 'pascals', 'Pa', 'pa',
- 'hertz', 'hz', 'Hz',
- 'coulomb', 'coulombs', 'C',
- 'volt', 'volts', 'v', 'V',
- 'ohm', 'ohms',
- 'siemens', 'S', 'mho', 'mhos',
- 'farad', 'farads', 'F',
- 'henry', 'henrys', 'H',
- 'tesla', 'teslas', 'T',
- 'weber', 'webers', 'Wb', 'wb',
- 'optical_power', 'dioptre', 'D',
- 'lux', 'lx',
- 'katal', 'kat',
- 'gray', 'Gy',
- 'becquerel', 'Bq',
- 'km', 'kilometer', 'kilometers',
- 'dm', 'decimeter', 'decimeters',
- 'cm', 'centimeter', 'centimeters',
- 'mm', 'millimeter', 'millimeters',
- 'um', 'micrometer', 'micrometers', 'micron', 'microns',
- 'nm', 'nanometer', 'nanometers',
- 'pm', 'picometer', 'picometers',
- 'ft', 'foot', 'feet',
- 'inch', 'inches',
- 'yd', 'yard', 'yards',
- 'mi', 'mile', 'miles',
- 'nmi', 'nautical_mile', 'nautical_miles',
- 'angstrom', 'angstroms',
- 'ha', 'hectare',
- 'l', 'L', 'liter', 'liters',
- 'dl', 'dL', 'deciliter', 'deciliters',
- 'cl', 'cL', 'centiliter', 'centiliters',
- 'ml', 'mL', 'milliliter', 'milliliters',
- 'ms', 'millisecond', 'milliseconds',
- 'us', 'microsecond', 'microseconds',
- 'ns', 'nanosecond', 'nanoseconds',
- 'ps', 'picosecond', 'picoseconds',
- 'minute', 'minutes',
- 'h', 'hour', 'hours',
- 'day', 'days',
- 'anomalistic_year', 'anomalistic_years',
- 'sidereal_year', 'sidereal_years',
- 'tropical_year', 'tropical_years',
- 'common_year', 'common_years',
- 'julian_year', 'julian_years',
- 'draconic_year', 'draconic_years',
- 'gaussian_year', 'gaussian_years',
- 'full_moon_cycle', 'full_moon_cycles',
- 'year', 'years',
- 'G', 'gravitational_constant',
- 'c', 'speed_of_light',
- 'elementary_charge',
- 'hbar',
- 'planck',
- 'eV', 'electronvolt', 'electronvolts',
- 'avogadro_number',
- 'avogadro', 'avogadro_constant',
- 'boltzmann', 'boltzmann_constant',
- 'stefan', 'stefan_boltzmann_constant',
- 'R', 'molar_gas_constant',
- 'faraday_constant',
- 'josephson_constant',
- 'von_klitzing_constant',
- 'Da', 'dalton', 'amu', 'amus', 'atomic_mass_unit', 'atomic_mass_constant',
- 'me', 'electron_rest_mass',
- 'gee', 'gees', 'acceleration_due_to_gravity',
- 'u0', 'magnetic_constant', 'vacuum_permeability',
- 'e0', 'electric_constant', 'vacuum_permittivity',
- 'Z0', 'vacuum_impedance',
- 'coulomb_constant', 'electric_force_constant',
- 'atmosphere', 'atmospheres', 'atm',
- 'kPa',
- 'bar', 'bars',
- 'pound', 'pounds',
- 'psi',
- 'dHg0',
- 'mmHg', 'torr',
- 'mmu', 'mmus', 'milli_mass_unit',
- 'quart', 'quarts',
- 'ly', 'lightyear', 'lightyears',
- 'au', 'astronomical_unit', 'astronomical_units',
- 'planck_mass',
- 'planck_time',
- 'planck_temperature',
- 'planck_length',
- 'planck_charge',
- 'planck_area',
- 'planck_volume',
- 'planck_momentum',
- 'planck_energy',
- 'planck_force',
- 'planck_power',
- 'planck_density',
- 'planck_energy_density',
- 'planck_intensity',
- 'planck_angular_frequency',
- 'planck_pressure',
- 'planck_current',
- 'planck_voltage',
- 'planck_impedance',
- 'planck_acceleration',
- 'bit', 'bits',
- 'byte',
- 'kibibyte', 'kibibytes',
- 'mebibyte', 'mebibytes',
- 'gibibyte', 'gibibytes',
- 'tebibyte', 'tebibytes',
- 'pebibyte', 'pebibytes',
- 'exbibyte', 'exbibytes',
- 'mks', 'mksa', 'si',
- ]
|