qnty 0.0.9__py3-none-any.whl → 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qnty/__init__.py +2 -3
- qnty/constants/__init__.py +10 -0
- qnty/constants/numerical.py +18 -0
- qnty/constants/solvers.py +6 -0
- qnty/constants/tests.py +6 -0
- qnty/dimensions/__init__.py +23 -0
- qnty/dimensions/base.py +97 -0
- qnty/dimensions/field_dims.py +126 -0
- qnty/dimensions/field_dims.pyi +128 -0
- qnty/dimensions/signature.py +111 -0
- qnty/equations/__init__.py +1 -1
- qnty/equations/equation.py +118 -155
- qnty/equations/system.py +68 -65
- qnty/expressions/__init__.py +25 -46
- qnty/expressions/formatter.py +188 -0
- qnty/expressions/functions.py +46 -68
- qnty/expressions/nodes.py +539 -384
- qnty/expressions/types.py +70 -0
- qnty/problems/__init__.py +145 -0
- qnty/problems/composition.py +1031 -0
- qnty/problems/problem.py +695 -0
- qnty/problems/rules.py +145 -0
- qnty/problems/solving.py +1216 -0
- qnty/problems/validation.py +127 -0
- qnty/quantities/__init__.py +28 -5
- qnty/quantities/base_qnty.py +677 -0
- qnty/quantities/field_converters.py +24004 -0
- qnty/quantities/field_qnty.py +1012 -0
- qnty/{generated/setters.py → quantities/field_setter.py} +3071 -2961
- qnty/{generated/quantities.py → quantities/field_vars.py} +754 -432
- qnty/{generated/quantities.pyi → quantities/field_vars.pyi} +1289 -1290
- qnty/solving/manager.py +50 -44
- qnty/solving/order.py +181 -133
- qnty/solving/solvers/__init__.py +2 -9
- qnty/solving/solvers/base.py +27 -37
- qnty/solving/solvers/iterative.py +115 -135
- qnty/solving/solvers/simultaneous.py +93 -165
- qnty/units/__init__.py +1 -0
- qnty/{generated/units.py → units/field_units.py} +1700 -991
- qnty/units/field_units.pyi +2461 -0
- qnty/units/prefixes.py +58 -105
- qnty/units/registry.py +76 -89
- qnty/utils/__init__.py +16 -0
- qnty/utils/caching/__init__.py +23 -0
- qnty/utils/caching/manager.py +401 -0
- qnty/utils/error_handling/__init__.py +66 -0
- qnty/utils/error_handling/context.py +39 -0
- qnty/utils/error_handling/exceptions.py +96 -0
- qnty/utils/error_handling/handlers.py +171 -0
- qnty/utils/logging.py +4 -4
- qnty/utils/protocols.py +164 -0
- qnty/utils/scope_discovery.py +420 -0
- {qnty-0.0.9.dist-info → qnty-0.1.0.dist-info}/METADATA +1 -1
- qnty-0.1.0.dist-info/RECORD +60 -0
- qnty/_backup/problem_original.py +0 -1251
- qnty/_backup/quantity.py +0 -63
- qnty/codegen/cli.py +0 -125
- qnty/codegen/generators/data/unit_data.json +0 -8807
- qnty/codegen/generators/data_processor.py +0 -345
- qnty/codegen/generators/dimensions_gen.py +0 -434
- qnty/codegen/generators/doc_generator.py +0 -141
- qnty/codegen/generators/out/dimension_mapping.json +0 -974
- qnty/codegen/generators/out/dimension_metadata.json +0 -123
- qnty/codegen/generators/out/units_metadata.json +0 -223
- qnty/codegen/generators/quantities_gen.py +0 -159
- qnty/codegen/generators/setters_gen.py +0 -178
- qnty/codegen/generators/stubs_gen.py +0 -167
- qnty/codegen/generators/units_gen.py +0 -295
- qnty/expressions/cache.py +0 -94
- qnty/generated/dimensions.py +0 -514
- qnty/problem/__init__.py +0 -91
- qnty/problem/base.py +0 -142
- qnty/problem/composition.py +0 -385
- qnty/problem/composition_mixin.py +0 -382
- qnty/problem/equations.py +0 -413
- qnty/problem/metaclass.py +0 -302
- qnty/problem/reconstruction.py +0 -1016
- qnty/problem/solving.py +0 -180
- qnty/problem/validation.py +0 -64
- qnty/problem/variables.py +0 -239
- qnty/quantities/expression_quantity.py +0 -314
- qnty/quantities/quantity.py +0 -428
- qnty/quantities/typed_quantity.py +0 -215
- qnty/validation/__init__.py +0 -0
- qnty/validation/registry.py +0 -0
- qnty/validation/rules.py +0 -167
- qnty-0.0.9.dist-info/RECORD +0 -63
- /qnty/{codegen → extensions}/__init__.py +0 -0
- /qnty/{codegen/generators → extensions/integration}/__init__.py +0 -0
- /qnty/{codegen/generators/utils → extensions/plotting}/__init__.py +0 -0
- /qnty/{generated → extensions/reporting}/__init__.py +0 -0
- {qnty-0.0.9.dist-info → qnty-0.1.0.dist-info}/WHEEL +0 -0
qnty/generated/dimensions.py
DELETED
@@ -1,514 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Dimension System
|
3
|
-
================
|
4
|
-
|
5
|
-
Compile-time dimensional analysis using type system for ultra-fast operations.
|
6
|
-
|
7
|
-
This file is auto-generated by codegen/generators/dimensions_gen.py
|
8
|
-
DO NOT EDIT MANUALLY - changes will be overwritten.
|
9
|
-
"""
|
10
|
-
|
11
|
-
from dataclasses import dataclass
|
12
|
-
from enum import IntEnum
|
13
|
-
from typing import ClassVar, final
|
14
|
-
|
15
|
-
|
16
|
-
class BaseDimension(IntEnum):
|
17
|
-
"""Base dimensions as prime numbers for efficient bit operations."""
|
18
|
-
LENGTH = 2
|
19
|
-
MASS = 3
|
20
|
-
TIME = 5
|
21
|
-
CURRENT = 7
|
22
|
-
TEMPERATURE = 11
|
23
|
-
AMOUNT = 13
|
24
|
-
LUMINOSITY = 17
|
25
|
-
DIMENSIONLESS = 1 # Must be 1 to act as multiplicative identity
|
26
|
-
|
27
|
-
|
28
|
-
@final
|
29
|
-
@dataclass(frozen=True, slots=True)
|
30
|
-
class DimensionSignature:
|
31
|
-
"""Immutable dimension signature for zero-cost dimensional analysis."""
|
32
|
-
|
33
|
-
# Store as bit pattern for ultra-fast comparison
|
34
|
-
_signature: int | float = 1
|
35
|
-
|
36
|
-
# Pre-computed signature cache for common dimensions
|
37
|
-
_COMMON_SIGNATURES: ClassVar[dict[tuple[int, ...], int | float]] = {
|
38
|
-
(0, 0, 0, 0, 0, 0, 0): 1, # Dimensionless
|
39
|
-
(-1, 0, 0, 0, 0, 0, 0): 0.5, # L^-1
|
40
|
-
(0, 0, -1, 0, 0, 0, 0): 0.2, # T^-1
|
41
|
-
(0, 0, 0, 0, 0, 0, 1): 17, # J
|
42
|
-
(0, 0, 0, 0, 0, 1, 0): 13, # N
|
43
|
-
(0, 0, 0, 0, 1, 0, 0): 11, # Θ
|
44
|
-
(0, 0, 0, 1, 0, 0, 0): 7, # A
|
45
|
-
(0, 0, 1, 0, 0, 0, 0): 5, # T
|
46
|
-
(0, 1, 0, 0, 0, 0, 0): 3, # M
|
47
|
-
(1, 0, 0, 0, 0, 0, 0): 2, # L
|
48
|
-
(-2, 0, 0, 0, 0, 0, 0): 0.25, # L^-2 L
|
49
|
-
(-1, 0, 0, 1, 0, 0, 0): 3.5, # A L^-1
|
50
|
-
(-1, 1, 0, 0, 0, 0, 0): 1.5, # L^-1 M
|
51
|
-
(0, -1, 0, 0, 0, 1, 0): 4.333333333, # N M^-1
|
52
|
-
(0, 0, -2, 0, 0, 0, 0): 0.04, # T^-2
|
53
|
-
(0, 0, -1, 0, 0, 1, 0): 2.6, # N T^-1
|
54
|
-
(0, 1, -1, 0, 0, 0, 0): 0.6, # M T^-1
|
55
|
-
(0, 1, 0, 0, 0, -1, 0): 0.2307692308, # N^-1 M
|
56
|
-
(1, -1, 0, 0, 0, 0, 0): 0.6666666667, # L M^-1
|
57
|
-
(1, 0, -1, 0, 0, 0, 0): 0.4, # L T^-1
|
58
|
-
(1, 0, 0, 0, 1, 0, 0): 22, # L Θ
|
59
|
-
(2, 0, 0, 0, 0, 0, 0): 4, # L^2
|
60
|
-
(-3, 0, 0, 0, 0, 0, 0): 0.125, # L^-3
|
61
|
-
(-2, 0, -1, 0, 0, 0, 0): 0.05, # L^-2 T^-1
|
62
|
-
(-2, 1, 0, 0, 0, 0, 0): 0.75, # L^-2 M
|
63
|
-
(-1, 1, -1, 0, 0, 0, 0): 0.3, # L^-1 M T^-1
|
64
|
-
(0, -1, 1, 1, 0, 0, 0): 11.66666667, # A M^-1 T
|
65
|
-
(0, 0, 1, 1, 0, -1, 0): 2.692307692, # N^-1 A T
|
66
|
-
(0, 1, -2, 0, 0, 0, 0): 0.12, # M T^-2
|
67
|
-
(1, -1, 1, 0, 0, 0, 0): 3.333333333, # L M^-1 T
|
68
|
-
(1, 0, -2, 0, 0, 0, 0): 0.08, # L T^-2
|
69
|
-
(1, 0, 1, 1, 0, 0, 0): 70, # A L T
|
70
|
-
(1, 1, -1, 0, 0, 0, 0): 1.2, # L M T^-1
|
71
|
-
(2, -1, 0, 0, 0, 0, 0): 1.333333333, # L^2 M^-1
|
72
|
-
(2, 0, -1, 0, 0, 0, 0): 0.8, # L^2 T^-1
|
73
|
-
(2, 0, 0, 1, 0, 0, 0): 28, # A L^2
|
74
|
-
(2, 1, 0, 0, 0, 0, 0): 12, # L^2 M
|
75
|
-
(3, 0, 0, 0, 0, 0, 0): 8, # L^3
|
76
|
-
(-3, 0, 0, 0, 0, 1, 0): 1.625, # N L^-3
|
77
|
-
(-3, 1, 0, 0, 0, 0, 0): 0.375, # L^-3 M
|
78
|
-
(-2, 0, -1, 0, 0, 1, 0): 0.65, # N L^-2 T^-1
|
79
|
-
(-2, 1, -1, 0, 0, 0, 0): 0.15, # L^-2 M T^-1
|
80
|
-
(-1, 1, -2, 0, 0, 0, 0): 0.06, # L^-1 M T^-2
|
81
|
-
(0, 1, -3, 0, 0, 0, 0): 0.024, # M T^-3
|
82
|
-
(0, 1, -2, -1, 0, 0, 0): 0.01714285714, # A^-1 M T^-2
|
83
|
-
(1, 1, -2, 0, 0, 0, 0): 0.24, # L M T^-2
|
84
|
-
(2, 0, -2, 0, 0, 0, 0): 0.16, # L^2 T^-2
|
85
|
-
(2, 1, -1, 0, 0, 0, 0): 2.4, # L^2 M T^-1
|
86
|
-
(3, -1, 0, 0, 0, 0, 0): 2.666666667, # L^3 M^-1
|
87
|
-
(3, 0, -1, 0, 0, 0, 0): 1.6, # L^3 T^-1
|
88
|
-
}
|
89
|
-
|
90
|
-
# Instance cache for interning common dimensions
|
91
|
-
_INSTANCE_CACHE: ClassVar[dict[int | float, "DimensionSignature"]] = {}
|
92
|
-
|
93
|
-
def __new__(cls, signature: int | float = 1):
|
94
|
-
"""Optimized constructor with instance interning."""
|
95
|
-
if signature in cls._INSTANCE_CACHE:
|
96
|
-
return cls._INSTANCE_CACHE[signature]
|
97
|
-
|
98
|
-
instance = object.__new__(cls)
|
99
|
-
|
100
|
-
# Cache common signatures
|
101
|
-
if len(cls._INSTANCE_CACHE) < 100: # Limit cache size
|
102
|
-
cls._INSTANCE_CACHE[signature] = instance
|
103
|
-
|
104
|
-
return instance
|
105
|
-
|
106
|
-
@classmethod
|
107
|
-
def create(cls, length=0, mass=0, time=0, current=0, temp=0, amount=0, luminosity=0):
|
108
|
-
"""Create dimension from exponents with optimized lookup."""
|
109
|
-
# Check cache first
|
110
|
-
key = (length, mass, time, current, temp, amount, luminosity)
|
111
|
-
if key in cls._COMMON_SIGNATURES:
|
112
|
-
return cls(cls._COMMON_SIGNATURES[key])
|
113
|
-
|
114
|
-
# Fast path for dimensionless
|
115
|
-
if not any([length, mass, time, current, temp, amount, luminosity]):
|
116
|
-
return cls(1)
|
117
|
-
|
118
|
-
# Compute signature
|
119
|
-
signature = 1
|
120
|
-
if length != 0:
|
121
|
-
signature *= BaseDimension.LENGTH ** length
|
122
|
-
if mass != 0:
|
123
|
-
signature *= BaseDimension.MASS ** mass
|
124
|
-
if time != 0:
|
125
|
-
signature *= BaseDimension.TIME ** time
|
126
|
-
if current != 0:
|
127
|
-
signature *= BaseDimension.CURRENT ** current
|
128
|
-
if temp != 0:
|
129
|
-
signature *= BaseDimension.TEMPERATURE ** temp
|
130
|
-
if amount != 0:
|
131
|
-
signature *= BaseDimension.AMOUNT ** amount
|
132
|
-
if luminosity != 0:
|
133
|
-
signature *= BaseDimension.LUMINOSITY ** luminosity
|
134
|
-
|
135
|
-
return cls(signature)
|
136
|
-
|
137
|
-
def __mul__(self, other):
|
138
|
-
"""Multiply dimensions."""
|
139
|
-
return DimensionSignature(self._signature * other._signature)
|
140
|
-
|
141
|
-
def __truediv__(self, other):
|
142
|
-
"""Divide dimensions."""
|
143
|
-
return DimensionSignature(self._signature / other._signature)
|
144
|
-
|
145
|
-
def __pow__(self, power):
|
146
|
-
"""Raise dimension to a power."""
|
147
|
-
if power == 1:
|
148
|
-
return self
|
149
|
-
if power == 0:
|
150
|
-
return DimensionSignature(1)
|
151
|
-
return DimensionSignature(self._signature ** power)
|
152
|
-
|
153
|
-
def is_compatible(self, other):
|
154
|
-
"""Check dimensional compatibility."""
|
155
|
-
return self._signature == other._signature
|
156
|
-
|
157
|
-
def __eq__(self, other):
|
158
|
-
"""Check equality."""
|
159
|
-
if self is other:
|
160
|
-
return True
|
161
|
-
return isinstance(other, DimensionSignature) and self._signature == other._signature
|
162
|
-
|
163
|
-
def __hash__(self):
|
164
|
-
"""Hash based on signature."""
|
165
|
-
return hash(self._signature)
|
166
|
-
|
167
|
-
|
168
|
-
# Pre-computed dimension signatures for all dimensions
|
169
|
-
_DIMENSION_SIGNATURES = {
|
170
|
-
"ABSORBED_DOSE": 0.16, # L^2 T^-2
|
171
|
-
"ACCELERATION": 0.08, # L T^-2
|
172
|
-
"ACTIVATION_ENERGY": 0.01230769231, # N^-1 L^2 T^-2
|
173
|
-
"AMOUNT": 13, # N
|
174
|
-
"AMOUNT_OF_SUBSTANCE": 13, # N
|
175
|
-
"ANGLE_PLANE": 1, # Dimensionless
|
176
|
-
"ANGLE_SOLID": 1, # Dimensionless
|
177
|
-
"ANGULAR_ACCELERATION": 0.04, # T^-2
|
178
|
-
"ANGULAR_MOMENTUM": 2.4, # L^2 M T^-1
|
179
|
-
"AREA": 4, # L^2
|
180
|
-
"AREA_PER_UNIT_VOLUME": 0.5, # L^-1
|
181
|
-
"ATOMIC_WEIGHT": 0.2307692308, # N^-1 M
|
182
|
-
"CONCENTRATION": 0.375, # L^-3 M
|
183
|
-
"CURRENT": 7, # A
|
184
|
-
"DIMENSIONLESS": 1, # Dimensionless
|
185
|
-
"DYNAMIC_FLUIDITY": 3.333333333, # L M^-1 T
|
186
|
-
"ELECTRICAL_CONDUCTANCE": 510.4166667, # A^2 L^-2 M^-1 T^3
|
187
|
-
"ELECTRICAL_PERMITTIVITY": 1276.041667, # A^2 L^-3 M^-1 T^4
|
188
|
-
"ELECTRICAL_RESISTIVITY": 0.003918367347, # A^-2 L^3 M T^-3
|
189
|
-
"ELECTRIC_CAPACITANCE": 2552.083333, # A^2 L^-2 M^-1 T^4
|
190
|
-
"ELECTRIC_CHARGE": 2.692307692, # N^-1 A T
|
191
|
-
"ELECTRIC_CURRENT_INTENSITY": 7, # A
|
192
|
-
"ELECTRIC_DIPOLE_MOMENT": 70, # A L T
|
193
|
-
"ELECTRIC_FIELD_STRENGTH": 0.006857142857, # A^-1 L M T^-3
|
194
|
-
"ELECTRIC_INDUCTANCE": 0.009795918367, # A^-2 L^2 M T^-2
|
195
|
-
"ELECTRIC_POTENTIAL": 0.01371428571, # A^-1 L^2 M T^-3
|
196
|
-
"ELECTRIC_RESISTANCE": 0.001959183673, # A^-2 L^2 M T^-3
|
197
|
-
"ENERGY_FLUX": 0.024, # M T^-3
|
198
|
-
"ENERGY_HEAT_WORK": 0.48, # L^2 M T^-2
|
199
|
-
"ENERGY_PER_UNIT_AREA": 0.12, # M T^-2
|
200
|
-
"FORCE": 0.24, # L M T^-2
|
201
|
-
"FORCE_BODY": 0.03, # L^-2 M T^-2
|
202
|
-
"FORCE_PER_UNIT_MASS": 0.08, # L T^-2
|
203
|
-
"FREQUENCY_VOLTAGE_RATIO": 72.91666667, # A L^-2 M^-1 T^3
|
204
|
-
"FUEL_CONSUMPTION": 0.25, # L^-2
|
205
|
-
"HEAT_OF_COMBUSTION": 0.16, # L^2 T^-2
|
206
|
-
"HEAT_OF_FUSION": 0.16, # L^2 T^-2
|
207
|
-
"HEAT_OF_VAPORIZATION": 0.16, # L^2 T^-2
|
208
|
-
"HEAT_TRANSFER_COEFFICIENT": 0.002181818182, # M Θ^-1 T^-3
|
209
|
-
"ILLUMINANCE": 0.25, # L^-2 L
|
210
|
-
"KINETIC_ENERGY_OF_TURBULENCE": 0.16, # L^2 T^-2
|
211
|
-
"LENGTH": 2, # L
|
212
|
-
"LINEAR_MASS_DENSITY": 1.5, # L^-1 M
|
213
|
-
"LINEAR_MOMENTUM": 1.2, # L M T^-1
|
214
|
-
"LUMINANCE_SELF": 0.25, # L^-2 L
|
215
|
-
"LUMINOSITY": 17, # J
|
216
|
-
"LUMINOUS_FLUX": 1, # L
|
217
|
-
"LUMINOUS_INTENSITY": 1, # L
|
218
|
-
"MAGNETIC_FIELD": 3.5, # A L^-1
|
219
|
-
"MAGNETIC_FLUX": 0.06857142857, # A^-1 L^2 M T^-2
|
220
|
-
"MAGNETIC_INDUCTION_FIELD_STRENGTH": 0.01714285714, # A^-1 M T^-2
|
221
|
-
"MAGNETIC_MOMENT": 28, # A L^2
|
222
|
-
"MAGNETIC_PERMEABILITY": 0.009795918367, # A^-2 L^2 M T^-2
|
223
|
-
"MAGNETOMOTIVE_FORCE": 7, # A
|
224
|
-
"MASS": 3, # M
|
225
|
-
"MASS_DENSITY": 0.375, # L^-3 M
|
226
|
-
"MASS_FLOW_RATE": 0.6, # M T^-1
|
227
|
-
"MASS_FLUX": 0.15, # L^-2 M T^-1
|
228
|
-
"MASS_FRACTION_OF_I": 1, # Dimensionless
|
229
|
-
"MASS_TRANSFER_COEFFICIENT": 0.15, # L^-2 M T^-1
|
230
|
-
"MOLALITY_OF_SOLUTE_I": 4.333333333, # N M^-1
|
231
|
-
"MOLARITY_OF_I": 1.625, # N L^-3
|
232
|
-
"MOLAR_CONCENTRATION_BY_MASS": 13, # N
|
233
|
-
"MOLAR_FLOW_RATE": 2.6, # N T^-1
|
234
|
-
"MOLAR_FLUX": 0.65, # N L^-2 T^-1
|
235
|
-
"MOLAR_HEAT_CAPACITY": 0.001118881119, # N^-1 L^2 Θ^-1 T^-2
|
236
|
-
"MOLE_FRACTION_OF_I": 1, # Dimensionless
|
237
|
-
"MOMENTUM_FLOW_RATE": 0.24, # L M T^-2
|
238
|
-
"MOMENTUM_FLUX": 0.06, # L^-1 M T^-2
|
239
|
-
"MOMENT_OF_INERTIA": 12, # L^2 M
|
240
|
-
"NORMALITY_OF_SOLUTION": 1.625, # N L^-3
|
241
|
-
"PARTICLE_DENSITY": 0.125, # L^-3
|
242
|
-
"PERCENT": 1, # Dimensionless
|
243
|
-
"PERMEABILITY": 4, # L^2
|
244
|
-
"PHOTON_EMISSION_RATE": 0.05, # L^-2 T^-1
|
245
|
-
"POWER_PER_UNIT_MASS": 0.032, # L^2 T^-3
|
246
|
-
"POWER_PER_UNIT_VOLUME": 0.012, # L^-1 M T^-3
|
247
|
-
"POWER_THERMAL_DUTY": 0.096, # L^2 M T^-3
|
248
|
-
"PRESSURE": 0.06, # L^-1 M T^-2
|
249
|
-
"RADIATION_DOSE_EQUIVALENT": 0.16, # L^2 T^-2
|
250
|
-
"RADIATION_EXPOSURE": 11.66666667, # A M^-1 T
|
251
|
-
"RADIOACTIVITY": 0.2, # T^-1
|
252
|
-
"SECOND_MOMENT_OF_AREA": 16, # L^4
|
253
|
-
"SECOND_RADIATION_CONSTANT_PLANCK": 22, # L Θ
|
254
|
-
"SPECIFIC_ENTHALPY": 0.16, # L^2 T^-2
|
255
|
-
"SPECIFIC_GRAVITY": 1, # Dimensionless
|
256
|
-
"SPECIFIC_HEAT_CAPACITY_CONSTANT_PRESSURE": 0.04363636364, # L^2 M Θ^-1 T^-2
|
257
|
-
"SPECIFIC_LENGTH": 0.6666666667, # L M^-1
|
258
|
-
"SPECIFIC_SURFACE": 1.333333333, # L^2 M^-1
|
259
|
-
"SPECIFIC_VOLUME": 2.666666667, # L^3 M^-1
|
260
|
-
"STRESS": 0.06, # L^-1 M T^-2
|
261
|
-
"SURFACE_MASS_DENSITY": 0.75, # L^-2 M
|
262
|
-
"SURFACE_TENSION": 0.12, # M T^-2
|
263
|
-
"TEMPERATURE": 11, # Θ
|
264
|
-
"THERMAL_CONDUCTIVITY": 0.528, # L M Θ T^-3
|
265
|
-
"TIME": 5, # T
|
266
|
-
"TORQUE": 0.48, # L^2 M T^-2
|
267
|
-
"TURBULENCE_ENERGY_DISSIPATION_RATE": 0.032, # L^2 T^-3
|
268
|
-
"VELOCITY_ANGULAR": 0.2, # T^-1
|
269
|
-
"VELOCITY_LINEAR": 0.4, # L T^-1
|
270
|
-
"VISCOSITY_DYNAMIC": 0.3, # L^-1 M T^-1
|
271
|
-
"VISCOSITY_KINEMATIC": 0.8, # L^2 T^-1
|
272
|
-
"VOLUME": 8, # L^3
|
273
|
-
"VOLUMETRIC_CALORIFIC_HEATING_VALUE": 0.06, # L^-1 M T^-2
|
274
|
-
"VOLUMETRIC_COEFFICIENT_OF_EXPANSION": 0.03409090909, # L^-3 M Θ^-1
|
275
|
-
"VOLUMETRIC_FLOW_RATE": 1.6, # L^3 T^-1
|
276
|
-
"VOLUMETRIC_FLUX": 0.4, # L T^-1
|
277
|
-
"VOLUMETRIC_MASS_FLOW_RATE": 0.075, # L^-3 M T^-1
|
278
|
-
"VOLUME_FRACTION_OF_I": 1, # Dimensionless
|
279
|
-
"WAVENUMBER": 0.5, # L^-1
|
280
|
-
}
|
281
|
-
|
282
|
-
# Lazy loading cache
|
283
|
-
_dimension_cache: dict[str, DimensionSignature] = {}
|
284
|
-
|
285
|
-
def __getattr__(name: str) -> DimensionSignature:
|
286
|
-
"""Lazy load dimension constants."""
|
287
|
-
if name in _DIMENSION_SIGNATURES:
|
288
|
-
if name not in _dimension_cache:
|
289
|
-
_dimension_cache[name] = DimensionSignature(_DIMENSION_SIGNATURES[name])
|
290
|
-
return _dimension_cache[name]
|
291
|
-
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
292
|
-
|
293
|
-
# All dimension constants generated from unit data
|
294
|
-
ABSORBED_DOSE = DimensionSignature(0.16) # L^2 T^-2
|
295
|
-
ACCELERATION = DimensionSignature(0.08) # L T^-2
|
296
|
-
ACTIVATION_ENERGY = DimensionSignature(0.01230769231) # N^-1 L^2 T^-2
|
297
|
-
AMOUNT_OF_SUBSTANCE = DimensionSignature(13) # N
|
298
|
-
ANGLE_PLANE = DimensionSignature(1) # Dimensionless
|
299
|
-
ANGLE_SOLID = DimensionSignature(1) # Dimensionless
|
300
|
-
ANGULAR_ACCELERATION = DimensionSignature(0.04) # T^-2
|
301
|
-
ANGULAR_MOMENTUM = DimensionSignature(2.4) # L^2 M T^-1
|
302
|
-
AREA = DimensionSignature(4) # L^2
|
303
|
-
AREA_PER_UNIT_VOLUME = DimensionSignature(0.5) # L^-1
|
304
|
-
ATOMIC_WEIGHT = DimensionSignature(0.2307692308) # N^-1 M
|
305
|
-
CONCENTRATION = DimensionSignature(0.375) # L^-3 M
|
306
|
-
DIMENSIONLESS = DimensionSignature(1) # Dimensionless
|
307
|
-
DYNAMIC_FLUIDITY = DimensionSignature(3.333333333) # L M^-1 T
|
308
|
-
ELECTRIC_CAPACITANCE = DimensionSignature(2552.083333) # A^2 L^-2 M^-1 T^4
|
309
|
-
ELECTRIC_CHARGE = DimensionSignature(2.692307692) # N^-1 A T
|
310
|
-
ELECTRIC_CURRENT_INTENSITY = DimensionSignature(7) # A
|
311
|
-
ELECTRIC_DIPOLE_MOMENT = DimensionSignature(70) # A L T
|
312
|
-
ELECTRIC_FIELD_STRENGTH = DimensionSignature(0.006857142857) # A^-1 L M T^-3
|
313
|
-
ELECTRIC_INDUCTANCE = DimensionSignature(0.009795918367) # A^-2 L^2 M T^-2
|
314
|
-
ELECTRIC_POTENTIAL = DimensionSignature(0.01371428571) # A^-1 L^2 M T^-3
|
315
|
-
ELECTRIC_RESISTANCE = DimensionSignature(0.001959183673) # A^-2 L^2 M T^-3
|
316
|
-
ELECTRICAL_CONDUCTANCE = DimensionSignature(510.4166667) # A^2 L^-2 M^-1 T^3
|
317
|
-
ELECTRICAL_PERMITTIVITY = DimensionSignature(1276.041667) # A^2 L^-3 M^-1 T^4
|
318
|
-
ELECTRICAL_RESISTIVITY = DimensionSignature(0.003918367347) # A^-2 L^3 M T^-3
|
319
|
-
ENERGY_FLUX = DimensionSignature(0.024) # M T^-3
|
320
|
-
ENERGY_HEAT_WORK = DimensionSignature(0.48) # L^2 M T^-2
|
321
|
-
ENERGY_PER_UNIT_AREA = DimensionSignature(0.12) # M T^-2
|
322
|
-
FORCE = DimensionSignature(0.24) # L M T^-2
|
323
|
-
FORCE_BODY = DimensionSignature(0.03) # L^-2 M T^-2
|
324
|
-
FORCE_PER_UNIT_MASS = DimensionSignature(0.08) # L T^-2
|
325
|
-
FREQUENCY_VOLTAGE_RATIO = DimensionSignature(72.91666667) # A L^-2 M^-1 T^3
|
326
|
-
FUEL_CONSUMPTION = DimensionSignature(0.25) # L^-2
|
327
|
-
HEAT_OF_COMBUSTION = DimensionSignature(0.16) # L^2 T^-2
|
328
|
-
HEAT_OF_FUSION = DimensionSignature(0.16) # L^2 T^-2
|
329
|
-
HEAT_OF_VAPORIZATION = DimensionSignature(0.16) # L^2 T^-2
|
330
|
-
HEAT_TRANSFER_COEFFICIENT = DimensionSignature(0.002181818182) # M Θ^-1 T^-3
|
331
|
-
ILLUMINANCE = DimensionSignature(0.25) # L^-2 L
|
332
|
-
KINETIC_ENERGY_OF_TURBULENCE = DimensionSignature(0.16) # L^2 T^-2
|
333
|
-
LENGTH = DimensionSignature(2) # L
|
334
|
-
LINEAR_MASS_DENSITY = DimensionSignature(1.5) # L^-1 M
|
335
|
-
LINEAR_MOMENTUM = DimensionSignature(1.2) # L M T^-1
|
336
|
-
LUMINANCE_SELF = DimensionSignature(0.25) # L^-2 L
|
337
|
-
LUMINOUS_FLUX = DimensionSignature(1) # L
|
338
|
-
LUMINOUS_INTENSITY = DimensionSignature(1) # L
|
339
|
-
MAGNETIC_FIELD = DimensionSignature(3.5) # A L^-1
|
340
|
-
MAGNETIC_FLUX = DimensionSignature(0.06857142857) # A^-1 L^2 M T^-2
|
341
|
-
MAGNETIC_INDUCTION_FIELD_STRENGTH = DimensionSignature(0.01714285714) # A^-1 M T^-2
|
342
|
-
MAGNETIC_MOMENT = DimensionSignature(28) # A L^2
|
343
|
-
MAGNETIC_PERMEABILITY = DimensionSignature(0.009795918367) # A^-2 L^2 M T^-2
|
344
|
-
MAGNETOMOTIVE_FORCE = DimensionSignature(7) # A
|
345
|
-
MASS = DimensionSignature(3) # M
|
346
|
-
MASS_DENSITY = DimensionSignature(0.375) # L^-3 M
|
347
|
-
MASS_FLOW_RATE = DimensionSignature(0.6) # M T^-1
|
348
|
-
MASS_FLUX = DimensionSignature(0.15) # L^-2 M T^-1
|
349
|
-
MASS_FRACTION_OF_I = DimensionSignature(1) # Dimensionless
|
350
|
-
MASS_TRANSFER_COEFFICIENT = DimensionSignature(0.15) # L^-2 M T^-1
|
351
|
-
MOLALITY_OF_SOLUTE_I = DimensionSignature(4.333333333) # N M^-1
|
352
|
-
MOLAR_CONCENTRATION_BY_MASS = DimensionSignature(13) # N
|
353
|
-
MOLAR_FLOW_RATE = DimensionSignature(2.6) # N T^-1
|
354
|
-
MOLAR_FLUX = DimensionSignature(0.65) # N L^-2 T^-1
|
355
|
-
MOLAR_HEAT_CAPACITY = DimensionSignature(0.001118881119) # N^-1 L^2 Θ^-1 T^-2
|
356
|
-
MOLARITY_OF_I = DimensionSignature(1.625) # N L^-3
|
357
|
-
MOLE_FRACTION_OF_I = DimensionSignature(1) # Dimensionless
|
358
|
-
MOMENT_OF_INERTIA = DimensionSignature(12) # L^2 M
|
359
|
-
MOMENTUM_FLOW_RATE = DimensionSignature(0.24) # L M T^-2
|
360
|
-
MOMENTUM_FLUX = DimensionSignature(0.06) # L^-1 M T^-2
|
361
|
-
NORMALITY_OF_SOLUTION = DimensionSignature(1.625) # N L^-3
|
362
|
-
PARTICLE_DENSITY = DimensionSignature(0.125) # L^-3
|
363
|
-
PERCENT = DimensionSignature(1) # Dimensionless
|
364
|
-
PERMEABILITY = DimensionSignature(4) # L^2
|
365
|
-
PHOTON_EMISSION_RATE = DimensionSignature(0.05) # L^-2 T^-1
|
366
|
-
POWER_PER_UNIT_MASS = DimensionSignature(0.032) # L^2 T^-3
|
367
|
-
POWER_PER_UNIT_VOLUME = DimensionSignature(0.012) # L^-1 M T^-3
|
368
|
-
POWER_THERMAL_DUTY = DimensionSignature(0.096) # L^2 M T^-3
|
369
|
-
PRESSURE = DimensionSignature(0.06) # L^-1 M T^-2
|
370
|
-
RADIATION_DOSE_EQUIVALENT = DimensionSignature(0.16) # L^2 T^-2
|
371
|
-
RADIATION_EXPOSURE = DimensionSignature(11.66666667) # A M^-1 T
|
372
|
-
RADIOACTIVITY = DimensionSignature(0.2) # T^-1
|
373
|
-
SECOND_MOMENT_OF_AREA = DimensionSignature(16) # L^4
|
374
|
-
SECOND_RADIATION_CONSTANT_PLANCK = DimensionSignature(22) # L Θ
|
375
|
-
SPECIFIC_ENTHALPY = DimensionSignature(0.16) # L^2 T^-2
|
376
|
-
SPECIFIC_GRAVITY = DimensionSignature(1) # Dimensionless
|
377
|
-
SPECIFIC_HEAT_CAPACITY_CONSTANT_PRESSURE = DimensionSignature(0.04363636364) # L^2 M Θ^-1 T^-2
|
378
|
-
SPECIFIC_LENGTH = DimensionSignature(0.6666666667) # L M^-1
|
379
|
-
SPECIFIC_SURFACE = DimensionSignature(1.333333333) # L^2 M^-1
|
380
|
-
SPECIFIC_VOLUME = DimensionSignature(2.666666667) # L^3 M^-1
|
381
|
-
STRESS = DimensionSignature(0.06) # L^-1 M T^-2
|
382
|
-
SURFACE_MASS_DENSITY = DimensionSignature(0.75) # L^-2 M
|
383
|
-
SURFACE_TENSION = DimensionSignature(0.12) # M T^-2
|
384
|
-
TEMPERATURE = DimensionSignature(11) # Θ
|
385
|
-
THERMAL_CONDUCTIVITY = DimensionSignature(0.528) # L M Θ T^-3
|
386
|
-
TIME = DimensionSignature(5) # T
|
387
|
-
TORQUE = DimensionSignature(0.48) # L^2 M T^-2
|
388
|
-
TURBULENCE_ENERGY_DISSIPATION_RATE = DimensionSignature(0.032) # L^2 T^-3
|
389
|
-
VELOCITY_ANGULAR = DimensionSignature(0.2) # T^-1
|
390
|
-
VELOCITY_LINEAR = DimensionSignature(0.4) # L T^-1
|
391
|
-
VISCOSITY_DYNAMIC = DimensionSignature(0.3) # L^-1 M T^-1
|
392
|
-
VISCOSITY_KINEMATIC = DimensionSignature(0.8) # L^2 T^-1
|
393
|
-
VOLUME = DimensionSignature(8) # L^3
|
394
|
-
VOLUME_FRACTION_OF_I = DimensionSignature(1) # Dimensionless
|
395
|
-
VOLUMETRIC_CALORIFIC_HEATING_VALUE = DimensionSignature(0.06) # L^-1 M T^-2
|
396
|
-
VOLUMETRIC_COEFFICIENT_OF_EXPANSION = DimensionSignature(0.03409090909) # L^-3 M Θ^-1
|
397
|
-
VOLUMETRIC_FLOW_RATE = DimensionSignature(1.6) # L^3 T^-1
|
398
|
-
VOLUMETRIC_FLUX = DimensionSignature(0.4) # L T^-1
|
399
|
-
VOLUMETRIC_MASS_FLOW_RATE = DimensionSignature(0.075) # L^-3 M T^-1
|
400
|
-
WAVENUMBER = DimensionSignature(0.5) # L^-1
|
401
|
-
|
402
|
-
# Module exports
|
403
|
-
__all__ = [
|
404
|
-
"BaseDimension",
|
405
|
-
"DimensionSignature",
|
406
|
-
"ABSORBED_DOSE",
|
407
|
-
"ACCELERATION",
|
408
|
-
"ACTIVATION_ENERGY",
|
409
|
-
"AMOUNT_OF_SUBSTANCE",
|
410
|
-
"ANGLE_PLANE",
|
411
|
-
"ANGLE_SOLID",
|
412
|
-
"ANGULAR_ACCELERATION",
|
413
|
-
"ANGULAR_MOMENTUM",
|
414
|
-
"AREA",
|
415
|
-
"AREA_PER_UNIT_VOLUME",
|
416
|
-
"ATOMIC_WEIGHT",
|
417
|
-
"CONCENTRATION",
|
418
|
-
"DIMENSIONLESS",
|
419
|
-
"DYNAMIC_FLUIDITY",
|
420
|
-
"ELECTRIC_CAPACITANCE",
|
421
|
-
"ELECTRIC_CHARGE",
|
422
|
-
"ELECTRIC_CURRENT_INTENSITY",
|
423
|
-
"ELECTRIC_DIPOLE_MOMENT",
|
424
|
-
"ELECTRIC_FIELD_STRENGTH",
|
425
|
-
"ELECTRIC_INDUCTANCE",
|
426
|
-
"ELECTRIC_POTENTIAL",
|
427
|
-
"ELECTRIC_RESISTANCE",
|
428
|
-
"ELECTRICAL_CONDUCTANCE",
|
429
|
-
"ELECTRICAL_PERMITTIVITY",
|
430
|
-
"ELECTRICAL_RESISTIVITY",
|
431
|
-
"ENERGY_FLUX",
|
432
|
-
"ENERGY_HEAT_WORK",
|
433
|
-
"ENERGY_PER_UNIT_AREA",
|
434
|
-
"FORCE",
|
435
|
-
"FORCE_BODY",
|
436
|
-
"FORCE_PER_UNIT_MASS",
|
437
|
-
"FREQUENCY_VOLTAGE_RATIO",
|
438
|
-
"FUEL_CONSUMPTION",
|
439
|
-
"HEAT_OF_COMBUSTION",
|
440
|
-
"HEAT_OF_FUSION",
|
441
|
-
"HEAT_OF_VAPORIZATION",
|
442
|
-
"HEAT_TRANSFER_COEFFICIENT",
|
443
|
-
"ILLUMINANCE",
|
444
|
-
"KINETIC_ENERGY_OF_TURBULENCE",
|
445
|
-
"LENGTH",
|
446
|
-
"LINEAR_MASS_DENSITY",
|
447
|
-
"LINEAR_MOMENTUM",
|
448
|
-
"LUMINANCE_SELF",
|
449
|
-
"LUMINOUS_FLUX",
|
450
|
-
"LUMINOUS_INTENSITY",
|
451
|
-
"MAGNETIC_FIELD",
|
452
|
-
"MAGNETIC_FLUX",
|
453
|
-
"MAGNETIC_INDUCTION_FIELD_STRENGTH",
|
454
|
-
"MAGNETIC_MOMENT",
|
455
|
-
"MAGNETIC_PERMEABILITY",
|
456
|
-
"MAGNETOMOTIVE_FORCE",
|
457
|
-
"MASS",
|
458
|
-
"MASS_DENSITY",
|
459
|
-
"MASS_FLOW_RATE",
|
460
|
-
"MASS_FLUX",
|
461
|
-
"MASS_FRACTION_OF_I",
|
462
|
-
"MASS_TRANSFER_COEFFICIENT",
|
463
|
-
"MOLALITY_OF_SOLUTE_I",
|
464
|
-
"MOLAR_CONCENTRATION_BY_MASS",
|
465
|
-
"MOLAR_FLOW_RATE",
|
466
|
-
"MOLAR_FLUX",
|
467
|
-
"MOLAR_HEAT_CAPACITY",
|
468
|
-
"MOLARITY_OF_I",
|
469
|
-
"MOLE_FRACTION_OF_I",
|
470
|
-
"MOMENT_OF_INERTIA",
|
471
|
-
"MOMENTUM_FLOW_RATE",
|
472
|
-
"MOMENTUM_FLUX",
|
473
|
-
"NORMALITY_OF_SOLUTION",
|
474
|
-
"PARTICLE_DENSITY",
|
475
|
-
"PERCENT",
|
476
|
-
"PERMEABILITY",
|
477
|
-
"PHOTON_EMISSION_RATE",
|
478
|
-
"POWER_PER_UNIT_MASS",
|
479
|
-
"POWER_PER_UNIT_VOLUME",
|
480
|
-
"POWER_THERMAL_DUTY",
|
481
|
-
"PRESSURE",
|
482
|
-
"RADIATION_DOSE_EQUIVALENT",
|
483
|
-
"RADIATION_EXPOSURE",
|
484
|
-
"RADIOACTIVITY",
|
485
|
-
"SECOND_MOMENT_OF_AREA",
|
486
|
-
"SECOND_RADIATION_CONSTANT_PLANCK",
|
487
|
-
"SPECIFIC_ENTHALPY",
|
488
|
-
"SPECIFIC_GRAVITY",
|
489
|
-
"SPECIFIC_HEAT_CAPACITY_CONSTANT_PRESSURE",
|
490
|
-
"SPECIFIC_LENGTH",
|
491
|
-
"SPECIFIC_SURFACE",
|
492
|
-
"SPECIFIC_VOLUME",
|
493
|
-
"STRESS",
|
494
|
-
"SURFACE_MASS_DENSITY",
|
495
|
-
"SURFACE_TENSION",
|
496
|
-
"TEMPERATURE",
|
497
|
-
"THERMAL_CONDUCTIVITY",
|
498
|
-
"TIME",
|
499
|
-
"TORQUE",
|
500
|
-
"TURBULENCE_ENERGY_DISSIPATION_RATE",
|
501
|
-
"VELOCITY_ANGULAR",
|
502
|
-
"VELOCITY_LINEAR",
|
503
|
-
"VISCOSITY_DYNAMIC",
|
504
|
-
"VISCOSITY_KINEMATIC",
|
505
|
-
"VOLUME",
|
506
|
-
"VOLUME_FRACTION_OF_I",
|
507
|
-
"VOLUMETRIC_CALORIFIC_HEATING_VALUE",
|
508
|
-
"VOLUMETRIC_COEFFICIENT_OF_EXPANSION",
|
509
|
-
"VOLUMETRIC_FLOW_RATE",
|
510
|
-
"VOLUMETRIC_FLUX",
|
511
|
-
"VOLUMETRIC_MASS_FLOW_RATE",
|
512
|
-
"WAVENUMBER",
|
513
|
-
]
|
514
|
-
|
qnty/problem/__init__.py
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Reassembled Problem class from focused modules.
|
3
|
-
|
4
|
-
This module combines all the decomposed functionality back into a single
|
5
|
-
Problem class that maintains the same public API.
|
6
|
-
"""
|
7
|
-
|
8
|
-
from .base import ProblemBase
|
9
|
-
from .variables import VariablesMixin
|
10
|
-
from .equations import EquationsMixin
|
11
|
-
from .solving import SolvingMixin
|
12
|
-
from .validation import ValidationMixin
|
13
|
-
from .composition_mixin import CompositionMixin
|
14
|
-
from .metaclass import ProblemMeta
|
15
|
-
|
16
|
-
# Re-export exceptions for compatibility
|
17
|
-
from .variables import VariableNotFoundError
|
18
|
-
from .equations import EquationValidationError
|
19
|
-
from .solving import SolverError
|
20
|
-
|
21
|
-
|
22
|
-
class Problem(
|
23
|
-
ProblemBase,
|
24
|
-
VariablesMixin,
|
25
|
-
EquationsMixin,
|
26
|
-
SolvingMixin,
|
27
|
-
ValidationMixin,
|
28
|
-
CompositionMixin,
|
29
|
-
metaclass=ProblemMeta
|
30
|
-
):
|
31
|
-
"""
|
32
|
-
Main container class for engineering problems.
|
33
|
-
|
34
|
-
This class coordinates all aspects of engineering problem definition, solving, and analysis.
|
35
|
-
It supports both programmatic problem construction and class-level inheritance patterns
|
36
|
-
for defining domain-specific engineering problems.
|
37
|
-
|
38
|
-
Key Features:
|
39
|
-
- Automatic dependency graph construction and topological solving order
|
40
|
-
- Dual solving approach: SymPy symbolic solving with numerical fallback
|
41
|
-
- Sub-problem composition with automatic variable namespacing
|
42
|
-
- Comprehensive validation and error handling
|
43
|
-
- Professional report generation capabilities
|
44
|
-
|
45
|
-
Usage Patterns:
|
46
|
-
1. Inheritance Pattern (Recommended for domain problems):
|
47
|
-
class MyProblem(Problem):
|
48
|
-
x = Variable("x", Qty(5.0, length))
|
49
|
-
y = Variable("y", Qty(0.0, length), is_known=False)
|
50
|
-
eq = y.equals(x * 2)
|
51
|
-
|
52
|
-
2. Programmatic Pattern (For dynamic problems):
|
53
|
-
problem = Problem("Dynamic Problem")
|
54
|
-
problem.add_variables(x, y)
|
55
|
-
problem.add_equation(y.equals(x * 2))
|
56
|
-
|
57
|
-
3. Composition Pattern (For reusable sub-problems):
|
58
|
-
class ComposedProblem(Problem):
|
59
|
-
sub1 = create_sub_problem()
|
60
|
-
sub2 = create_sub_problem()
|
61
|
-
# Equations can reference sub1.variable, sub2.variable
|
62
|
-
|
63
|
-
Attributes:
|
64
|
-
name (str): Human-readable name for the problem
|
65
|
-
description (str): Detailed description of the problem
|
66
|
-
variables (dict[str, Variable]): All variables in the problem
|
67
|
-
equations (list[Equation]): All equations in the problem
|
68
|
-
is_solved (bool): Whether the problem has been successfully solved
|
69
|
-
solution (dict[str, Variable]): Solved variable values
|
70
|
-
sub_problems (dict[str, Problem]): Integrated sub-problems
|
71
|
-
"""
|
72
|
-
|
73
|
-
def __init__(self, name: str | None = None, description: str = ""):
|
74
|
-
# Initialize the base class
|
75
|
-
super().__init__(name, description)
|
76
|
-
|
77
|
-
# Auto-populate from class-level variables and equations (subclass pattern)
|
78
|
-
self._extract_from_class_variables()
|
79
|
-
|
80
|
-
|
81
|
-
# Alias for backward compatibility
|
82
|
-
EngineeringProblem = Problem
|
83
|
-
|
84
|
-
# Export all relevant classes and exceptions
|
85
|
-
__all__ = [
|
86
|
-
'Problem',
|
87
|
-
'EngineeringProblem',
|
88
|
-
'VariableNotFoundError',
|
89
|
-
'EquationValidationError',
|
90
|
-
'SolverError'
|
91
|
-
]
|