#[cfg(feature = "std")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "std")]
#[non_exhaustive]
#[derive(
Clone,
Debug,
Eq,
Hash,
Ord,
PartialEq,
PartialOrd,
Serialize,
Deserialize,
)]
pub struct Constant {
pub name: &'static str,
pub value: String,
}
#[cfg(feature = "std")]
#[derive(Clone, Serialize, Debug)]
pub struct Constants {
pub constants: Vec<Constant>,
}
#[cfg(feature = "std")]
impl Constants {
pub fn get_value(&self, name: &str) -> Option<ConstantValue> {
if let Some(constant) = self.constant(name) {
match name {
"HASH_COST" => {
constant.value.parse().map(ConstantValue::U32).ok()
}
"HASH_LENGTH" => constant
.value
.parse()
.map(ConstantValue::Usize)
.ok(),
_ => {
if let Ok(float_value) =
constant.value.parse::<f64>()
{
Some(ConstantValue::Float(float_value))
} else if let Some(char_array) =
Self::get_char_array(name)
{
Some(ConstantValue::CharArray(char_array))
} else {
Some(ConstantValue::String(
constant.value.clone(),
))
}
}
}
} else {
None
}
}
fn get_char_array(name: &str) -> Option<&'static [char]> {
match name {
"SPECIAL_CHARS" => Some(SPECIAL_CHARS),
_ => None,
}
}
pub fn constant(&self, name: &str) -> Option<Constant> {
self.constants
.iter()
.find(|constant| constant.name == name)
.cloned()
}
pub fn constants(&self) -> &[Constant] {
&self.constants
}
pub fn new() -> Self {
let mut constants = Vec::with_capacity(121);
constants.extend([
Constant {
name: "APERY",
value: APERY.to_string(),
},
Constant {
name: "AVOGADRO",
value: AVOGADRO.to_string(),
},
Constant {
name: "BOLTZMANN",
value: BOLTZMANN.to_string(),
},
Constant {
name: "CATALAN",
value: CATALAN.to_string(),
},
Constant {
name: "COULOMB",
value: COULOMB.to_string(),
},
Constant {
name: "EULER",
value: EULER.to_string(),
},
Constant {
name: "FARADAY",
value: FARADAY.to_string(),
},
Constant {
name: "GAMMA",
value: GAMMA.to_string(),
},
Constant {
name: "GAS_CONSTANT",
value: GAS_CONSTANT.to_string(),
},
Constant {
name: "GLAISHER_KINKELIN",
value: GLAISHER_KINKELIN.to_string(),
},
Constant {
name: "GRAVITATIONAL_CONSTANT",
value: GRAVITATIONAL_CONSTANT.to_string(),
},
Constant {
name: "HASH_ALGORITHM",
value: HASH_ALGORITHM.to_string(),
},
Constant {
name: "HASH_COST",
value: HASH_COST.to_string(),
},
Constant {
name: "HASH_LENGTH",
value: HASH_LENGTH.to_string(),
},
Constant {
name: "KHINCHIN",
value: KHINCHIN.to_string(),
},
Constant {
name: "PHI",
value: PHI.to_string(),
},
Constant {
name: "PI",
value: PI.to_string(),
},
Constant {
name: "PLANCK",
value: PLANCK.to_string(),
},
Constant {
name: "PLANCK_REDUCED",
value: PLANCK_REDUCED.to_string(),
},
Constant {
name: "SILVER_RATIO",
value: SILVER_RATIO.to_string(),
},
Constant {
name: "SPEED_OF_LIGHT",
value: SPEED_OF_LIGHT.to_string(),
},
Constant {
name: "SPECIAL_CHARS",
value: SPECIAL_CHARS.iter().collect::<String>(),
},
Constant {
name: "SQRT2",
value: SQRT2.to_string(),
},
Constant {
name: "SQRT3",
value: SQRT3.to_string(),
},
Constant {
name: "SQRT5",
value: SQRT5.to_string(),
},
Constant {
name: "TAU",
value: TAU.to_string(),
},
Constant {
name: "VACUUM_PERMEABILITY",
value: VACUUM_PERMEABILITY.to_string(),
},
Constant {
name: "VACUUM_PERMITTIVITY",
value: VACUUM_PERMITTIVITY.to_string(),
},
Constant {
name: "LN_2",
value: LN_2.to_string(),
},
Constant {
name: "LN_10",
value: LN_10.to_string(),
},
Constant {
name: "LOG2_E",
value: LOG2_E.to_string(),
},
Constant {
name: "LOG10_E",
value: LOG10_E.to_string(),
},
Constant {
name: "FRAC_1_SQRT_2",
value: FRAC_1_SQRT_2.to_string(),
},
Constant {
name: "FRAC_1_PI",
value: FRAC_1_PI.to_string(),
},
Constant {
name: "FRAC_2_PI",
value: FRAC_2_PI.to_string(),
},
Constant {
name: "FRAC_2_SQRT_PI",
value: FRAC_2_SQRT_PI.to_string(),
},
Constant {
name: "FRAC_PI_2",
value: FRAC_PI_2.to_string(),
},
Constant {
name: "FRAC_PI_3",
value: FRAC_PI_3.to_string(),
},
Constant {
name: "FRAC_PI_4",
value: FRAC_PI_4.to_string(),
},
Constant {
name: "FRAC_PI_6",
value: FRAC_PI_6.to_string(),
},
Constant {
name: "FRAC_PI_8",
value: FRAC_PI_8.to_string(),
},
Constant {
name: "ELEMENTARY_CHARGE",
value: ELEMENTARY_CHARGE.to_string(),
},
Constant {
name: "ELECTRON_MASS",
value: ELECTRON_MASS.to_string(),
},
Constant {
name: "PROTON_MASS",
value: PROTON_MASS.to_string(),
},
Constant {
name: "NEUTRON_MASS",
value: NEUTRON_MASS.to_string(),
},
Constant {
name: "STEFAN_BOLTZMANN",
value: STEFAN_BOLTZMANN.to_string(),
},
Constant {
name: "WIEN_DISPLACEMENT",
value: WIEN_DISPLACEMENT.to_string(),
},
Constant {
name: "STANDARD_GRAVITY",
value: STANDARD_GRAVITY.to_string(),
},
Constant {
name: "STANDARD_ATMOSPHERE",
value: STANDARD_ATMOSPHERE.to_string(),
},
Constant {
name: "ATOMIC_MASS_UNIT",
value: ATOMIC_MASS_UNIT.to_string(),
},
Constant {
name: "BOHR_RADIUS",
value: BOHR_RADIUS.to_string(),
},
Constant {
name: "FINE_STRUCTURE",
value: FINE_STRUCTURE.to_string(),
},
Constant {
name: "RYDBERG",
value: RYDBERG.to_string(),
},
Constant {
name: "MAGNETIC_FLUX_QUANTUM",
value: MAGNETIC_FLUX_QUANTUM.to_string(),
},
Constant {
name: "CONDUCTANCE_QUANTUM",
value: CONDUCTANCE_QUANTUM.to_string(),
},
Constant {
name: "MUON_MASS",
value: MUON_MASS.to_string(),
},
Constant {
name: "TAU_PARTICLE_MASS",
value: TAU_PARTICLE_MASS.to_string(),
},
Constant {
name: "DEUTERON_MASS",
value: DEUTERON_MASS.to_string(),
},
Constant {
name: "TRITON_MASS",
value: TRITON_MASS.to_string(),
},
Constant {
name: "HELION_MASS",
value: HELION_MASS.to_string(),
},
Constant {
name: "ALPHA_PARTICLE_MASS",
value: ALPHA_PARTICLE_MASS.to_string(),
},
Constant {
name: "ELECTRON_PROTON_MASS_RATIO",
value: ELECTRON_PROTON_MASS_RATIO.to_string(),
},
Constant {
name: "PROTON_ELECTRON_MASS_RATIO",
value: PROTON_ELECTRON_MASS_RATIO.to_string(),
},
Constant {
name: "MUON_ELECTRON_MASS_RATIO",
value: MUON_ELECTRON_MASS_RATIO.to_string(),
},
Constant {
name: "NEUTRON_PROTON_MASS_RATIO",
value: NEUTRON_PROTON_MASS_RATIO.to_string(),
},
Constant {
name: "DEUTERON_PROTON_MASS_RATIO",
value: DEUTERON_PROTON_MASS_RATIO.to_string(),
},
Constant {
name: "BOHR_MAGNETON",
value: BOHR_MAGNETON.to_string(),
},
Constant {
name: "NUCLEAR_MAGNETON",
value: NUCLEAR_MAGNETON.to_string(),
},
Constant {
name: "ELECTRON_MAGNETIC_MOMENT",
value: ELECTRON_MAGNETIC_MOMENT.to_string(),
},
Constant {
name: "PROTON_MAGNETIC_MOMENT",
value: PROTON_MAGNETIC_MOMENT.to_string(),
},
Constant {
name: "NEUTRON_MAGNETIC_MOMENT",
value: NEUTRON_MAGNETIC_MOMENT.to_string(),
},
Constant {
name: "ELECTRON_G_FACTOR",
value: ELECTRON_G_FACTOR.to_string(),
},
Constant {
name: "PROTON_G_FACTOR",
value: PROTON_G_FACTOR.to_string(),
},
Constant {
name: "ELECTRON_VOLT",
value: ELECTRON_VOLT.to_string(),
},
Constant {
name: "EV_TO_KG",
value: EV_TO_KG.to_string(),
},
Constant {
name: "EV_TO_AMU",
value: EV_TO_AMU.to_string(),
},
Constant {
name: "EV_TO_HZ",
value: EV_TO_HZ.to_string(),
},
Constant {
name: "EV_TO_KELVIN",
value: EV_TO_KELVIN.to_string(),
},
Constant {
name: "EV_TO_INVERSE_METER",
value: EV_TO_INVERSE_METER.to_string(),
},
Constant {
name: "CLASSICAL_ELECTRON_RADIUS",
value: CLASSICAL_ELECTRON_RADIUS.to_string(),
},
Constant {
name: "ELECTRON_COMPTON_WAVELENGTH",
value: ELECTRON_COMPTON_WAVELENGTH.to_string(),
},
Constant {
name: "PROTON_COMPTON_WAVELENGTH",
value: PROTON_COMPTON_WAVELENGTH.to_string(),
},
Constant {
name: "NEUTRON_COMPTON_WAVELENGTH",
value: NEUTRON_COMPTON_WAVELENGTH.to_string(),
},
Constant {
name: "THOMSON_CROSS_SECTION",
value: THOMSON_CROSS_SECTION.to_string(),
},
Constant {
name: "FIRST_RADIATION_CONSTANT",
value: FIRST_RADIATION_CONSTANT.to_string(),
},
Constant {
name: "SECOND_RADIATION_CONSTANT",
value: SECOND_RADIATION_CONSTANT.to_string(),
},
Constant {
name: "JOSEPHSON_CONSTANT",
value: JOSEPHSON_CONSTANT.to_string(),
},
Constant {
name: "VON_KLITZING_CONSTANT",
value: VON_KLITZING_CONSTANT.to_string(),
},
Constant {
name: "HARTREE_ENERGY",
value: HARTREE_ENERGY.to_string(),
},
Constant {
name: "HARTREE_ENERGY_EV",
value: HARTREE_ENERGY_EV.to_string(),
},
Constant {
name: "PLANCK_MASS",
value: PLANCK_MASS.to_string(),
},
Constant {
name: "PLANCK_LENGTH",
value: PLANCK_LENGTH.to_string(),
},
Constant {
name: "PLANCK_TIME",
value: PLANCK_TIME.to_string(),
},
Constant {
name: "PLANCK_TEMPERATURE",
value: PLANCK_TEMPERATURE.to_string(),
},
Constant {
name: "PLANCK_CHARGE",
value: PLANCK_CHARGE.to_string(),
},
Constant {
name: "MOLAR_MASS_CONSTANT",
value: MOLAR_MASS_CONSTANT.to_string(),
},
Constant {
name: "MOLAR_PLANCK_CONSTANT",
value: MOLAR_PLANCK_CONSTANT.to_string(),
},
Constant {
name: "LOSCHMIDT_CONSTANT",
value: LOSCHMIDT_CONSTANT.to_string(),
},
Constant {
name: "MOLAR_VOLUME_IDEAL_GAS",
value: MOLAR_VOLUME_IDEAL_GAS.to_string(),
},
Constant {
name: "SACKUR_TETRODE_CONSTANT",
value: SACKUR_TETRODE_CONSTANT.to_string(),
},
Constant {
name: "IMPEDANCE_OF_FREE_SPACE",
value: IMPEDANCE_OF_FREE_SPACE.to_string(),
},
Constant {
name: "INVERSE_FINE_STRUCTURE",
value: INVERSE_FINE_STRUCTURE.to_string(),
},
Constant {
name: "ELECTRON_CHARGE_TO_MASS",
value: ELECTRON_CHARGE_TO_MASS.to_string(),
},
Constant {
name: "PROTON_CHARGE_TO_MASS",
value: PROTON_CHARGE_TO_MASS.to_string(),
},
Constant {
name: "ATOMIC_UNIT_OF_LENGTH",
value: ATOMIC_UNIT_OF_LENGTH.to_string(),
},
Constant {
name: "ATOMIC_UNIT_OF_TIME",
value: ATOMIC_UNIT_OF_TIME.to_string(),
},
Constant {
name: "ATOMIC_UNIT_OF_VELOCITY",
value: ATOMIC_UNIT_OF_VELOCITY.to_string(),
},
Constant {
name: "ATOMIC_UNIT_OF_FORCE",
value: ATOMIC_UNIT_OF_FORCE.to_string(),
},
Constant {
name: "ATOMIC_UNIT_OF_ELECTRIC_FIELD",
value: ATOMIC_UNIT_OF_ELECTRIC_FIELD.to_string(),
},
Constant {
name: "ATOMIC_UNIT_OF_POLARIZABILITY",
value: ATOMIC_UNIT_OF_POLARIZABILITY.to_string(),
},
Constant {
name: "W_BOSON_MASS_GEV",
value: W_BOSON_MASS_GEV.to_string(),
},
Constant {
name: "Z_BOSON_MASS_GEV",
value: Z_BOSON_MASS_GEV.to_string(),
},
Constant {
name: "HIGGS_BOSON_MASS_GEV",
value: HIGGS_BOSON_MASS_GEV.to_string(),
},
Constant {
name: "ELECTRON_MASS_MEV",
value: ELECTRON_MASS_MEV.to_string(),
},
Constant {
name: "PROTON_MASS_MEV",
value: PROTON_MASS_MEV.to_string(),
},
Constant {
name: "NEUTRON_MASS_MEV",
value: NEUTRON_MASS_MEV.to_string(),
},
Constant {
name: "MUON_MASS_MEV",
value: MUON_MASS_MEV.to_string(),
},
Constant {
name: "ELECTRON_REDUCED_COMPTON",
value: ELECTRON_REDUCED_COMPTON.to_string(),
},
Constant {
name: "PROTON_REDUCED_COMPTON",
value: PROTON_REDUCED_COMPTON.to_string(),
},
Constant {
name: "NEUTRON_REDUCED_COMPTON",
value: NEUTRON_REDUCED_COMPTON.to_string(),
},
Constant {
name: "GAS_CONSTANT_L_ATM",
value: GAS_CONSTANT_L_ATM.to_string(),
},
]);
Self { constants }
}
pub fn is_valid(&self) -> bool {
self.constants().iter().all(|constant| {
!constant.name.is_empty() && !constant.value.is_empty()
})
}
}
#[cfg(feature = "std")]
impl Default for Constants {
fn default() -> Self {
Self::new()
}
}
#[cfg(feature = "std")]
#[derive(Debug, Clone, Serialize)]
pub enum ConstantValue {
Float(f64),
String(String),
U32(u32),
Usize(usize),
CharArray(&'static [char]),
}
#[cfg(feature = "std")]
impl core::fmt::Display for ConstantValue {
fn fmt(
&self,
f: &mut core::fmt::Formatter<'_>,
) -> core::fmt::Result {
match self {
Self::Float(v) => write!(f, "{v}"),
Self::String(v) => write!(f, "{v}"),
Self::U32(v) => write!(f, "{v}"),
Self::Usize(v) => write!(f, "{v}"),
Self::CharArray(v) => {
for ch in *v {
write!(f, "{ch}")?;
}
Ok(())
}
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Category {
Mathematical,
Physical,
Cryptographic,
}
use Category::{Mathematical as M, Physical as P};
pub const CONSTANTS_TABLE: &[(&str, f64, Category)] = &[
("APERY", APERY, M),
("AVOGADRO", AVOGADRO, P),
("BOLTZMANN", BOLTZMANN, P),
("CATALAN", CATALAN, M),
("COULOMB", COULOMB, P),
("EULER", EULER, M),
("FARADAY", FARADAY, P),
("GAMMA", GAMMA, M),
("GAS_CONSTANT", GAS_CONSTANT, P),
("GLAISHER_KINKELIN", GLAISHER_KINKELIN, M),
("GRAVITATIONAL_CONSTANT", GRAVITATIONAL_CONSTANT, P),
("KHINCHIN", KHINCHIN, M),
("PHI", PHI, M),
("PI", PI, M),
("PLANCK", PLANCK, P),
("PLANCK_REDUCED", PLANCK_REDUCED, P),
("SILVER_RATIO", SILVER_RATIO, M),
("SPEED_OF_LIGHT", SPEED_OF_LIGHT, P),
("SQRT2", SQRT2, M),
("SQRT3", SQRT3, M),
("SQRT5", SQRT5, M),
("TAU", TAU, M),
("VACUUM_PERMEABILITY", VACUUM_PERMEABILITY, P),
("VACUUM_PERMITTIVITY", VACUUM_PERMITTIVITY, P),
("LN_2", LN_2, M),
("LN_10", LN_10, M),
("LOG2_E", LOG2_E, M),
("LOG10_E", LOG10_E, M),
("FRAC_1_SQRT_2", FRAC_1_SQRT_2, M),
("FRAC_1_PI", FRAC_1_PI, M),
("FRAC_2_PI", FRAC_2_PI, M),
("FRAC_2_SQRT_PI", FRAC_2_SQRT_PI, M),
("FRAC_PI_2", FRAC_PI_2, M),
("FRAC_PI_3", FRAC_PI_3, M),
("FRAC_PI_4", FRAC_PI_4, M),
("FRAC_PI_6", FRAC_PI_6, M),
("FRAC_PI_8", FRAC_PI_8, M),
("ELEMENTARY_CHARGE", ELEMENTARY_CHARGE, P),
("ELECTRON_MASS", ELECTRON_MASS, P),
("PROTON_MASS", PROTON_MASS, P),
("NEUTRON_MASS", NEUTRON_MASS, P),
("STEFAN_BOLTZMANN", STEFAN_BOLTZMANN, P),
("WIEN_DISPLACEMENT", WIEN_DISPLACEMENT, P),
("STANDARD_GRAVITY", STANDARD_GRAVITY, P),
("STANDARD_ATMOSPHERE", STANDARD_ATMOSPHERE, P),
("ATOMIC_MASS_UNIT", ATOMIC_MASS_UNIT, P),
("BOHR_RADIUS", BOHR_RADIUS, P),
("FINE_STRUCTURE", FINE_STRUCTURE, P),
("RYDBERG", RYDBERG, P),
("MAGNETIC_FLUX_QUANTUM", MAGNETIC_FLUX_QUANTUM, P),
("CONDUCTANCE_QUANTUM", CONDUCTANCE_QUANTUM, P),
("MUON_MASS", MUON_MASS, P),
("TAU_PARTICLE_MASS", TAU_PARTICLE_MASS, P),
("DEUTERON_MASS", DEUTERON_MASS, P),
("TRITON_MASS", TRITON_MASS, P),
("HELION_MASS", HELION_MASS, P),
("ALPHA_PARTICLE_MASS", ALPHA_PARTICLE_MASS, P),
("ELECTRON_PROTON_MASS_RATIO", ELECTRON_PROTON_MASS_RATIO, P),
("PROTON_ELECTRON_MASS_RATIO", PROTON_ELECTRON_MASS_RATIO, P),
("MUON_ELECTRON_MASS_RATIO", MUON_ELECTRON_MASS_RATIO, P),
("NEUTRON_PROTON_MASS_RATIO", NEUTRON_PROTON_MASS_RATIO, P),
("DEUTERON_PROTON_MASS_RATIO", DEUTERON_PROTON_MASS_RATIO, P),
("BOHR_MAGNETON", BOHR_MAGNETON, P),
("NUCLEAR_MAGNETON", NUCLEAR_MAGNETON, P),
("ELECTRON_MAGNETIC_MOMENT", ELECTRON_MAGNETIC_MOMENT, P),
("PROTON_MAGNETIC_MOMENT", PROTON_MAGNETIC_MOMENT, P),
("NEUTRON_MAGNETIC_MOMENT", NEUTRON_MAGNETIC_MOMENT, P),
("ELECTRON_G_FACTOR", ELECTRON_G_FACTOR, P),
("PROTON_G_FACTOR", PROTON_G_FACTOR, P),
("ELECTRON_VOLT", ELECTRON_VOLT, P),
("EV_TO_KG", EV_TO_KG, P),
("EV_TO_AMU", EV_TO_AMU, P),
("EV_TO_HZ", EV_TO_HZ, P),
("EV_TO_KELVIN", EV_TO_KELVIN, P),
("EV_TO_INVERSE_METER", EV_TO_INVERSE_METER, P),
("CLASSICAL_ELECTRON_RADIUS", CLASSICAL_ELECTRON_RADIUS, P),
(
"ELECTRON_COMPTON_WAVELENGTH",
ELECTRON_COMPTON_WAVELENGTH,
P,
),
("PROTON_COMPTON_WAVELENGTH", PROTON_COMPTON_WAVELENGTH, P),
("NEUTRON_COMPTON_WAVELENGTH", NEUTRON_COMPTON_WAVELENGTH, P),
("THOMSON_CROSS_SECTION", THOMSON_CROSS_SECTION, P),
("FIRST_RADIATION_CONSTANT", FIRST_RADIATION_CONSTANT, P),
("SECOND_RADIATION_CONSTANT", SECOND_RADIATION_CONSTANT, P),
("JOSEPHSON_CONSTANT", JOSEPHSON_CONSTANT, P),
("VON_KLITZING_CONSTANT", VON_KLITZING_CONSTANT, P),
("HARTREE_ENERGY", HARTREE_ENERGY, P),
("HARTREE_ENERGY_EV", HARTREE_ENERGY_EV, P),
("PLANCK_MASS", PLANCK_MASS, P),
("PLANCK_LENGTH", PLANCK_LENGTH, P),
("PLANCK_TIME", PLANCK_TIME, P),
("PLANCK_TEMPERATURE", PLANCK_TEMPERATURE, P),
("PLANCK_CHARGE", PLANCK_CHARGE, P),
("MOLAR_MASS_CONSTANT", MOLAR_MASS_CONSTANT, P),
("MOLAR_PLANCK_CONSTANT", MOLAR_PLANCK_CONSTANT, P),
("LOSCHMIDT_CONSTANT", LOSCHMIDT_CONSTANT, P),
("MOLAR_VOLUME_IDEAL_GAS", MOLAR_VOLUME_IDEAL_GAS, P),
("SACKUR_TETRODE_CONSTANT", SACKUR_TETRODE_CONSTANT, P),
("IMPEDANCE_OF_FREE_SPACE", IMPEDANCE_OF_FREE_SPACE, P),
("INVERSE_FINE_STRUCTURE", INVERSE_FINE_STRUCTURE, P),
("ELECTRON_CHARGE_TO_MASS", ELECTRON_CHARGE_TO_MASS, P),
("PROTON_CHARGE_TO_MASS", PROTON_CHARGE_TO_MASS, P),
("ATOMIC_UNIT_OF_LENGTH", ATOMIC_UNIT_OF_LENGTH, P),
("ATOMIC_UNIT_OF_TIME", ATOMIC_UNIT_OF_TIME, P),
("ATOMIC_UNIT_OF_VELOCITY", ATOMIC_UNIT_OF_VELOCITY, P),
("ATOMIC_UNIT_OF_FORCE", ATOMIC_UNIT_OF_FORCE, P),
(
"ATOMIC_UNIT_OF_ELECTRIC_FIELD",
ATOMIC_UNIT_OF_ELECTRIC_FIELD,
P,
),
(
"ATOMIC_UNIT_OF_POLARIZABILITY",
ATOMIC_UNIT_OF_POLARIZABILITY,
P,
),
("W_BOSON_MASS_GEV", W_BOSON_MASS_GEV, P),
("Z_BOSON_MASS_GEV", Z_BOSON_MASS_GEV, P),
("HIGGS_BOSON_MASS_GEV", HIGGS_BOSON_MASS_GEV, P),
("ELECTRON_MASS_MEV", ELECTRON_MASS_MEV, P),
("PROTON_MASS_MEV", PROTON_MASS_MEV, P),
("NEUTRON_MASS_MEV", NEUTRON_MASS_MEV, P),
("MUON_MASS_MEV", MUON_MASS_MEV, P),
("ELECTRON_REDUCED_COMPTON", ELECTRON_REDUCED_COMPTON, P),
("PROTON_REDUCED_COMPTON", PROTON_REDUCED_COMPTON, P),
("NEUTRON_REDUCED_COMPTON", NEUTRON_REDUCED_COMPTON, P),
("GAS_CONSTANT_L_ATM", GAS_CONSTANT_L_ATM, P),
];
pub const APERY: f64 = 1.2020569031595942;
pub const AVOGADRO: f64 = 6.02214076e23;
pub const BOLTZMANN: f64 = 1.380_649e-23;
pub const CATALAN: f64 = 0.915_965_594_177_219;
pub const COULOMB: f64 = 8.9875517923e9;
pub const COULOMB_UNCERTAINTY: f64 = 0.0;
pub const EULER: f64 = core::f64::consts::E;
pub const FARADAY: f64 = 96485.33212;
pub const GAMMA: f64 = 0.5772156649015329;
pub const GAS_CONSTANT: f64 = 8.314462618;
pub const GLAISHER_KINKELIN: f64 = 1.2824271291006226;
pub const GRAVITATIONAL_CONSTANT: f64 = 6.67430e-11;
pub const GRAVITATIONAL_CONSTANT_UNCERTAINTY: f64 = 0.00015e-11;
pub const HASH_ALGORITHM: &str = "Blake3";
pub const HASH_COST: u32 = 8;
pub const HASH_LENGTH: usize = 32;
pub const KHINCHIN: f64 = 2.6854520010653064;
pub const PHI: f64 = (1.0 + SQRT5) / 2.0;
pub const PI: f64 = core::f64::consts::PI;
pub const PLANCK: f64 = 6.62607015e-34;
pub const PLANCK_REDUCED: f64 = PLANCK / (2.0 * PI);
pub const SILVER_RATIO: f64 = 1.0 + SQRT2;
pub const SPEED_OF_LIGHT: f64 = 299792458.0;
pub const SPECIAL_CHARS: &[char] = &[
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=',
'[', ']', '{', '}', '|', ';', ':', '"', '<', '>', ',', '.', '?',
'/', '~', '`',
];
pub const SQRT2: f64 = core::f64::consts::SQRT_2;
pub const SQRT3: f64 = 1.7320508075688772;
pub const SQRT5: f64 = 2.236_067_977_499_79;
pub const TAU: f64 = core::f64::consts::TAU;
pub const VACUUM_PERMEABILITY: f64 = 1.25663706212e-6;
pub const VACUUM_PERMEABILITY_UNCERTAINTY: f64 = 0.00000000019e-6;
pub const VACUUM_PERMITTIVITY: f64 = 8.8541878128e-12;
pub const VACUUM_PERMITTIVITY_UNCERTAINTY: f64 = 0.0000000013e-12;
pub const LN_2: f64 = core::f64::consts::LN_2;
pub const LN_10: f64 = core::f64::consts::LN_10;
pub const LOG2_E: f64 = core::f64::consts::LOG2_E;
pub const LOG10_E: f64 = core::f64::consts::LOG10_E;
pub const FRAC_1_SQRT_2: f64 = core::f64::consts::FRAC_1_SQRT_2;
pub const FRAC_1_PI: f64 = core::f64::consts::FRAC_1_PI;
pub const FRAC_2_PI: f64 = core::f64::consts::FRAC_2_PI;
pub const FRAC_2_SQRT_PI: f64 = core::f64::consts::FRAC_2_SQRT_PI;
pub const FRAC_PI_2: f64 = core::f64::consts::FRAC_PI_2;
pub const FRAC_PI_3: f64 = core::f64::consts::FRAC_PI_3;
pub const FRAC_PI_4: f64 = core::f64::consts::FRAC_PI_4;
pub const FRAC_PI_6: f64 = core::f64::consts::FRAC_PI_6;
pub const FRAC_PI_8: f64 = core::f64::consts::FRAC_PI_8;
pub const ELEMENTARY_CHARGE: f64 = 1.602_176_634e-19;
pub const ELECTRON_MASS: f64 = 9.109_383_701_5e-31;
pub const ELECTRON_MASS_UNCERTAINTY: f64 = 0.000_000_002_8e-31;
pub const PROTON_MASS: f64 = 1.672_621_923_69e-27;
pub const PROTON_MASS_UNCERTAINTY: f64 = 0.000_000_000_51e-27;
pub const NEUTRON_MASS: f64 = 1.674_927_498_04e-27;
pub const NEUTRON_MASS_UNCERTAINTY: f64 = 0.000_000_000_95e-27;
pub const STEFAN_BOLTZMANN: f64 = 5.670_374_419e-8;
pub const WIEN_DISPLACEMENT: f64 = 2.897_771_955e-3;
pub const WIEN_DISPLACEMENT_UNCERTAINTY: f64 = 0.000_000_013e-3;
pub const STANDARD_GRAVITY: f64 = 9.806_65;
pub const STANDARD_ATMOSPHERE: f64 = 101_325.0;
pub const ATOMIC_MASS_UNIT: f64 = 1.660_539_066_60e-27;
pub const ATOMIC_MASS_UNIT_UNCERTAINTY: f64 = 0.000_000_000_50e-27;
pub const BOHR_RADIUS: f64 = 5.291_772_109_03e-11;
pub const BOHR_RADIUS_UNCERTAINTY: f64 = 0.000_000_000_80e-11;
pub const FINE_STRUCTURE: f64 = 7.297_352_569_3e-3;
pub const FINE_STRUCTURE_UNCERTAINTY: f64 = 0.000_000_001_1e-3;
pub const RYDBERG: f64 = 10_973_731.568_160;
pub const RYDBERG_UNCERTAINTY: f64 = 0.000_021;
pub const MAGNETIC_FLUX_QUANTUM: f64 = 2.067_833_848e-15;
pub const CONDUCTANCE_QUANTUM: f64 = 7.748_091_729e-5;
pub const MUON_MASS: f64 = 1.883_531_627e-28;
pub const TAU_PARTICLE_MASS: f64 = 3.167_54e-27;
pub const DEUTERON_MASS: f64 = 3.343_583_772_4e-27;
pub const TRITON_MASS: f64 = 5.007_356_744_6e-27;
pub const HELION_MASS: f64 = 5.006_412_779_6e-27;
pub const ALPHA_PARTICLE_MASS: f64 = 6.644_657_335_7e-27;
pub const ELECTRON_PROTON_MASS_RATIO: f64 = 5.446_170_214_87e-4;
pub const PROTON_ELECTRON_MASS_RATIO: f64 = 1_836.152_673_43;
pub const MUON_ELECTRON_MASS_RATIO: f64 = 206.768_283_0;
pub const NEUTRON_PROTON_MASS_RATIO: f64 = 1.001_378_419_31;
pub const DEUTERON_PROTON_MASS_RATIO: f64 = 1.999_007_501_39;
pub const BOHR_MAGNETON: f64 = 9.274_010_078_3e-24;
pub const NUCLEAR_MAGNETON: f64 = 5.050_783_746_1e-27;
pub const ELECTRON_MAGNETIC_MOMENT: f64 = -9.284_764_704_3e-24;
pub const PROTON_MAGNETIC_MOMENT: f64 = 1.410_606_797_36e-26;
pub const NEUTRON_MAGNETIC_MOMENT: f64 = -9.662_365_1e-27;
pub const ELECTRON_G_FACTOR: f64 = -2.002_319_304_362_56;
pub const PROTON_G_FACTOR: f64 = 5.585_694_689_3;
pub const ELECTRON_VOLT: f64 = 1.602_176_634e-19;
pub const EV_TO_KG: f64 = 1.782_661_921e-36;
pub const EV_TO_AMU: f64 = 1.073_544_102_33e-9;
pub const EV_TO_HZ: f64 = 2.417_989_242e14;
pub const EV_TO_KELVIN: f64 = 1.160_451_812e4;
pub const EV_TO_INVERSE_METER: f64 = 8.065_543_937e5;
pub const CLASSICAL_ELECTRON_RADIUS: f64 = 2.817_940_326_2e-15;
pub const ELECTRON_COMPTON_WAVELENGTH: f64 = 2.426_310_238_67e-12;
pub const PROTON_COMPTON_WAVELENGTH: f64 = 1.321_409_855_39e-15;
pub const NEUTRON_COMPTON_WAVELENGTH: f64 = 1.319_590_905_81e-15;
pub const THOMSON_CROSS_SECTION: f64 = 6.652_458_732_1e-29;
pub const FIRST_RADIATION_CONSTANT: f64 = 3.741_771_852e-16;
pub const SECOND_RADIATION_CONSTANT: f64 = 1.438_776_877e-2;
pub const JOSEPHSON_CONSTANT: f64 = 4.835_978_484e14;
pub const VON_KLITZING_CONSTANT: f64 = 25_812.807_45;
pub const HARTREE_ENERGY: f64 = 4.359_744_722_207_1e-18;
pub const HARTREE_ENERGY_EV: f64 = 27.211_386_245_988;
pub const PLANCK_MASS: f64 = 2.176_434e-8;
pub const PLANCK_LENGTH: f64 = 1.616_255e-35;
pub const PLANCK_TIME: f64 = 5.391_247e-44;
pub const PLANCK_TEMPERATURE: f64 = 1.416_784e32;
pub const PLANCK_CHARGE: f64 = 1.875_546e-18;
pub const MOLAR_MASS_CONSTANT: f64 = 0.999_999_999_65e-3;
pub const MOLAR_PLANCK_CONSTANT: f64 = 3.990_312_712e-10;
pub const LOSCHMIDT_CONSTANT: f64 = 2.686_777_4e25;
pub const MOLAR_VOLUME_IDEAL_GAS: f64 = 22.710_95e-3;
pub const SACKUR_TETRODE_CONSTANT: f64 = -1.151_707_537_06;
pub const IMPEDANCE_OF_FREE_SPACE: f64 = 376.730_313_668;
pub const INVERSE_FINE_STRUCTURE: f64 = 137.035_999_084;
pub const ELECTRON_CHARGE_TO_MASS: f64 = -1.758_820_010_76e11;
pub const PROTON_CHARGE_TO_MASS: f64 = 9.578_833_2e7;
pub const ATOMIC_UNIT_OF_LENGTH: f64 = BOHR_RADIUS;
pub const ATOMIC_UNIT_OF_TIME: f64 = 2.418_884_326_585_7e-17;
pub const ATOMIC_UNIT_OF_VELOCITY: f64 = 2.187_691_263_64e6;
pub const ATOMIC_UNIT_OF_FORCE: f64 = 8.238_723_498_3e-8;
pub const ATOMIC_UNIT_OF_ELECTRIC_FIELD: f64 = 5.142_206_747_63e11;
pub const ATOMIC_UNIT_OF_POLARIZABILITY: f64 = 1.648_777_274_36e-41;
pub const W_BOSON_MASS_GEV: f64 = 80.377;
pub const Z_BOSON_MASS_GEV: f64 = 91.1876;
pub const HIGGS_BOSON_MASS_GEV: f64 = 125.25;
pub const ELECTRON_MASS_MEV: f64 = 0.510_998_950_00;
pub const PROTON_MASS_MEV: f64 = 938.272_088_16;
pub const NEUTRON_MASS_MEV: f64 = 939.565_420_52;
pub const MUON_MASS_MEV: f64 = 105.658_375_5;
pub const ELECTRON_REDUCED_COMPTON: f64 = 3.861_592_679_6e-13;
pub const PROTON_REDUCED_COMPTON: f64 = 2.103_089_103_36e-16;
pub const NEUTRON_REDUCED_COMPTON: f64 = 2.100_194_156_00e-16;
pub const GAS_CONSTANT_L_ATM: f64 = 0.082_057_366_08;