Source code for xotl.tools.dim.base
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------
# Copyright (c) Merchise Autrement [~º/~] and Contributors
# All rights reserved.
#
# This is free software; you can do what the LICENCE file allows you to.
#
"""The standard `physical quantities`_.
.. _physical quantities: \
https://en.wikipedia.org/wiki/International_System_of_Quantities#Base_quantities
"""
from .meta import UNIT, Dimension
def kilo(v):
return 1000 * v
def centi(v):
return v / 100
def milli(v):
return v / 1000
def micro(v):
return v / 1000000
def nano(v):
return v / (10**9)
[docs]@Dimension.new()
class Length:
metre = UNIT
kilometer = km = kilo(metre)
centimeter = cm = centi(metre)
millimeter = mm = milli(metre)
nanometer = nm = nano(metre)
metre = m = Length.m = Length.metre
L = Length
[docs]@Dimension.new
class Time:
second = UNIT
millisecond = ms = milli(second)
nanosecond = ns = nano(second)
minute = second * 60
hour = minute * 60
second = s = Time.s = Time.second
T = Time
[docs]@Dimension.new(unit_aliases=("kg",))
class Mass:
kilogram = UNIT
gram = kilogram / 1000
kilogram = kg = Mass.kg
M = Mass
[docs]@Dimension.new(unit_aliases="A")
class ElectricCurrent:
ampere = UNIT
milliampere = milli(ampere)
A = ampere = ElectricCurrent.A
I = ElectricCurrent
[docs]@Dimension.new(unit_aliases="K")
class Temperature:
kelvin = UNIT
[docs] @classmethod
def from_celcius(cls, val):
"Convert `val` ºC to K"
return (val + 273.15) * cls.kelvin
[docs] @classmethod
def from_fahrenheit(cls, val):
"Convert `val` ºF to K"
return (val + 459.67) * (5 / 9) * cls.kelvin
K = kelvin = Temperature.K
O = Temperature # The actual symbol would be the capital letter Theta: Θ
[docs]@Dimension.new(unit_alias="mol")
class Substance:
mole = UNIT
mole = mol = Substance.mol
N = Substance
[docs]@Dimension.new
class Luminosity:
candela = UNIT
J = Luminosity
# Derived quantities
Area = L**2
Volume = L**3
Volume.metre_cubic = Volume._unit_
Volume._unitname_ = "metre_cubic"
Frequency = T**-1
Frequency.Hz = Frequency._unit_
Force = L * M / T**2
assert hasattr(Force, "metre_kilogram_per_second_squared")
assert Force == L * M * T**-2
Force.Newton = Force.N = Force._unit_
Pressure = Presure = M / L / T**2
assert hasattr(Pressure, "kilogram_per_metre_per_second_squared")
assert Pressure == L**-1 * M * T**-2, "as defined in Wikipedia"
Pressure.Pascal = Pressure.Pa = Pressure._unit_
Speed = Velocity = L / T
Acceleration = L / T**2