abbreviations = ("kg", "m", "s", "k", "a", "mol", "cd")
[docs]def SIDimensions(kg=0, m=0, s=0, k=0, a=0, mol=0, cd=0):
"""Create a dimensionality tuple with base si units of provided exponents.
:param kg: The exponent of Kilograms.
:type kg: ``numbers.Real``
:param m: The exponent of Meters.
:type m: ``numbers.Real``
:param s: The exponent of Seconds.
:type s: ``numbers.Real``
:param k: The exponent of Kelvin.
:type k: ``numbers.Real``
:param a: The exponent of Amperes.
:type a: ``numbers.Real``
:param mol: The exponent of Mols.
:type mol: ``numbers.Real``
:param cd: The exponent of Candelas.
:type cd: ``numbers.Real``
:rtype: ``tuple``
"""
return (kg, m, s, k, a, mol, cd)
[docs]def dim_mul(dims1, dims2):
"""Create a new dimensionality for the multiplication of dims1 by dims2.
:param dims1: Numerator dimensions.
:type dims1: ``tuple``
:param dims2: Other numerator dimensions.
:type dims2: ``tuple``
:rtype: ``tuple``
"""
return (
dims1[0] + dims2[0],
dims1[1] + dims2[1],
dims1[2] + dims2[2],
dims1[3] + dims2[3],
dims1[4] + dims2[4],
dims1[5] + dims2[5],
dims1[6] + dims2[6],
)
[docs]def dim_div(dims1, dims2):
"""Create a new dimensionality tuple for the division of dims1 by dims2.
:param dims1: The numerator dimensions.
:type dims1: ``tuple``
:param dims2: The divisor dimensions.
:type dims2: ``tuple``
:rtype: ``tuple``
"""
return (
dims1[0] - dims2[0],
dims1[1] - dims2[1],
dims1[2] - dims2[2],
dims1[3] - dims2[3],
dims1[4] - dims2[4],
dims1[5] - dims2[5],
dims1[6] - dims2[6],
)
[docs]def dim_pow(dims, exp):
"""Create a new dimensionality tuple for the exponentiation of dims by exp.
:param dims: The base dimensions.
:type dims: ``tuple``
:param exp: The power to raise the base dimensions to.
:type exp: ``numbers.Real``
:rtype: ``tuple``
"""
return (
dims[0] * exp,
dims[1] * exp,
dims[2] * exp,
dims[3] * exp,
dims[4] * exp,
dims[5] * exp,
dims[6] * exp,
)
[docs]def dim_str(dims):
"""Express dimensions as a human readable string.
:param dims: The base unit dimensions to present.
:type dims: ``tuple``
:rtype: ``str``
"""
return "*".join(
"%s**%g" % (unit_abbreviation, power)
for unit_abbreviation, power in zip(abbreviations, dims)
if power != 0
)
#:
angle_t = SIDimensions()
#:
solid_angle_t = SIDimensions()
#:
strain_t = SIDimensions()
#:
ratio_t = SIDimensions()
#:
mass_t = SIDimensions(kg=1)
#:
distance_t = SIDimensions(m=1)
#:
time_t = SIDimensions(s=1)
#:
temperature_t = SIDimensions(k=1)
#:
current_t = SIDimensions(a=1)
#:
amount_t = SIDimensions(mol=1)
#:
luminosity_t = SIDimensions(cd=1)
#:
frequency_t = SIDimensions(s=-1)
#:
speed_t = dim_div(distance_t, time_t)
#:
acceleration_t = dim_div(speed_t, time_t)
#:
jerk_t = dim_div(acceleration_t, time_t)
#:
jounce_t = dim_div(jerk_t, time_t)
#:
area_t = dim_pow(distance_t, 2)
#:
volume_t = dim_pow(distance_t, 3)
#:
density_t = dim_div(mass_t, volume_t)
#:
volumetric_flow_t = dim_div(volume_t, time_t)
#:
force_t = dim_mul(mass_t, acceleration_t)
#:
moment_t = dim_mul(force_t, distance_t)
#:
torque_t = moment_t
#:
impulse_t = dim_mul(force_t, time_t)
#:
momentum_t = impulse_t
#:
stress_t = dim_div(force_t, area_t)
#:
pressure_t = stress_t
#:
hydrostatic_pressure_t = dim_mul(density_t, dim_mul(acceleration_t, distance_t))
#:
stiffness_t = dim_div(force_t, distance_t)
#:
surface_tension_t = stiffness_t
#:
energy_t = dim_mul(force_t, distance_t)
#:
work_t = energy_t
#:
heat_t = energy_t
#:
power_t = dim_div(energy_t, time_t)
#:
charge_t = dim_mul(current_t, time_t)
#:
potential_t = dim_div(energy_t, current_t)
#:
capacitance_t = dim_div(charge_t, potential_t)
#:
resistance_t = dim_div(potential_t, current_t)
#:
impedance_t = resistance_t
#:
reactance_t = resistance_t
#:
conductance_t = dim_div(current_t, potential_t)
#:
magnetic_flux_t = dim_div(energy_t, current_t)
#:
magnetic_flux_density_t = dim_div(magnetic_flux_t, area_t)
#:
inductance_t = dim_mul(impedance_t, time_t)
#:
luminous_flux_t = dim_mul(luminosity_t, solid_angle_t)
#:
illuminance_t = dim_div(luminous_flux_t, area_t)
#:
molarity_t = dim_div(amount_t, volume_t)
#:
molality_t = dim_div(amount_t, mass_t)
#:
molar_mass_t = dim_div(mass_t, amount_t)
#:
entropy_t = dim_div(energy_t, temperature_t)
#:
heat_capacity_t = entropy_t
#:
specific_entropy_t = dim_div(entropy_t, mass_t)
#:
specific_heat_capacity_t = specific_entropy_t
#:
temperature_gradient_t = dim_div(temperature_t, distance_t)