tnfr 4.5.2__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 +334 -50
- 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 +214 -37
- 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 +149 -556
- tnfr/cache.pyi +13 -0
- tnfr/cli/__init__.py +51 -16
- tnfr/cli/__init__.pyi +26 -0
- tnfr/cli/arguments.py +344 -32
- tnfr/cli/arguments.pyi +29 -0
- tnfr/cli/execution.py +676 -50
- tnfr/cli/execution.pyi +70 -0
- tnfr/cli/interactive_validator.py +614 -0
- tnfr/cli/utils.py +18 -3
- 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/{constants_glyphs.py → config/constants.py} +26 -20
- tnfr/config/constants.pyi +12 -0
- tnfr/config/defaults.py +54 -0
- tnfr/{constants/core.py → config/defaults_core.py} +59 -6
- 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 +51 -133
- tnfr/constants/__init__.pyi +92 -0
- tnfr/constants/aliases.py +33 -0
- tnfr/constants/aliases.pyi +27 -0
- tnfr/constants/init.py +3 -1
- tnfr/constants/init.pyi +12 -0
- tnfr/constants/metric.py +9 -15
- 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 +213 -633
- 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 +2699 -398
- 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 +496 -102
- 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 +10 -5
- 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 +77 -55
- 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 +29 -50
- tnfr/flatten.pyi +21 -0
- tnfr/gamma.py +66 -53
- tnfr/gamma.pyi +36 -0
- tnfr/glyph_history.py +144 -57
- tnfr/glyph_history.pyi +35 -0
- tnfr/glyph_runtime.py +19 -0
- tnfr/glyph_runtime.pyi +8 -0
- tnfr/immutable.py +70 -30
- tnfr/immutable.pyi +36 -0
- tnfr/initialization.py +22 -16
- tnfr/initialization.pyi +65 -0
- tnfr/io.py +5 -241
- tnfr/io.pyi +13 -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 +47 -9
- 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 +1510 -330
- tnfr/metrics/coherence.pyi +129 -0
- tnfr/metrics/common.py +23 -16
- tnfr/metrics/common.pyi +35 -0
- tnfr/metrics/core.py +251 -36
- tnfr/metrics/core.pyi +13 -0
- tnfr/metrics/diagnosis.py +709 -110
- tnfr/metrics/diagnosis.pyi +86 -0
- tnfr/metrics/emergence.py +245 -0
- tnfr/metrics/export.py +60 -18
- tnfr/metrics/export.pyi +7 -0
- tnfr/metrics/glyph_timing.py +233 -43
- 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 +63 -28
- tnfr/metrics/reporting.pyi +25 -0
- tnfr/metrics/sense_index.py +1126 -43
- tnfr/metrics/sense_index.pyi +9 -0
- tnfr/metrics/trig.py +215 -23
- tnfr/metrics/trig.pyi +13 -0
- tnfr/metrics/trig_cache.py +148 -24
- tnfr/metrics/trig_cache.pyi +10 -0
- tnfr/multiscale/__init__.py +32 -0
- tnfr/multiscale/hierarchical.py +517 -0
- tnfr/node.py +646 -140
- tnfr/node.pyi +139 -0
- tnfr/observers.py +160 -45
- tnfr/observers.pyi +31 -0
- tnfr/ontosim.py +23 -19
- tnfr/ontosim.pyi +28 -0
- tnfr/operators/__init__.py +1358 -106
- 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 +107 -38
- 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 +1415 -91
- 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 +75 -151
- 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 +59 -22
- tnfr/selector.pyi +19 -0
- tnfr/sense.py +92 -67
- 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 +639 -263
- 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 +2 -4
- 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 +300 -126
- 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 +743 -12
- 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/{callback_utils.py → utils/callbacks.py} +26 -39
- 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/{helpers → utils}/numeric.py +51 -24
- 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-4.5.2.dist-info → tnfr-8.5.0.dist-info}/entry_points.txt +1 -0
- {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/licenses/LICENSE.md +1 -1
- tnfr/collections_utils.py +0 -300
- tnfr/config.py +0 -32
- tnfr/grammar.py +0 -344
- tnfr/graph_utils.py +0 -84
- tnfr/helpers/__init__.py +0 -71
- tnfr/import_utils.py +0 -228
- tnfr/json_utils.py +0 -162
- tnfr/logging_utils.py +0 -116
- tnfr/presets.py +0 -60
- tnfr/validators.py +0 -84
- tnfr/value_utils.py +0 -59
- tnfr-4.5.2.dist-info/METADATA +0 -379
- tnfr-4.5.2.dist-info/RECORD +0 -67
- {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/WHEEL +0 -0
- {tnfr-4.5.2.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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Canonical glyph constants tied to configuration presets."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -6,10 +6,10 @@ import math
|
|
|
6
6
|
from types import MappingProxyType
|
|
7
7
|
from typing import Mapping
|
|
8
8
|
|
|
9
|
-
from
|
|
9
|
+
from ..types import Glyph
|
|
10
10
|
|
|
11
11
|
# -------------------------
|
|
12
|
-
#
|
|
12
|
+
# Canonical order and functional classifications
|
|
13
13
|
# -------------------------
|
|
14
14
|
|
|
15
15
|
GLYPHS_CANONICAL: tuple[str, ...] = (
|
|
@@ -30,26 +30,31 @@ GLYPHS_CANONICAL: tuple[str, ...] = (
|
|
|
30
30
|
|
|
31
31
|
GLYPHS_CANONICAL_SET: frozenset[str] = frozenset(GLYPHS_CANONICAL)
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
STABILIZERS: tuple[str, ...] = (
|
|
34
34
|
Glyph.IL.value,
|
|
35
35
|
Glyph.RA.value,
|
|
36
36
|
Glyph.UM.value,
|
|
37
37
|
Glyph.SHA.value,
|
|
38
38
|
)
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
DISRUPTORS: tuple[str, ...] = (
|
|
41
41
|
Glyph.OZ.value,
|
|
42
42
|
Glyph.ZHIR.value,
|
|
43
43
|
Glyph.NAV.value,
|
|
44
44
|
Glyph.THOL.value,
|
|
45
45
|
)
|
|
46
46
|
|
|
47
|
-
#
|
|
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.
|
|
48
53
|
GLYPH_GROUPS: Mapping[str, tuple[str, ...]] = MappingProxyType(
|
|
49
54
|
{
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
#
|
|
55
|
+
"stabilizers": STABILIZERS,
|
|
56
|
+
"disruptors": DISRUPTORS,
|
|
57
|
+
# Auxiliary groups for morphosyntactic metrics
|
|
53
58
|
"ID": (Glyph.OZ.value,),
|
|
54
59
|
"CM": (Glyph.ZHIR.value, Glyph.NAV.value),
|
|
55
60
|
"NE": (Glyph.IL.value, Glyph.THOL.value),
|
|
@@ -59,27 +64,28 @@ GLYPH_GROUPS: Mapping[str, tuple[str, ...]] = MappingProxyType(
|
|
|
59
64
|
)
|
|
60
65
|
|
|
61
66
|
# -------------------------
|
|
62
|
-
#
|
|
67
|
+
# Glyph angle map
|
|
63
68
|
# -------------------------
|
|
64
69
|
|
|
65
|
-
#
|
|
66
|
-
#
|
|
67
|
-
# "
|
|
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.
|
|
68
73
|
|
|
69
74
|
|
|
70
75
|
def _build_angle_map() -> dict[str, float]:
|
|
71
|
-
"""
|
|
76
|
+
"""Build the angle map in the σ-plane."""
|
|
77
|
+
|
|
72
78
|
step = 2 * math.pi / len(GLYPHS_CANONICAL)
|
|
73
79
|
canonical = {g: i * step for i, g in enumerate(GLYPHS_CANONICAL)}
|
|
74
80
|
angles = dict(canonical)
|
|
75
81
|
|
|
76
|
-
#
|
|
77
|
-
for idx, g in enumerate(
|
|
82
|
+
# Orientation rules
|
|
83
|
+
for idx, g in enumerate(STABILIZERS):
|
|
78
84
|
angles[g] = idx * math.pi / 4
|
|
79
|
-
for idx, g in enumerate(
|
|
85
|
+
for idx, g in enumerate(DISRUPTORS):
|
|
80
86
|
angles[g] = math.pi + idx * math.pi / 4
|
|
81
87
|
|
|
82
|
-
#
|
|
88
|
+
# Manual exceptions
|
|
83
89
|
angles[Glyph.VAL.value] = canonical[Glyph.RA.value]
|
|
84
90
|
angles[Glyph.NUL.value] = canonical[Glyph.ZHIR.value]
|
|
85
91
|
angles[Glyph.AL.value] = 0.0
|
|
@@ -91,8 +97,8 @@ ANGLE_MAP: Mapping[str, float] = MappingProxyType(_build_angle_map())
|
|
|
91
97
|
__all__ = (
|
|
92
98
|
"GLYPHS_CANONICAL",
|
|
93
99
|
"GLYPHS_CANONICAL_SET",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
100
|
+
"STABILIZERS",
|
|
101
|
+
"DISRUPTORS",
|
|
96
102
|
"GLYPH_GROUPS",
|
|
97
103
|
"ANGLE_MAP",
|
|
98
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
|
+
)
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from dataclasses import
|
|
6
|
-
from typing import Any, Mapping
|
|
5
|
+
from dataclasses import asdict, field
|
|
7
6
|
from types import MappingProxyType
|
|
7
|
+
from typing import Any, Mapping
|
|
8
8
|
|
|
9
|
+
from ..compat.dataclass import dataclass
|
|
9
10
|
|
|
10
11
|
SELECTOR_THRESHOLD_DEFAULTS: Mapping[str, float] = MappingProxyType(
|
|
11
12
|
{
|
|
@@ -33,8 +34,10 @@ class CoreDefaults:
|
|
|
33
34
|
EPI_MIN: float = -1.0
|
|
34
35
|
EPI_MAX: float = 1.0
|
|
35
36
|
VF_MIN: float = 0.0
|
|
36
|
-
VF_MAX: float =
|
|
37
|
+
VF_MAX: float = 10.0
|
|
37
38
|
THETA_WRAP: bool = True
|
|
39
|
+
CLIP_MODE: str = "hard"
|
|
40
|
+
CLIP_SOFT_K: float = 3.0
|
|
38
41
|
DNFR_WEIGHTS: dict[str, float] = field(
|
|
39
42
|
default_factory=lambda: {
|
|
40
43
|
"phase": 0.34,
|
|
@@ -72,6 +75,7 @@ class CoreDefaults:
|
|
|
72
75
|
GLYPH_SELECTOR_MARGIN: float = 0.05
|
|
73
76
|
VF_ADAPT_TAU: int = 5
|
|
74
77
|
VF_ADAPT_MU: float = 0.1
|
|
78
|
+
HZ_STR_BRIDGE: float = 1.0
|
|
75
79
|
GLYPH_FACTORS: dict[str, float] = field(
|
|
76
80
|
default_factory=lambda: {
|
|
77
81
|
"AL_boost": 0.05,
|
|
@@ -79,12 +83,27 @@ class CoreDefaults:
|
|
|
79
83
|
"IL_dnfr_factor": 0.7,
|
|
80
84
|
"OZ_dnfr_factor": 1.3,
|
|
81
85
|
"UM_theta_push": 0.25,
|
|
86
|
+
"UM_vf_sync": 0.10,
|
|
87
|
+
"UM_dnfr_reduction": 0.15,
|
|
82
88
|
"RA_epi_diff": 0.15,
|
|
89
|
+
"RA_vf_amplification": 0.05,
|
|
90
|
+
"RA_phase_coupling": 0.10, # Canonical phase alignment strengthening
|
|
83
91
|
"SHA_vf_factor": 0.85,
|
|
84
|
-
|
|
92
|
+
# Conservative scaling (1.05) prevents EPI overflow near boundaries
|
|
93
|
+
# while maintaining meaningful expansion capacity. Critical threshold:
|
|
94
|
+
# EPI × 1.05 = 1.0 when EPI ≈ 0.952 (vs previous threshold ≈ 0.870).
|
|
95
|
+
# This preserves structural identity at boundary (EPI_MAX as identity frontier).
|
|
96
|
+
"VAL_scale": 1.05,
|
|
85
97
|
"NUL_scale": 0.85,
|
|
98
|
+
# NUL canonical ΔNFR densification factor: implements structural pressure
|
|
99
|
+
# concentration due to volume reduction. When V' = V × 0.85, density increases
|
|
100
|
+
# by ~1.176× geometrically. Canonical value 1.35 accounts for nonlinear
|
|
101
|
+
# structural effects at smaller scales, per TNFR theory.
|
|
102
|
+
"NUL_densification_factor": 1.35,
|
|
86
103
|
"THOL_accel": 0.10,
|
|
87
|
-
|
|
104
|
+
# ZHIR now uses canonical transformation by default (θ → θ' based on ΔNFR)
|
|
105
|
+
# To use fixed shift, explicitly set ZHIR_theta_shift in graph
|
|
106
|
+
"ZHIR_theta_shift_factor": 0.3, # Canonical transformation magnitude
|
|
88
107
|
"NAV_jitter": 0.05,
|
|
89
108
|
"NAV_eta": 0.5,
|
|
90
109
|
"REMESH_alpha": 0.5,
|
|
@@ -121,6 +140,40 @@ class CoreDefaults:
|
|
|
121
140
|
VALIDATORS_STRICT: bool = False
|
|
122
141
|
PROGRAM_TRACE_MAXLEN: int = 50
|
|
123
142
|
HISTORY_MAXLEN: int = 0
|
|
143
|
+
NODAL_EQUATION_CLIP_AWARE: bool = True
|
|
144
|
+
NODAL_EQUATION_TOLERANCE: float = 1e-9
|
|
145
|
+
# THOL (Self-organization) vibrational metabolism parameters
|
|
146
|
+
THOL_METABOLIC_ENABLED: bool = True
|
|
147
|
+
THOL_METABOLIC_GRADIENT_WEIGHT: float = 0.15
|
|
148
|
+
THOL_METABOLIC_COMPLEXITY_WEIGHT: float = 0.10
|
|
149
|
+
THOL_BIFURCATION_THRESHOLD: float = 0.1
|
|
150
|
+
|
|
151
|
+
# THOL network propagation and cascade parameters
|
|
152
|
+
THOL_PROPAGATION_ENABLED: bool = True
|
|
153
|
+
THOL_MIN_COUPLING_FOR_PROPAGATION: float = 0.5
|
|
154
|
+
THOL_PROPAGATION_ATTENUATION: float = 0.7
|
|
155
|
+
THOL_CASCADE_MIN_NODES: int = 3
|
|
156
|
+
|
|
157
|
+
# THOL precondition thresholds
|
|
158
|
+
THOL_MIN_EPI: float = 0.2 # Minimum EPI for bifurcation
|
|
159
|
+
THOL_MIN_VF: float = 0.1 # Minimum structural frequency for reorganization
|
|
160
|
+
THOL_MIN_DEGREE: int = 1 # Minimum network connectivity
|
|
161
|
+
THOL_MIN_HISTORY_LENGTH: int = 3 # Minimum EPI history for acceleration computation
|
|
162
|
+
THOL_ALLOW_ISOLATED: bool = False # Require network context by default
|
|
163
|
+
THOL_MIN_COLLECTIVE_COHERENCE: float = 0.3 # Minimum collective coherence for sub-EPI ensemble
|
|
164
|
+
|
|
165
|
+
# VAL (Expansion) precondition thresholds
|
|
166
|
+
VAL_MAX_VF: float = 10.0 # Maximum structural frequency threshold
|
|
167
|
+
VAL_MIN_DNFR: float = 1e-6 # Minimum positive ΔNFR for coherent expansion (very low to minimize breaking changes)
|
|
168
|
+
VAL_MIN_EPI: float = 0.2 # Minimum EPI for coherent expansion base
|
|
169
|
+
VAL_CHECK_NETWORK_CAPACITY: bool = False # Optional network capacity validation
|
|
170
|
+
VAL_MAX_NETWORK_SIZE: int = 1000 # Maximum network size if capacity checking enabled
|
|
171
|
+
|
|
172
|
+
# VAL (Expansion) metric thresholds (Issue #2724)
|
|
173
|
+
VAL_BIFURCATION_THRESHOLD: float = 0.3 # Threshold for |∂²EPI/∂t²| bifurcation detection
|
|
174
|
+
VAL_MIN_COHERENCE: float = 0.5 # Minimum local coherence for healthy expansion
|
|
175
|
+
VAL_FRACTAL_RATIO_MIN: float = 0.5 # Minimum vf_growth/epi_growth ratio for fractality
|
|
176
|
+
VAL_FRACTAL_RATIO_MAX: float = 2.0 # Maximum vf_growth/epi_growth ratio for fractality
|
|
124
177
|
|
|
125
178
|
|
|
126
179
|
@dataclass(frozen=True, slots=True)
|
|
@@ -134,7 +187,7 @@ class RemeshDefaults:
|
|
|
134
187
|
EPS_DNFR_STABLE: float = 1e-3
|
|
135
188
|
EPS_DEPI_STABLE: float = 1e-3
|
|
136
189
|
FRACTION_STABLE_REMESH: float = 0.80
|
|
137
|
-
|
|
190
|
+
REMESH_COOLDOWN_WINDOW: int = 20
|
|
138
191
|
REMESH_COOLDOWN_TS: float = 0.0
|
|
139
192
|
REMESH_REQUIRE_STABILITY: bool = True
|
|
140
193
|
REMESH_STABILITY_WINDOW: int = 25
|