diff --git a/lib/src/core/constants.dart b/lib/src/core/constants.dart index c872745..457a099 100644 --- a/lib/src/core/constants.dart +++ b/lib/src/core/constants.dart @@ -5,9 +5,11 @@ /// final c = Constants.speedOfLight; /// print('${c.name}: ${c.value} ${c.unit}'); // Speed of Light: 299792458 m/s /// ``` +import 'complex.dart'; + class Constant { /// The numeric value of the constant. - final double value; + final dynamic value; /// Full name of the constant (e.g., "Speed of Light"). final String name; @@ -89,7 +91,7 @@ class Constants { /// Imaginary Unit (i) - square root of -1 static const imaginaryUnit = Constant( - value: double.nan, + value: Complex(0, 1), name: 'Imaginary Unit', unit: '', symbol: 'i', @@ -97,6 +99,16 @@ class Constants { category: 'mathematical', ); + /// Infinity (∞) + static const infinity = Constant( + value: double.infinity, + name: 'Infinity', + unit: '', + symbol: '∞', + key: 'INF', + category: 'mathematical', + ); + /// Golden ratio (φ) static const goldenRatio = Constant( value: 1.618033988749895, @@ -511,6 +523,16 @@ class Constants { category: 'celestial', ); + /// Gravitational acceleration Earth (standard approx) + static const gravitationalAccelerationEarth = Constant( + value: 9.8, + name: 'Gravitational acceleration Earth', + unit: 'm/s²', + symbol: 'GE', + key: 'GE', + category: 'earth', + ); + // ═══════════════════════════════════════════════════════════════════════════ // ALL CONSTANTS MAP // ═══════════════════════════════════════════════════════════════════════════ @@ -521,6 +543,7 @@ class Constants { 'PI': pi, 'EN': e, 'IN': imaginaryUnit, + 'INF': infinity, 'PHI': goldenRatio, 'SQRT2': sqrt2, // Fundamental @@ -531,7 +554,9 @@ class Constants { // Electromagnetic 'EC': elementaryCharge, 'VP': vacuumPermittivity, + 'EP': vacuumPermittivity, // Alias 'VPM': vacuumPermeability, + 'MU': vacuumPermeability, // Alias 'CC': coulomb, // Atomic 'ME': electronMass, @@ -555,11 +580,13 @@ class Constants { 'RG': gasConstant, 'ATM': standardAtmosphere, 'SBC': stefanBoltzmann, + 'SB': stefanBoltzmann, // Alias 'WIE': wienDisplacement, 'C1': firstRadiation, 'C2': secondRadiation, // Earth & Celestial 'SG': standardGravity, + 'GE': gravitationalAccelerationEarth, 'EM': earthMass, 'ER': earthRadius, 'SM': sunMass, diff --git a/lib/src/equation_parser.dart b/lib/src/equation_parser.dart index 7a35a7d..e3d65ff 100644 --- a/lib/src/equation_parser.dart +++ b/lib/src/equation_parser.dart @@ -86,225 +86,19 @@ class EquationParser { // ═════════════════════════════════════════════════════════════════════════ /// Common natural constants with their values and descriptions. - static const Map naturalConstants = { - 'GC': NaturalConstant( - value: 6.67430e-11, - name: 'Gravitational Constant', - unit: 'N⋅m²/kg²', - symbol: 'G', - ), - 'SOL': NaturalConstant( - value: 299792458.0, - name: 'Speed of Light', - unit: 'm/s', - symbol: 'c', - ), - 'EN': NaturalConstant( - value: 2.71828182846, - name: 'Euler\'s Number', - unit: '', - symbol: 'e', - ), - 'PI': NaturalConstant(value: math.pi, name: 'Pi', unit: '', symbol: 'π'), - 'INF': NaturalConstant( - value: double.infinity, - name: 'Infinity', - unit: '', - symbol: '∞', - ), - 'IN': NaturalConstant( - value: Complex(0, 1), - name: 'Imaginary Unit', - unit: '', - symbol: 'i', - ), - 'PC': NaturalConstant( - value: 6.62607015e-34, - name: 'Planck Constant', - unit: 'J⋅s', - symbol: 'h', - ), - 'BC': NaturalConstant( - value: 1.380649e-23, - name: 'Boltzmann Constant', - unit: 'J/K', - symbol: 'k_B', - ), - 'EC': NaturalConstant( - value: 1.602176634e-19, - name: 'Elementary Charge', - unit: 'C', - symbol: 'e', - ), - 'ME': NaturalConstant( - value: 9.1093837015e-31, - name: 'Electron Mass', - unit: 'kg', - symbol: 'm_e', - ), - 'MP': NaturalConstant( - value: 1.67262192369e-27, - name: 'Proton Mass', - unit: 'kg', - symbol: 'm_p', - ), - 'MN': NaturalConstant( - value: 1.67492749804e-27, - name: 'Neutron Mass', - unit: 'kg', - symbol: 'm_n', - ), - 'CC': NaturalConstant( - value: 8.9875517923e9, - name: 'Coulomb Constant', - unit: 'N⋅m²/C²', - symbol: 'k_e', - ), - 'EP': NaturalConstant( - value: 8.8541878128e-12, - name: 'Vacuum Permittivity', - unit: 'F/m', - symbol: 'ε₀', - ), - 'MU': NaturalConstant( - value: 1.25663706212e-6, - name: 'Vacuum Permeability', - unit: 'H/m', - symbol: 'μ₀', - ), - 'SG': NaturalConstant( - value: 9.80665, - name: 'Standard Gravity', - unit: 'm/s²', - symbol: 'g', - ), - 'GE': NaturalConstant( - value: 9.8, - name: 'Gravitational acceleration Earth', - unit: 'm/s²', - symbol: 'GE', - ), - 'AN': NaturalConstant( - value: 6.02214076e23, - name: 'Avogadro Number', - unit: '1/mol', - symbol: 'N_A', - ), - 'RG': NaturalConstant( - value: 8.314462618, - name: 'Gas Constant', - unit: 'J/(mol⋅K)', - symbol: 'R', - ), - 'SBC': NaturalConstant( - value: 5.670374419e-8, - name: 'Stefan-Boltzmann', - unit: 'W/(m²⋅K⁴)', - symbol: 'σ', - ), - 'RYD': NaturalConstant( - value: 10973731.568160, - name: 'Rydberg Constant', - unit: '1/m', - symbol: 'R∞', - ), - 'BM': NaturalConstant( - value: 9.2740100783e-24, - name: 'Bohr Magneton', - unit: 'J/T', - symbol: 'μ_B', - ), - 'BR': NaturalConstant( - value: 5.29177210903e-11, - name: 'Bohr Radius', - unit: 'm', - symbol: 'a₀', - ), - 'FSC': NaturalConstant( - value: 7.2973525693e-3, - name: 'Fine Structure Constant', - unit: '', - symbol: 'α', - ), - 'FC': NaturalConstant( - value: 96485.33212, - name: 'Faraday Constant', - unit: 'C/mol', - symbol: 'F', - ), - 'EM': NaturalConstant( - value: 5.972e24, - name: 'Earth Mass', - unit: 'kg', - symbol: 'M_E', - ), - 'ER': NaturalConstant( - value: 6.371e6, - name: 'Earth Radius', - unit: 'm', - symbol: 'R_E', - ), - 'AU': NaturalConstant( - value: 1.495978707e11, - name: 'Astronomical Unit', - unit: 'm', - symbol: 'AU', - ), - 'LY': NaturalConstant( - value: 9.4607e15, - name: 'Light Year', - unit: 'm', - symbol: 'ly', - ), - 'WIE': NaturalConstant( - value: 2.897771955e-3, - name: 'Wien Displacement Constant', - unit: 'm⋅K', - symbol: 'b', - ), - 'SB': NaturalConstant( - value: 5.670374419e-8, - name: 'Stefan-Boltzmann Constant', - unit: 'W/(m²⋅K⁴)', - symbol: 'σ', - ), - 'MFQ': NaturalConstant( - value: 2.067833848e-15, - name: 'Magnetic Flux Quantum', - unit: 'Wb', - symbol: 'Φ₀', - ), - 'CQ': NaturalConstant( - value: 7.748091729e-5, - name: 'Conductance Quantum', - unit: 'S', - symbol: 'G₀', - ), - 'JC': NaturalConstant( - value: 4.835978484e14, - name: 'Josephson Constant', - unit: 'Hz/V', - symbol: 'K_J', - ), - 'VK': NaturalConstant( - value: 25812.80745, - name: 'Von Klitzing Constant', - unit: 'Ω', - symbol: 'R_K', - ), - 'C1': NaturalConstant( - value: 3.741771852e-16, - name: 'First Radiation Constant', - unit: 'W⋅m²', - symbol: 'c₁', - ), - 'C2': NaturalConstant( - value: 1.438776877e-2, - name: 'Second Radiation Constant', - unit: 'm⋅K', - symbol: 'c₂', - ), - }; + /// Populated from [Constants.all] for consistency. + static final Map naturalConstants = + Constants.all.map((key, c) { + return MapEntry( + key, + NaturalConstant( + value: c.value, + name: c.name, + unit: c.unit, + symbol: c.symbol, + ), + ); + }); /// Returns the constant definition for a given name. static NaturalConstant? getConstant(String name) { @@ -323,14 +117,15 @@ class EquationParser { final values = {}; final vars = ExplicitEquationParser.extractVariables(_cleanLatex(equation)); for (final v in vars) { - final constant = getConstant(v); - if (constant != null && !constant.value.isNaN) { - values[v] = constant.value; - } - // Also check Constants.all for additional constants - final coreConstant = Constants.get(v); - if (coreConstant != null && !coreConstant.value.isNaN) { - values[v] = coreConstant.value; + // Check unified constants + final constant = Constants.get(v); + if (constant != null) { + final val = constant.value; + if (val is num && !val.isNaN) { + values[v] = val; + } else if (val is Complex && !val.isNaN) { + values[v] = val; + } } } return values; @@ -375,12 +170,7 @@ class EquationParser { 'e', 'pi', 'PI', - 'IN', - 'EN', - 'INF', 'INFINITY', - ...naturalConstants.keys, - ...naturalConstants.values.map((c) => c.symbol), ...Constants.all.keys, ...Constants.all.values.map((c) => c.symbol), };