tnfr 3.0.3__py3-none-any.whl → 8.5.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.
Potentially problematic release.
This version of tnfr might be problematic. Click here for more details.
- tnfr/__init__.py +375 -56
- tnfr/__init__.pyi +33 -0
- tnfr/_compat.py +10 -0
- tnfr/_generated_version.py +34 -0
- tnfr/_version.py +49 -0
- tnfr/_version.pyi +7 -0
- tnfr/alias.py +723 -0
- tnfr/alias.pyi +108 -0
- tnfr/backends/__init__.py +354 -0
- tnfr/backends/jax_backend.py +173 -0
- tnfr/backends/numpy_backend.py +238 -0
- tnfr/backends/optimized_numpy.py +420 -0
- tnfr/backends/torch_backend.py +408 -0
- tnfr/cache.py +171 -0
- tnfr/cache.pyi +13 -0
- tnfr/cli/__init__.py +110 -0
- tnfr/cli/__init__.pyi +26 -0
- tnfr/cli/arguments.py +489 -0
- tnfr/cli/arguments.pyi +29 -0
- tnfr/cli/execution.py +914 -0
- tnfr/cli/execution.pyi +70 -0
- tnfr/cli/interactive_validator.py +614 -0
- tnfr/cli/utils.py +51 -0
- tnfr/cli/utils.pyi +7 -0
- tnfr/cli/validate.py +236 -0
- tnfr/compat/__init__.py +85 -0
- tnfr/compat/dataclass.py +136 -0
- tnfr/compat/jsonschema_stub.py +61 -0
- tnfr/compat/matplotlib_stub.py +73 -0
- tnfr/compat/numpy_stub.py +155 -0
- tnfr/config/__init__.py +224 -0
- tnfr/config/__init__.pyi +10 -0
- tnfr/config/constants.py +104 -0
- tnfr/config/constants.pyi +12 -0
- tnfr/config/defaults.py +54 -0
- tnfr/config/defaults_core.py +212 -0
- tnfr/config/defaults_init.py +33 -0
- tnfr/config/defaults_metric.py +104 -0
- tnfr/config/feature_flags.py +81 -0
- tnfr/config/feature_flags.pyi +16 -0
- tnfr/config/glyph_constants.py +31 -0
- tnfr/config/init.py +77 -0
- tnfr/config/init.pyi +8 -0
- tnfr/config/operator_names.py +254 -0
- tnfr/config/operator_names.pyi +36 -0
- tnfr/config/physics_derivation.py +354 -0
- tnfr/config/presets.py +83 -0
- tnfr/config/presets.pyi +7 -0
- tnfr/config/security.py +927 -0
- tnfr/config/thresholds.py +114 -0
- tnfr/config/tnfr_config.py +498 -0
- tnfr/constants/__init__.py +92 -0
- tnfr/constants/__init__.pyi +92 -0
- tnfr/constants/aliases.py +33 -0
- tnfr/constants/aliases.pyi +27 -0
- tnfr/constants/init.py +33 -0
- tnfr/constants/init.pyi +12 -0
- tnfr/constants/metric.py +104 -0
- tnfr/constants/metric.pyi +19 -0
- tnfr/core/__init__.py +33 -0
- tnfr/core/container.py +226 -0
- tnfr/core/default_implementations.py +329 -0
- tnfr/core/interfaces.py +279 -0
- tnfr/dynamics/__init__.py +238 -0
- tnfr/dynamics/__init__.pyi +83 -0
- tnfr/dynamics/adaptation.py +267 -0
- tnfr/dynamics/adaptation.pyi +7 -0
- tnfr/dynamics/adaptive_sequences.py +189 -0
- tnfr/dynamics/adaptive_sequences.pyi +14 -0
- tnfr/dynamics/aliases.py +23 -0
- tnfr/dynamics/aliases.pyi +19 -0
- tnfr/dynamics/bifurcation.py +232 -0
- tnfr/dynamics/canonical.py +229 -0
- tnfr/dynamics/canonical.pyi +48 -0
- tnfr/dynamics/coordination.py +385 -0
- tnfr/dynamics/coordination.pyi +25 -0
- tnfr/dynamics/dnfr.py +3034 -0
- tnfr/dynamics/dnfr.pyi +26 -0
- tnfr/dynamics/dynamic_limits.py +225 -0
- tnfr/dynamics/feedback.py +252 -0
- tnfr/dynamics/feedback.pyi +24 -0
- tnfr/dynamics/fused_dnfr.py +454 -0
- tnfr/dynamics/homeostasis.py +157 -0
- tnfr/dynamics/homeostasis.pyi +14 -0
- tnfr/dynamics/integrators.py +661 -0
- tnfr/dynamics/integrators.pyi +36 -0
- tnfr/dynamics/learning.py +310 -0
- tnfr/dynamics/learning.pyi +33 -0
- tnfr/dynamics/metabolism.py +254 -0
- tnfr/dynamics/nbody.py +796 -0
- tnfr/dynamics/nbody_tnfr.py +783 -0
- tnfr/dynamics/propagation.py +326 -0
- tnfr/dynamics/runtime.py +908 -0
- tnfr/dynamics/runtime.pyi +77 -0
- tnfr/dynamics/sampling.py +36 -0
- tnfr/dynamics/sampling.pyi +7 -0
- tnfr/dynamics/selectors.py +711 -0
- tnfr/dynamics/selectors.pyi +85 -0
- tnfr/dynamics/structural_clip.py +207 -0
- tnfr/errors/__init__.py +37 -0
- tnfr/errors/contextual.py +492 -0
- tnfr/execution.py +223 -0
- tnfr/execution.pyi +45 -0
- tnfr/extensions/__init__.py +205 -0
- tnfr/extensions/__init__.pyi +18 -0
- tnfr/extensions/base.py +173 -0
- tnfr/extensions/base.pyi +35 -0
- tnfr/extensions/business/__init__.py +71 -0
- tnfr/extensions/business/__init__.pyi +11 -0
- tnfr/extensions/business/cookbook.py +88 -0
- tnfr/extensions/business/cookbook.pyi +8 -0
- tnfr/extensions/business/health_analyzers.py +202 -0
- tnfr/extensions/business/health_analyzers.pyi +9 -0
- tnfr/extensions/business/patterns.py +183 -0
- tnfr/extensions/business/patterns.pyi +8 -0
- tnfr/extensions/medical/__init__.py +73 -0
- tnfr/extensions/medical/__init__.pyi +11 -0
- tnfr/extensions/medical/cookbook.py +88 -0
- tnfr/extensions/medical/cookbook.pyi +8 -0
- tnfr/extensions/medical/health_analyzers.py +181 -0
- tnfr/extensions/medical/health_analyzers.pyi +9 -0
- tnfr/extensions/medical/patterns.py +163 -0
- tnfr/extensions/medical/patterns.pyi +8 -0
- tnfr/flatten.py +262 -0
- tnfr/flatten.pyi +21 -0
- tnfr/gamma.py +354 -0
- tnfr/gamma.pyi +36 -0
- tnfr/glyph_history.py +377 -0
- tnfr/glyph_history.pyi +35 -0
- tnfr/glyph_runtime.py +19 -0
- tnfr/glyph_runtime.pyi +8 -0
- tnfr/immutable.py +218 -0
- tnfr/immutable.pyi +36 -0
- tnfr/initialization.py +203 -0
- tnfr/initialization.pyi +65 -0
- tnfr/io.py +10 -0
- tnfr/io.pyi +13 -0
- tnfr/locking.py +37 -0
- tnfr/locking.pyi +7 -0
- tnfr/mathematics/__init__.py +79 -0
- tnfr/mathematics/backend.py +453 -0
- tnfr/mathematics/backend.pyi +99 -0
- tnfr/mathematics/dynamics.py +408 -0
- tnfr/mathematics/dynamics.pyi +90 -0
- tnfr/mathematics/epi.py +391 -0
- tnfr/mathematics/epi.pyi +65 -0
- tnfr/mathematics/generators.py +242 -0
- tnfr/mathematics/generators.pyi +29 -0
- tnfr/mathematics/metrics.py +119 -0
- tnfr/mathematics/metrics.pyi +16 -0
- tnfr/mathematics/operators.py +239 -0
- tnfr/mathematics/operators.pyi +59 -0
- tnfr/mathematics/operators_factory.py +124 -0
- tnfr/mathematics/operators_factory.pyi +11 -0
- tnfr/mathematics/projection.py +87 -0
- tnfr/mathematics/projection.pyi +33 -0
- tnfr/mathematics/runtime.py +182 -0
- tnfr/mathematics/runtime.pyi +64 -0
- tnfr/mathematics/spaces.py +256 -0
- tnfr/mathematics/spaces.pyi +83 -0
- tnfr/mathematics/transforms.py +305 -0
- tnfr/mathematics/transforms.pyi +62 -0
- tnfr/metrics/__init__.py +79 -0
- tnfr/metrics/__init__.pyi +20 -0
- tnfr/metrics/buffer_cache.py +163 -0
- tnfr/metrics/buffer_cache.pyi +24 -0
- tnfr/metrics/cache_utils.py +214 -0
- tnfr/metrics/coherence.py +2009 -0
- tnfr/metrics/coherence.pyi +129 -0
- tnfr/metrics/common.py +158 -0
- tnfr/metrics/common.pyi +35 -0
- tnfr/metrics/core.py +316 -0
- tnfr/metrics/core.pyi +13 -0
- tnfr/metrics/diagnosis.py +833 -0
- tnfr/metrics/diagnosis.pyi +86 -0
- tnfr/metrics/emergence.py +245 -0
- tnfr/metrics/export.py +179 -0
- tnfr/metrics/export.pyi +7 -0
- tnfr/metrics/glyph_timing.py +379 -0
- tnfr/metrics/glyph_timing.pyi +81 -0
- tnfr/metrics/learning_metrics.py +280 -0
- tnfr/metrics/learning_metrics.pyi +21 -0
- tnfr/metrics/phase_coherence.py +351 -0
- tnfr/metrics/phase_compatibility.py +349 -0
- tnfr/metrics/reporting.py +183 -0
- tnfr/metrics/reporting.pyi +25 -0
- tnfr/metrics/sense_index.py +1203 -0
- tnfr/metrics/sense_index.pyi +9 -0
- tnfr/metrics/trig.py +373 -0
- tnfr/metrics/trig.pyi +13 -0
- tnfr/metrics/trig_cache.py +233 -0
- tnfr/metrics/trig_cache.pyi +10 -0
- tnfr/multiscale/__init__.py +32 -0
- tnfr/multiscale/hierarchical.py +517 -0
- tnfr/node.py +763 -0
- tnfr/node.pyi +139 -0
- tnfr/observers.py +255 -130
- tnfr/observers.pyi +31 -0
- tnfr/ontosim.py +144 -137
- tnfr/ontosim.pyi +28 -0
- tnfr/operators/__init__.py +1672 -0
- tnfr/operators/__init__.pyi +31 -0
- tnfr/operators/algebra.py +277 -0
- tnfr/operators/canonical_patterns.py +420 -0
- tnfr/operators/cascade.py +267 -0
- tnfr/operators/cycle_detection.py +358 -0
- tnfr/operators/definitions.py +4108 -0
- tnfr/operators/definitions.pyi +78 -0
- tnfr/operators/grammar.py +1164 -0
- tnfr/operators/grammar.pyi +140 -0
- tnfr/operators/hamiltonian.py +710 -0
- tnfr/operators/health_analyzer.py +809 -0
- tnfr/operators/jitter.py +272 -0
- tnfr/operators/jitter.pyi +11 -0
- tnfr/operators/lifecycle.py +314 -0
- tnfr/operators/metabolism.py +618 -0
- tnfr/operators/metrics.py +2138 -0
- tnfr/operators/network_analysis/__init__.py +27 -0
- tnfr/operators/network_analysis/source_detection.py +186 -0
- tnfr/operators/nodal_equation.py +395 -0
- tnfr/operators/pattern_detection.py +660 -0
- tnfr/operators/patterns.py +669 -0
- tnfr/operators/postconditions/__init__.py +38 -0
- tnfr/operators/postconditions/mutation.py +236 -0
- tnfr/operators/preconditions/__init__.py +1226 -0
- tnfr/operators/preconditions/coherence.py +305 -0
- tnfr/operators/preconditions/dissonance.py +236 -0
- tnfr/operators/preconditions/emission.py +128 -0
- tnfr/operators/preconditions/mutation.py +580 -0
- tnfr/operators/preconditions/reception.py +125 -0
- tnfr/operators/preconditions/resonance.py +364 -0
- tnfr/operators/registry.py +74 -0
- tnfr/operators/registry.pyi +9 -0
- tnfr/operators/remesh.py +1809 -0
- tnfr/operators/remesh.pyi +26 -0
- tnfr/operators/structural_units.py +268 -0
- tnfr/operators/unified_grammar.py +105 -0
- tnfr/parallel/__init__.py +54 -0
- tnfr/parallel/auto_scaler.py +234 -0
- tnfr/parallel/distributed.py +384 -0
- tnfr/parallel/engine.py +238 -0
- tnfr/parallel/gpu_engine.py +420 -0
- tnfr/parallel/monitoring.py +248 -0
- tnfr/parallel/partitioner.py +459 -0
- tnfr/py.typed +0 -0
- tnfr/recipes/__init__.py +22 -0
- tnfr/recipes/cookbook.py +743 -0
- tnfr/rng.py +178 -0
- tnfr/rng.pyi +26 -0
- tnfr/schemas/__init__.py +8 -0
- tnfr/schemas/grammar.json +94 -0
- tnfr/sdk/__init__.py +107 -0
- tnfr/sdk/__init__.pyi +19 -0
- tnfr/sdk/adaptive_system.py +173 -0
- tnfr/sdk/adaptive_system.pyi +21 -0
- tnfr/sdk/builders.py +370 -0
- tnfr/sdk/builders.pyi +51 -0
- tnfr/sdk/fluent.py +1121 -0
- tnfr/sdk/fluent.pyi +74 -0
- tnfr/sdk/templates.py +342 -0
- tnfr/sdk/templates.pyi +41 -0
- tnfr/sdk/utils.py +341 -0
- tnfr/secure_config.py +46 -0
- tnfr/security/__init__.py +70 -0
- tnfr/security/database.py +514 -0
- tnfr/security/subprocess.py +503 -0
- tnfr/security/validation.py +290 -0
- tnfr/selector.py +247 -0
- tnfr/selector.pyi +19 -0
- tnfr/sense.py +378 -0
- tnfr/sense.pyi +23 -0
- tnfr/services/__init__.py +17 -0
- tnfr/services/orchestrator.py +325 -0
- tnfr/sparse/__init__.py +39 -0
- tnfr/sparse/representations.py +492 -0
- tnfr/structural.py +705 -0
- tnfr/structural.pyi +83 -0
- tnfr/telemetry/__init__.py +35 -0
- tnfr/telemetry/cache_metrics.py +226 -0
- tnfr/telemetry/cache_metrics.pyi +64 -0
- tnfr/telemetry/nu_f.py +422 -0
- tnfr/telemetry/nu_f.pyi +108 -0
- tnfr/telemetry/verbosity.py +36 -0
- tnfr/telemetry/verbosity.pyi +15 -0
- tnfr/tokens.py +58 -0
- tnfr/tokens.pyi +36 -0
- tnfr/tools/__init__.py +20 -0
- tnfr/tools/domain_templates.py +478 -0
- tnfr/tools/sequence_generator.py +846 -0
- tnfr/topology/__init__.py +13 -0
- tnfr/topology/asymmetry.py +151 -0
- tnfr/trace.py +543 -0
- tnfr/trace.pyi +42 -0
- tnfr/tutorials/__init__.py +38 -0
- tnfr/tutorials/autonomous_evolution.py +285 -0
- tnfr/tutorials/interactive.py +1576 -0
- tnfr/tutorials/structural_metabolism.py +238 -0
- tnfr/types.py +775 -0
- tnfr/types.pyi +357 -0
- tnfr/units.py +68 -0
- tnfr/units.pyi +13 -0
- tnfr/utils/__init__.py +282 -0
- tnfr/utils/__init__.pyi +215 -0
- tnfr/utils/cache.py +4223 -0
- tnfr/utils/cache.pyi +470 -0
- tnfr/utils/callbacks.py +375 -0
- tnfr/utils/callbacks.pyi +49 -0
- tnfr/utils/chunks.py +108 -0
- tnfr/utils/chunks.pyi +22 -0
- tnfr/utils/data.py +428 -0
- tnfr/utils/data.pyi +74 -0
- tnfr/utils/graph.py +85 -0
- tnfr/utils/graph.pyi +10 -0
- tnfr/utils/init.py +821 -0
- tnfr/utils/init.pyi +80 -0
- tnfr/utils/io.py +559 -0
- tnfr/utils/io.pyi +66 -0
- tnfr/utils/numeric.py +114 -0
- tnfr/utils/numeric.pyi +21 -0
- tnfr/validation/__init__.py +257 -0
- tnfr/validation/__init__.pyi +85 -0
- tnfr/validation/compatibility.py +460 -0
- tnfr/validation/compatibility.pyi +6 -0
- tnfr/validation/config.py +73 -0
- tnfr/validation/graph.py +139 -0
- tnfr/validation/graph.pyi +18 -0
- tnfr/validation/input_validation.py +755 -0
- tnfr/validation/invariants.py +712 -0
- tnfr/validation/rules.py +253 -0
- tnfr/validation/rules.pyi +44 -0
- tnfr/validation/runtime.py +279 -0
- tnfr/validation/runtime.pyi +28 -0
- tnfr/validation/sequence_validator.py +162 -0
- tnfr/validation/soft_filters.py +170 -0
- tnfr/validation/soft_filters.pyi +32 -0
- tnfr/validation/spectral.py +164 -0
- tnfr/validation/spectral.pyi +42 -0
- tnfr/validation/validator.py +1266 -0
- tnfr/validation/window.py +39 -0
- tnfr/validation/window.pyi +1 -0
- tnfr/visualization/__init__.py +98 -0
- tnfr/visualization/cascade_viz.py +256 -0
- tnfr/visualization/hierarchy.py +284 -0
- tnfr/visualization/sequence_plotter.py +784 -0
- tnfr/viz/__init__.py +60 -0
- tnfr/viz/matplotlib.py +278 -0
- tnfr/viz/matplotlib.pyi +35 -0
- tnfr-8.5.0.dist-info/METADATA +573 -0
- tnfr-8.5.0.dist-info/RECORD +353 -0
- tnfr-8.5.0.dist-info/entry_points.txt +3 -0
- tnfr-3.0.3.dist-info/licenses/LICENSE.txt → tnfr-8.5.0.dist-info/licenses/LICENSE.md +1 -1
- tnfr/constants.py +0 -183
- tnfr/dynamics.py +0 -543
- tnfr/helpers.py +0 -198
- tnfr/main.py +0 -37
- tnfr/operators.py +0 -296
- tnfr-3.0.3.dist-info/METADATA +0 -35
- tnfr-3.0.3.dist-info/RECORD +0 -13
- {tnfr-3.0.3.dist-info → tnfr-8.5.0.dist-info}/WHEEL +0 -0
- {tnfr-3.0.3.dist-info → tnfr-8.5.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""Lightweight stub for numpy when it's not installed.
|
|
2
|
+
|
|
3
|
+
This stub provides minimal type compatibility for numpy when it's not installed,
|
|
4
|
+
allowing type checking to succeed. At runtime, actual numpy operations will fail
|
|
5
|
+
with informative errors if called without the real numpy package.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any, TYPE_CHECKING
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"ndarray",
|
|
14
|
+
"float64",
|
|
15
|
+
"float_",
|
|
16
|
+
"complex128",
|
|
17
|
+
"complexfloating",
|
|
18
|
+
"dtype",
|
|
19
|
+
"asarray",
|
|
20
|
+
"array",
|
|
21
|
+
"eye",
|
|
22
|
+
"zeros",
|
|
23
|
+
"ones",
|
|
24
|
+
"isfinite",
|
|
25
|
+
"all",
|
|
26
|
+
"allclose",
|
|
27
|
+
"diff",
|
|
28
|
+
"any",
|
|
29
|
+
"pi",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class _NotInstalledError(RuntimeError):
|
|
34
|
+
"""Raised when trying to use numpy operations without numpy installed."""
|
|
35
|
+
|
|
36
|
+
def __init__(self, operation: str = "numpy operation") -> None:
|
|
37
|
+
super().__init__(
|
|
38
|
+
f"Cannot perform {operation}: numpy is not installed. "
|
|
39
|
+
"Install it with: pip install numpy"
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ndarray:
|
|
44
|
+
"""Stub for numpy.ndarray type."""
|
|
45
|
+
|
|
46
|
+
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
47
|
+
raise _NotInstalledError("array creation")
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def shape(self) -> tuple[int, ...]:
|
|
51
|
+
raise _NotInstalledError("array.shape")
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def ndim(self) -> int:
|
|
55
|
+
raise _NotInstalledError("array.ndim")
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def size(self) -> int:
|
|
59
|
+
raise _NotInstalledError("array.size")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class dtype:
|
|
63
|
+
"""Stub for numpy.dtype type."""
|
|
64
|
+
|
|
65
|
+
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
66
|
+
raise _NotInstalledError("dtype")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class float64:
|
|
70
|
+
"""Stub for numpy.float64 type."""
|
|
71
|
+
|
|
72
|
+
pass
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class float_:
|
|
76
|
+
"""Stub for numpy.float_ type."""
|
|
77
|
+
|
|
78
|
+
pass
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class complex128:
|
|
82
|
+
"""Stub for numpy.complex128 type."""
|
|
83
|
+
|
|
84
|
+
pass
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class complexfloating:
|
|
88
|
+
"""Stub for numpy.complexfloating type."""
|
|
89
|
+
|
|
90
|
+
pass
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def asarray(*args: Any, **kwargs: Any) -> ndarray:
|
|
94
|
+
"""Stub for numpy.asarray."""
|
|
95
|
+
raise _NotInstalledError("numpy.asarray")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def array(*args: Any, **kwargs: Any) -> ndarray:
|
|
99
|
+
"""Stub for numpy.array."""
|
|
100
|
+
raise _NotInstalledError("numpy.array")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def eye(*args: Any, **kwargs: Any) -> ndarray:
|
|
104
|
+
"""Stub for numpy.eye."""
|
|
105
|
+
raise _NotInstalledError("numpy.eye")
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def zeros(*args: Any, **kwargs: Any) -> ndarray:
|
|
109
|
+
"""Stub for numpy.zeros."""
|
|
110
|
+
raise _NotInstalledError("numpy.zeros")
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def ones(*args: Any, **kwargs: Any) -> ndarray:
|
|
114
|
+
"""Stub for numpy.ones."""
|
|
115
|
+
raise _NotInstalledError("numpy.ones")
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def isfinite(*args: Any, **kwargs: Any) -> Any:
|
|
119
|
+
"""Stub for numpy.isfinite."""
|
|
120
|
+
raise _NotInstalledError("numpy.isfinite")
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def all(*args: Any, **kwargs: Any) -> Any:
|
|
124
|
+
"""Stub for numpy.all."""
|
|
125
|
+
raise _NotInstalledError("numpy.all")
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def allclose(*args: Any, **kwargs: Any) -> Any:
|
|
129
|
+
"""Stub for numpy.allclose."""
|
|
130
|
+
raise _NotInstalledError("numpy.allclose")
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def diff(*args: Any, **kwargs: Any) -> ndarray:
|
|
134
|
+
"""Stub for numpy.diff."""
|
|
135
|
+
raise _NotInstalledError("numpy.diff")
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def any(*args: Any, **kwargs: Any) -> Any:
|
|
139
|
+
"""Stub for numpy.any."""
|
|
140
|
+
raise _NotInstalledError("numpy.any")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# Constants
|
|
144
|
+
pi: float = 3.141592653589793
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
if TYPE_CHECKING:
|
|
148
|
+
# Provide typing namespace for numpy.typing when used in TYPE_CHECKING blocks
|
|
149
|
+
class typing:
|
|
150
|
+
"""Stub for numpy.typing module."""
|
|
151
|
+
|
|
152
|
+
class NDArray:
|
|
153
|
+
"""Stub for numpy.typing.NDArray."""
|
|
154
|
+
|
|
155
|
+
pass
|
tnfr/config/__init__.py
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"""Canonical TNFR configuration system.
|
|
2
|
+
|
|
3
|
+
This package provides the unified configuration system for TNFR, consolidating:
|
|
4
|
+
- TNFRConfig class with structural invariant validation
|
|
5
|
+
- Secure configuration management (moved from secure_config.py)
|
|
6
|
+
- All default configurations organized by subsystem
|
|
7
|
+
- TNFR semantic mapping (νf, θ, ΔNFR)
|
|
8
|
+
|
|
9
|
+
Single import path philosophy:
|
|
10
|
+
from tnfr.config import TNFRConfig, DEFAULTS, get_param
|
|
11
|
+
|
|
12
|
+
Key Changes (Phase 3):
|
|
13
|
+
- Consolidated constants from constants/ package
|
|
14
|
+
- Integrated secure_config functionality
|
|
15
|
+
- Added TNFR invariant validation
|
|
16
|
+
- Explicit structural coherence principles
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from .defaults import (
|
|
22
|
+
COHERENCE,
|
|
23
|
+
CORE_DEFAULTS,
|
|
24
|
+
DEFAULT_SECTIONS,
|
|
25
|
+
DEFAULTS,
|
|
26
|
+
DIAGNOSIS,
|
|
27
|
+
GRAMMAR_CANON,
|
|
28
|
+
INIT_DEFAULTS,
|
|
29
|
+
METRIC_DEFAULTS,
|
|
30
|
+
METRICS,
|
|
31
|
+
REMESH_DEFAULTS,
|
|
32
|
+
SIGMA,
|
|
33
|
+
TRACE,
|
|
34
|
+
)
|
|
35
|
+
from .feature_flags import context_flags, get_flags
|
|
36
|
+
from .init import apply_config, load_config
|
|
37
|
+
from .thresholds import (
|
|
38
|
+
EPSILON_MIN_EMISSION,
|
|
39
|
+
EPI_LATENT_MAX,
|
|
40
|
+
MIN_NETWORK_DEGREE_COUPLING,
|
|
41
|
+
VF_BASAL_THRESHOLD,
|
|
42
|
+
)
|
|
43
|
+
from .tnfr_config import (
|
|
44
|
+
ALIASES,
|
|
45
|
+
CANONICAL_STATE_TOKENS,
|
|
46
|
+
D2EPI_PRIMARY,
|
|
47
|
+
D2VF_PRIMARY,
|
|
48
|
+
DNFR_KEY,
|
|
49
|
+
DNFR_PRIMARY,
|
|
50
|
+
EPI_KIND_PRIMARY,
|
|
51
|
+
EPI_PRIMARY,
|
|
52
|
+
SI_PRIMARY,
|
|
53
|
+
STATE_DISSONANT,
|
|
54
|
+
STATE_STABLE,
|
|
55
|
+
STATE_TRANSITION,
|
|
56
|
+
THETA_KEY,
|
|
57
|
+
THETA_PRIMARY,
|
|
58
|
+
TNFRConfig,
|
|
59
|
+
TNFRConfigError,
|
|
60
|
+
VF_KEY,
|
|
61
|
+
VF_PRIMARY,
|
|
62
|
+
dEPI_PRIMARY,
|
|
63
|
+
dSI_PRIMARY,
|
|
64
|
+
dVF_PRIMARY,
|
|
65
|
+
get_aliases,
|
|
66
|
+
normalise_state_token,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Import compatibility utilities from constants (for backward compat)
|
|
70
|
+
# These will be re-exported through constants/__init__.py
|
|
71
|
+
try:
|
|
72
|
+
from ..utils import ensure_node_offset_map as _ensure_node_offset_map
|
|
73
|
+
except ImportError:
|
|
74
|
+
_ensure_node_offset_map = None
|
|
75
|
+
|
|
76
|
+
ensure_node_offset_map = _ensure_node_offset_map
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# Legacy function wrappers that use TNFRConfig internally
|
|
80
|
+
def inject_defaults(G, defaults=None, override=False):
|
|
81
|
+
"""Inject defaults into graph (backward compatible wrapper).
|
|
82
|
+
|
|
83
|
+
Uses TNFRConfig internally for validation.
|
|
84
|
+
"""
|
|
85
|
+
config = TNFRConfig(defaults=defaults or DEFAULTS, validate_invariants=True)
|
|
86
|
+
config.inject_defaults(G, defaults=defaults or DEFAULTS, override=override)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def merge_overrides(G, **overrides):
|
|
90
|
+
"""Apply specific overrides to graph configuration.
|
|
91
|
+
|
|
92
|
+
Parameters
|
|
93
|
+
----------
|
|
94
|
+
G : GraphLike
|
|
95
|
+
The graph whose configuration should be updated.
|
|
96
|
+
**overrides
|
|
97
|
+
Keyword arguments mapping parameter names to new values.
|
|
98
|
+
|
|
99
|
+
Raises
|
|
100
|
+
------
|
|
101
|
+
KeyError
|
|
102
|
+
If any parameter name is not present in DEFAULTS.
|
|
103
|
+
"""
|
|
104
|
+
import copy
|
|
105
|
+
from ..immutable import _is_immutable
|
|
106
|
+
from ..types import TNFRConfigValue
|
|
107
|
+
from typing import cast
|
|
108
|
+
|
|
109
|
+
for key, value in overrides.items():
|
|
110
|
+
if key not in DEFAULTS:
|
|
111
|
+
raise KeyError(f"Unknown parameter: '{key}'")
|
|
112
|
+
G.graph[key] = (
|
|
113
|
+
value
|
|
114
|
+
if _is_immutable(value)
|
|
115
|
+
else cast(TNFRConfigValue, copy.deepcopy(value))
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def get_param(G, key: str):
|
|
120
|
+
"""Retrieve parameter from graph or defaults.
|
|
121
|
+
|
|
122
|
+
Parameters
|
|
123
|
+
----------
|
|
124
|
+
G : GraphLike
|
|
125
|
+
Graph containing configuration.
|
|
126
|
+
key : str
|
|
127
|
+
Parameter name.
|
|
128
|
+
|
|
129
|
+
Returns
|
|
130
|
+
-------
|
|
131
|
+
TNFRConfigValue
|
|
132
|
+
Configuration value.
|
|
133
|
+
|
|
134
|
+
Raises
|
|
135
|
+
------
|
|
136
|
+
KeyError
|
|
137
|
+
If key not found in graph or DEFAULTS.
|
|
138
|
+
"""
|
|
139
|
+
if key in G.graph:
|
|
140
|
+
return G.graph[key]
|
|
141
|
+
if key not in DEFAULTS:
|
|
142
|
+
raise KeyError(f"Unknown parameter: '{key}'")
|
|
143
|
+
return DEFAULTS[key]
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def get_graph_param(G, key: str, cast_fn=float):
|
|
147
|
+
"""Return parameter from graph applying cast function.
|
|
148
|
+
|
|
149
|
+
Parameters
|
|
150
|
+
----------
|
|
151
|
+
G : GraphLike
|
|
152
|
+
Graph containing configuration.
|
|
153
|
+
key : str
|
|
154
|
+
Parameter name.
|
|
155
|
+
cast_fn : callable, default=float
|
|
156
|
+
Function to cast value (e.g., float, int, bool).
|
|
157
|
+
|
|
158
|
+
Returns
|
|
159
|
+
-------
|
|
160
|
+
Any
|
|
161
|
+
Casted parameter value, or None if value is None.
|
|
162
|
+
"""
|
|
163
|
+
val = get_param(G, key)
|
|
164
|
+
return None if val is None else cast_fn(val)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
__all__ = (
|
|
168
|
+
# Main configuration class
|
|
169
|
+
"TNFRConfig",
|
|
170
|
+
"TNFRConfigError",
|
|
171
|
+
# File-based configuration
|
|
172
|
+
"load_config",
|
|
173
|
+
"apply_config",
|
|
174
|
+
# Feature flags
|
|
175
|
+
"get_flags",
|
|
176
|
+
"context_flags",
|
|
177
|
+
# Defaults and sections
|
|
178
|
+
"DEFAULTS",
|
|
179
|
+
"DEFAULT_SECTIONS",
|
|
180
|
+
"CORE_DEFAULTS",
|
|
181
|
+
"INIT_DEFAULTS",
|
|
182
|
+
"REMESH_DEFAULTS",
|
|
183
|
+
"METRIC_DEFAULTS",
|
|
184
|
+
"SIGMA",
|
|
185
|
+
"TRACE",
|
|
186
|
+
"METRICS",
|
|
187
|
+
"GRAMMAR_CANON",
|
|
188
|
+
"COHERENCE",
|
|
189
|
+
"DIAGNOSIS",
|
|
190
|
+
# Operator precondition thresholds
|
|
191
|
+
"EPI_LATENT_MAX",
|
|
192
|
+
"VF_BASAL_THRESHOLD",
|
|
193
|
+
"EPSILON_MIN_EMISSION",
|
|
194
|
+
"MIN_NETWORK_DEGREE_COUPLING",
|
|
195
|
+
# TNFR semantic aliases
|
|
196
|
+
"ALIASES",
|
|
197
|
+
"VF_KEY",
|
|
198
|
+
"THETA_KEY",
|
|
199
|
+
"DNFR_KEY",
|
|
200
|
+
"VF_PRIMARY",
|
|
201
|
+
"THETA_PRIMARY",
|
|
202
|
+
"DNFR_PRIMARY",
|
|
203
|
+
"EPI_PRIMARY",
|
|
204
|
+
"EPI_KIND_PRIMARY",
|
|
205
|
+
"SI_PRIMARY",
|
|
206
|
+
"dEPI_PRIMARY",
|
|
207
|
+
"D2EPI_PRIMARY",
|
|
208
|
+
"dVF_PRIMARY",
|
|
209
|
+
"D2VF_PRIMARY",
|
|
210
|
+
"dSI_PRIMARY",
|
|
211
|
+
# State tokens
|
|
212
|
+
"STATE_STABLE",
|
|
213
|
+
"STATE_TRANSITION",
|
|
214
|
+
"STATE_DISSONANT",
|
|
215
|
+
"CANONICAL_STATE_TOKENS",
|
|
216
|
+
# Utility functions
|
|
217
|
+
"get_aliases",
|
|
218
|
+
"normalise_state_token",
|
|
219
|
+
"inject_defaults",
|
|
220
|
+
"merge_overrides",
|
|
221
|
+
"get_param",
|
|
222
|
+
"get_graph_param",
|
|
223
|
+
"ensure_node_offset_map",
|
|
224
|
+
)
|
tnfr/config/__init__.pyi
ADDED
tnfr/config/constants.py
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Canonical glyph constants tied to configuration presets."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import math
|
|
6
|
+
from types import MappingProxyType
|
|
7
|
+
from typing import Mapping
|
|
8
|
+
|
|
9
|
+
from ..types import Glyph
|
|
10
|
+
|
|
11
|
+
# -------------------------
|
|
12
|
+
# Canonical order and functional classifications
|
|
13
|
+
# -------------------------
|
|
14
|
+
|
|
15
|
+
GLYPHS_CANONICAL: tuple[str, ...] = (
|
|
16
|
+
Glyph.AL.value, # 0
|
|
17
|
+
Glyph.EN.value, # 1
|
|
18
|
+
Glyph.IL.value, # 2
|
|
19
|
+
Glyph.OZ.value, # 3
|
|
20
|
+
Glyph.UM.value, # 4
|
|
21
|
+
Glyph.RA.value, # 5
|
|
22
|
+
Glyph.SHA.value, # 6
|
|
23
|
+
Glyph.VAL.value, # 7
|
|
24
|
+
Glyph.NUL.value, # 8
|
|
25
|
+
Glyph.THOL.value, # 9
|
|
26
|
+
Glyph.ZHIR.value, # 10
|
|
27
|
+
Glyph.NAV.value, # 11
|
|
28
|
+
Glyph.REMESH.value, # 12
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
GLYPHS_CANONICAL_SET: frozenset[str] = frozenset(GLYPHS_CANONICAL)
|
|
32
|
+
|
|
33
|
+
STABILIZERS: tuple[str, ...] = (
|
|
34
|
+
Glyph.IL.value,
|
|
35
|
+
Glyph.RA.value,
|
|
36
|
+
Glyph.UM.value,
|
|
37
|
+
Glyph.SHA.value,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
DISRUPTORS: tuple[str, ...] = (
|
|
41
|
+
Glyph.OZ.value,
|
|
42
|
+
Glyph.ZHIR.value,
|
|
43
|
+
Glyph.NAV.value,
|
|
44
|
+
Glyph.THOL.value,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# General map of glyph groupings for cross-reference.
|
|
48
|
+
#
|
|
49
|
+
# Spanish keys (``estabilizadores`` / ``disruptivos``) were removed in TNFR 7.0
|
|
50
|
+
# to keep the public surface English-only. Code that still referenced those
|
|
51
|
+
# identifiers must switch to the canonical ``stabilizers`` / ``disruptors``
|
|
52
|
+
# entries or maintain a private compatibility layer.
|
|
53
|
+
GLYPH_GROUPS: Mapping[str, tuple[str, ...]] = MappingProxyType(
|
|
54
|
+
{
|
|
55
|
+
"stabilizers": STABILIZERS,
|
|
56
|
+
"disruptors": DISRUPTORS,
|
|
57
|
+
# Auxiliary groups for morphosyntactic metrics
|
|
58
|
+
"ID": (Glyph.OZ.value,),
|
|
59
|
+
"CM": (Glyph.ZHIR.value, Glyph.NAV.value),
|
|
60
|
+
"NE": (Glyph.IL.value, Glyph.THOL.value),
|
|
61
|
+
"PP_num": (Glyph.SHA.value,),
|
|
62
|
+
"PP_den": (Glyph.REMESH.value,),
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# -------------------------
|
|
67
|
+
# Glyph angle map
|
|
68
|
+
# -------------------------
|
|
69
|
+
|
|
70
|
+
# Canonical angles for all recognised glyphs. They are computed from the
|
|
71
|
+
# canonical order and orientation rules for the "stabilizers" and
|
|
72
|
+
# "disruptors" categories.
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _build_angle_map() -> dict[str, float]:
|
|
76
|
+
"""Build the angle map in the σ-plane."""
|
|
77
|
+
|
|
78
|
+
step = 2 * math.pi / len(GLYPHS_CANONICAL)
|
|
79
|
+
canonical = {g: i * step for i, g in enumerate(GLYPHS_CANONICAL)}
|
|
80
|
+
angles = dict(canonical)
|
|
81
|
+
|
|
82
|
+
# Orientation rules
|
|
83
|
+
for idx, g in enumerate(STABILIZERS):
|
|
84
|
+
angles[g] = idx * math.pi / 4
|
|
85
|
+
for idx, g in enumerate(DISRUPTORS):
|
|
86
|
+
angles[g] = math.pi + idx * math.pi / 4
|
|
87
|
+
|
|
88
|
+
# Manual exceptions
|
|
89
|
+
angles[Glyph.VAL.value] = canonical[Glyph.RA.value]
|
|
90
|
+
angles[Glyph.NUL.value] = canonical[Glyph.ZHIR.value]
|
|
91
|
+
angles[Glyph.AL.value] = 0.0
|
|
92
|
+
return angles
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
ANGLE_MAP: Mapping[str, float] = MappingProxyType(_build_angle_map())
|
|
96
|
+
|
|
97
|
+
__all__ = (
|
|
98
|
+
"GLYPHS_CANONICAL",
|
|
99
|
+
"GLYPHS_CANONICAL_SET",
|
|
100
|
+
"STABILIZERS",
|
|
101
|
+
"DISRUPTORS",
|
|
102
|
+
"GLYPH_GROUPS",
|
|
103
|
+
"ANGLE_MAP",
|
|
104
|
+
)
|
tnfr/config/defaults.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Consolidated TNFR configuration defaults.
|
|
2
|
+
|
|
3
|
+
This module provides all default configuration values organized by subsystem,
|
|
4
|
+
following TNFR structural coherence principles.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from types import MappingProxyType
|
|
10
|
+
from typing import Mapping
|
|
11
|
+
|
|
12
|
+
from ..types import TNFRConfigValue
|
|
13
|
+
from .defaults_core import CORE_DEFAULTS, REMESH_DEFAULTS
|
|
14
|
+
from .defaults_init import INIT_DEFAULTS
|
|
15
|
+
from .defaults_metric import (
|
|
16
|
+
COHERENCE,
|
|
17
|
+
DIAGNOSIS,
|
|
18
|
+
GRAMMAR_CANON,
|
|
19
|
+
METRIC_DEFAULTS,
|
|
20
|
+
METRICS,
|
|
21
|
+
SIGMA,
|
|
22
|
+
TRACE,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Exported sections organized by subsystem
|
|
26
|
+
DEFAULT_SECTIONS: Mapping[str, Mapping[str, TNFRConfigValue]] = MappingProxyType(
|
|
27
|
+
{
|
|
28
|
+
"core": CORE_DEFAULTS,
|
|
29
|
+
"init": INIT_DEFAULTS,
|
|
30
|
+
"remesh": REMESH_DEFAULTS,
|
|
31
|
+
"metric": METRIC_DEFAULTS,
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Combined defaults with priority: CORE < INIT < REMESH < METRIC
|
|
36
|
+
# METRIC_DEFAULTS has highest priority to match previous ChainMap behavior
|
|
37
|
+
DEFAULTS: Mapping[str, TNFRConfigValue] = MappingProxyType(
|
|
38
|
+
CORE_DEFAULTS | INIT_DEFAULTS | REMESH_DEFAULTS | METRIC_DEFAULTS
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
__all__ = (
|
|
42
|
+
"DEFAULTS",
|
|
43
|
+
"DEFAULT_SECTIONS",
|
|
44
|
+
"CORE_DEFAULTS",
|
|
45
|
+
"INIT_DEFAULTS",
|
|
46
|
+
"REMESH_DEFAULTS",
|
|
47
|
+
"METRIC_DEFAULTS",
|
|
48
|
+
"SIGMA",
|
|
49
|
+
"TRACE",
|
|
50
|
+
"METRICS",
|
|
51
|
+
"GRAMMAR_CANON",
|
|
52
|
+
"COHERENCE",
|
|
53
|
+
"DIAGNOSIS",
|
|
54
|
+
)
|