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,92 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Callable, TypeVar
|
|
5
|
+
|
|
6
|
+
from ..types import GraphLike, TNFRConfigValue
|
|
7
|
+
from .core import CORE_DEFAULTS as CORE_DEFAULTS
|
|
8
|
+
from .core import REMESH_DEFAULTS as REMESH_DEFAULTS
|
|
9
|
+
from .init import INIT_DEFAULTS as INIT_DEFAULTS
|
|
10
|
+
from .metric import COHERENCE as COHERENCE
|
|
11
|
+
from .metric import DIAGNOSIS as DIAGNOSIS
|
|
12
|
+
from .metric import GRAMMAR_CANON as GRAMMAR_CANON
|
|
13
|
+
from .metric import METRIC_DEFAULTS as METRIC_DEFAULTS
|
|
14
|
+
from .metric import METRICS as METRICS
|
|
15
|
+
from .metric import SIGMA as SIGMA
|
|
16
|
+
from .metric import TRACE as TRACE
|
|
17
|
+
|
|
18
|
+
T = TypeVar("T")
|
|
19
|
+
|
|
20
|
+
__all__ = (
|
|
21
|
+
"CORE_DEFAULTS",
|
|
22
|
+
"INIT_DEFAULTS",
|
|
23
|
+
"REMESH_DEFAULTS",
|
|
24
|
+
"METRIC_DEFAULTS",
|
|
25
|
+
"SIGMA",
|
|
26
|
+
"TRACE",
|
|
27
|
+
"METRICS",
|
|
28
|
+
"GRAMMAR_CANON",
|
|
29
|
+
"COHERENCE",
|
|
30
|
+
"DIAGNOSIS",
|
|
31
|
+
"DEFAULTS",
|
|
32
|
+
"DEFAULT_SECTIONS",
|
|
33
|
+
"ALIASES",
|
|
34
|
+
"inject_defaults",
|
|
35
|
+
"merge_overrides",
|
|
36
|
+
"get_param",
|
|
37
|
+
"get_graph_param",
|
|
38
|
+
"get_aliases",
|
|
39
|
+
"VF_KEY",
|
|
40
|
+
"THETA_KEY",
|
|
41
|
+
"VF_PRIMARY",
|
|
42
|
+
"THETA_PRIMARY",
|
|
43
|
+
"DNFR_PRIMARY",
|
|
44
|
+
"EPI_PRIMARY",
|
|
45
|
+
"EPI_KIND_PRIMARY",
|
|
46
|
+
"SI_PRIMARY",
|
|
47
|
+
"dEPI_PRIMARY",
|
|
48
|
+
"D2EPI_PRIMARY",
|
|
49
|
+
"dVF_PRIMARY",
|
|
50
|
+
"D2VF_PRIMARY",
|
|
51
|
+
"dSI_PRIMARY",
|
|
52
|
+
"STATE_STABLE",
|
|
53
|
+
"STATE_TRANSITION",
|
|
54
|
+
"STATE_DISSONANT",
|
|
55
|
+
"CANONICAL_STATE_TOKENS",
|
|
56
|
+
"normalise_state_token",
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
ensure_node_offset_map: Callable[[GraphLike], None] | None
|
|
60
|
+
DEFAULT_SECTIONS: Mapping[str, Mapping[str, TNFRConfigValue]]
|
|
61
|
+
DEFAULTS: Mapping[str, TNFRConfigValue]
|
|
62
|
+
ALIASES: dict[str, tuple[str, ...]]
|
|
63
|
+
VF_KEY: str
|
|
64
|
+
THETA_KEY: str
|
|
65
|
+
VF_PRIMARY: str
|
|
66
|
+
THETA_PRIMARY: str
|
|
67
|
+
DNFR_PRIMARY: str
|
|
68
|
+
EPI_PRIMARY: str
|
|
69
|
+
EPI_KIND_PRIMARY: str
|
|
70
|
+
SI_PRIMARY: str
|
|
71
|
+
dEPI_PRIMARY: str
|
|
72
|
+
D2EPI_PRIMARY: str
|
|
73
|
+
dVF_PRIMARY: str
|
|
74
|
+
D2VF_PRIMARY: str
|
|
75
|
+
dSI_PRIMARY: str
|
|
76
|
+
STATE_STABLE: str
|
|
77
|
+
STATE_TRANSITION: str
|
|
78
|
+
STATE_DISSONANT: str
|
|
79
|
+
CANONICAL_STATE_TOKENS: frozenset[str]
|
|
80
|
+
|
|
81
|
+
def inject_defaults(
|
|
82
|
+
G: GraphLike,
|
|
83
|
+
defaults: Mapping[str, TNFRConfigValue] = ...,
|
|
84
|
+
override: bool = ...,
|
|
85
|
+
) -> None: ...
|
|
86
|
+
def merge_overrides(G: GraphLike, **overrides: TNFRConfigValue) -> None: ...
|
|
87
|
+
def get_param(G: GraphLike, key: str) -> TNFRConfigValue: ...
|
|
88
|
+
def get_graph_param(
|
|
89
|
+
G: GraphLike, key: str, cast: Callable[[object], T] = ...
|
|
90
|
+
) -> T | None: ...
|
|
91
|
+
def get_aliases(key: str) -> tuple[str, ...]: ...
|
|
92
|
+
def normalise_state_token(token: str) -> str: ...
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Shared alias constants for TNFR attributes."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from . import get_aliases
|
|
6
|
+
|
|
7
|
+
ALIAS_VF = get_aliases("VF")
|
|
8
|
+
ALIAS_THETA = get_aliases("THETA")
|
|
9
|
+
ALIAS_DNFR = get_aliases("DNFR")
|
|
10
|
+
ALIAS_EPI = get_aliases("EPI")
|
|
11
|
+
ALIAS_EPI_KIND = get_aliases("EPI_KIND")
|
|
12
|
+
ALIAS_SI = get_aliases("SI")
|
|
13
|
+
ALIAS_DEPI = get_aliases("DEPI")
|
|
14
|
+
ALIAS_D2EPI = get_aliases("D2EPI")
|
|
15
|
+
ALIAS_DVF = get_aliases("DVF")
|
|
16
|
+
ALIAS_D2VF = get_aliases("D2VF")
|
|
17
|
+
ALIAS_DSI = get_aliases("DSI")
|
|
18
|
+
ALIAS_EMISSION_TIMESTAMP = get_aliases("EMISSION_TIMESTAMP")
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"ALIAS_VF",
|
|
22
|
+
"ALIAS_THETA",
|
|
23
|
+
"ALIAS_DNFR",
|
|
24
|
+
"ALIAS_EPI",
|
|
25
|
+
"ALIAS_EPI_KIND",
|
|
26
|
+
"ALIAS_SI",
|
|
27
|
+
"ALIAS_DEPI",
|
|
28
|
+
"ALIAS_D2EPI",
|
|
29
|
+
"ALIAS_DVF",
|
|
30
|
+
"ALIAS_D2VF",
|
|
31
|
+
"ALIAS_DSI",
|
|
32
|
+
"ALIAS_EMISSION_TIMESTAMP",
|
|
33
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
|
|
3
|
+
__all__ = [
|
|
4
|
+
"ALIAS_VF",
|
|
5
|
+
"ALIAS_THETA",
|
|
6
|
+
"ALIAS_DNFR",
|
|
7
|
+
"ALIAS_EPI",
|
|
8
|
+
"ALIAS_EPI_KIND",
|
|
9
|
+
"ALIAS_SI",
|
|
10
|
+
"ALIAS_DEPI",
|
|
11
|
+
"ALIAS_D2EPI",
|
|
12
|
+
"ALIAS_DVF",
|
|
13
|
+
"ALIAS_D2VF",
|
|
14
|
+
"ALIAS_DSI",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
ALIAS_VF: Incomplete
|
|
18
|
+
ALIAS_THETA: Incomplete
|
|
19
|
+
ALIAS_DNFR: Incomplete
|
|
20
|
+
ALIAS_EPI: Incomplete
|
|
21
|
+
ALIAS_EPI_KIND: Incomplete
|
|
22
|
+
ALIAS_SI: Incomplete
|
|
23
|
+
ALIAS_DEPI: Incomplete
|
|
24
|
+
ALIAS_D2EPI: Incomplete
|
|
25
|
+
ALIAS_DVF: Incomplete
|
|
26
|
+
ALIAS_D2VF: Incomplete
|
|
27
|
+
ALIAS_DSI: Incomplete
|
tnfr/constants/init.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Initialization constants."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import math
|
|
6
|
+
from dataclasses import asdict
|
|
7
|
+
|
|
8
|
+
from ..compat.dataclass import dataclass
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass(frozen=True, slots=True)
|
|
12
|
+
class InitDefaults:
|
|
13
|
+
"""Default parameters for node initialisation.
|
|
14
|
+
|
|
15
|
+
The fields are collected into :data:`INIT_DEFAULTS` and may therefore
|
|
16
|
+
appear unused to tools like Vulture.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
INIT_RANDOM_PHASE: bool = True
|
|
20
|
+
INIT_THETA_MIN: float = -math.pi
|
|
21
|
+
INIT_THETA_MAX: float = math.pi
|
|
22
|
+
INIT_VF_MODE: str = "uniform"
|
|
23
|
+
INIT_VF_MIN: float | None = None
|
|
24
|
+
INIT_VF_MAX: float | None = None
|
|
25
|
+
INIT_VF_MEAN: float = 0.5
|
|
26
|
+
INIT_VF_STD: float = 0.15
|
|
27
|
+
INIT_VF_CLAMP_TO_LIMITS: bool = True
|
|
28
|
+
INIT_SI_MIN: float = 0.4
|
|
29
|
+
INIT_SI_MAX: float = 0.7
|
|
30
|
+
INIT_EPI_VALUE: float = 0.0
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
INIT_DEFAULTS = asdict(InitDefaults())
|
tnfr/constants/init.pyi
ADDED
tnfr/constants/metric.py
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Metric constants."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import asdict, field
|
|
6
|
+
from types import MappingProxyType
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from ..compat.dataclass import dataclass
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True, slots=True)
|
|
13
|
+
class MetricDefaults:
|
|
14
|
+
"""Default parameters for metric computation.
|
|
15
|
+
|
|
16
|
+
The fields are gathered into :data:`METRIC_DEFAULTS` and exposed through
|
|
17
|
+
read-only views below, so they may appear unused to static analysis tools.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
PHASE_HISTORY_MAXLEN: int = 50
|
|
21
|
+
STOP_EARLY: dict[str, Any] = field(
|
|
22
|
+
default_factory=lambda: {
|
|
23
|
+
"enabled": False,
|
|
24
|
+
"window": 25,
|
|
25
|
+
"fraction": 0.90,
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
SIGMA: dict[str, Any] = field(
|
|
29
|
+
default_factory=lambda: {
|
|
30
|
+
"enabled": True,
|
|
31
|
+
"weight": "Si", # "Si" | "EPI" | "1"
|
|
32
|
+
"smooth": 0.0, # EMA over the global vector (0=off)
|
|
33
|
+
"history_key": "sigma_global",
|
|
34
|
+
"per_node": False,
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
TRACE: dict[str, Any] = field(
|
|
38
|
+
default_factory=lambda: {
|
|
39
|
+
"enabled": True,
|
|
40
|
+
"verbosity": "debug",
|
|
41
|
+
"history_key": "trace_meta",
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
METRICS: dict[str, Any] = field(
|
|
45
|
+
default_factory=lambda: {
|
|
46
|
+
"enabled": True,
|
|
47
|
+
"save_by_node": True,
|
|
48
|
+
"normalize_series": False,
|
|
49
|
+
"n_jobs": 1,
|
|
50
|
+
"verbosity": "debug",
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
GRAMMAR_CANON: dict[str, Any] = field(
|
|
54
|
+
default_factory=lambda: {
|
|
55
|
+
"enabled": True,
|
|
56
|
+
"zhir_requires_oz_window": 3,
|
|
57
|
+
"zhir_dnfr_min": 0.05,
|
|
58
|
+
"thol_min_len": 2,
|
|
59
|
+
"thol_max_len": 6,
|
|
60
|
+
"thol_close_dnfr": 0.15,
|
|
61
|
+
"si_high": 0.66,
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
COHERENCE: dict[str, Any] = field(
|
|
65
|
+
default_factory=lambda: {
|
|
66
|
+
"enabled": True,
|
|
67
|
+
"scope": "neighbors",
|
|
68
|
+
"weights": {"phase": 0.34, "epi": 0.33, "vf": 0.20, "si": 0.13},
|
|
69
|
+
"self_on_diag": True,
|
|
70
|
+
"store_mode": "sparse",
|
|
71
|
+
"threshold": 0.0,
|
|
72
|
+
"n_jobs": 1,
|
|
73
|
+
"history_key": "W_sparse",
|
|
74
|
+
"Wi_history_key": "W_i",
|
|
75
|
+
"stats_history_key": "W_stats",
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
DIAGNOSIS: dict[str, Any] = field(
|
|
79
|
+
default_factory=lambda: {
|
|
80
|
+
"enabled": True,
|
|
81
|
+
"window": 16,
|
|
82
|
+
"history_key": "nodal_diag",
|
|
83
|
+
"stable": {"Rloc_hi": 0.80, "dnfr_lo": 0.20, "persist": 3},
|
|
84
|
+
"dissonance": {"Rloc_lo": 0.40, "dnfr_hi": 0.50, "persist": 3},
|
|
85
|
+
"transition": {"persist": 2},
|
|
86
|
+
"compute_symmetry": True,
|
|
87
|
+
"include_typology": False,
|
|
88
|
+
"advice": {
|
|
89
|
+
"stable": ["Coherence", "Coupling", "Resonance"],
|
|
90
|
+
"transition": ["Transition", "Resonance", "Self-organisation"],
|
|
91
|
+
"dissonant": ["Silence", "Contraction", "Mutation"],
|
|
92
|
+
},
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
METRIC_DEFAULTS = asdict(MetricDefaults())
|
|
98
|
+
|
|
99
|
+
SIGMA = MappingProxyType(METRIC_DEFAULTS["SIGMA"])
|
|
100
|
+
TRACE = MappingProxyType(METRIC_DEFAULTS["TRACE"])
|
|
101
|
+
METRICS = MappingProxyType(METRIC_DEFAULTS["METRICS"])
|
|
102
|
+
GRAMMAR_CANON = MappingProxyType(METRIC_DEFAULTS["GRAMMAR_CANON"])
|
|
103
|
+
COHERENCE = MappingProxyType(METRIC_DEFAULTS["COHERENCE"])
|
|
104
|
+
DIAGNOSIS = MappingProxyType(METRIC_DEFAULTS["DIAGNOSIS"])
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
__all__: Any
|
|
4
|
+
|
|
5
|
+
def __getattr__(name: str) -> Any: ...
|
|
6
|
+
|
|
7
|
+
COHERENCE: Any
|
|
8
|
+
DIAGNOSIS: Any
|
|
9
|
+
GRAMMAR_CANON: Any
|
|
10
|
+
METRICS: Any
|
|
11
|
+
METRIC_DEFAULTS: Any
|
|
12
|
+
MappingProxyType: Any
|
|
13
|
+
MetricDefaults: Any
|
|
14
|
+
SIGMA: Any
|
|
15
|
+
TRACE: Any
|
|
16
|
+
annotations: Any
|
|
17
|
+
asdict: Any
|
|
18
|
+
dataclass: Any
|
|
19
|
+
field: Any
|
tnfr/core/__init__.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Core architectural components for TNFR engine.
|
|
2
|
+
|
|
3
|
+
This package contains the foundational interfaces and dependency injection
|
|
4
|
+
infrastructure that enable separation of responsibilities across the TNFR
|
|
5
|
+
engine layers.
|
|
6
|
+
|
|
7
|
+
Public API
|
|
8
|
+
----------
|
|
9
|
+
OperatorRegistry, ValidationService, DynamicsEngine, TelemetryCollector
|
|
10
|
+
Protocol interfaces defining contracts for each architectural layer.
|
|
11
|
+
TNFRContainer
|
|
12
|
+
Dependency injection container for configuring engine components.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from .container import TNFRContainer
|
|
18
|
+
from .interfaces import (
|
|
19
|
+
DynamicsEngine,
|
|
20
|
+
OperatorRegistry,
|
|
21
|
+
TelemetryCollector,
|
|
22
|
+
TraceContext,
|
|
23
|
+
ValidationService,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
__all__ = (
|
|
27
|
+
"OperatorRegistry",
|
|
28
|
+
"ValidationService",
|
|
29
|
+
"DynamicsEngine",
|
|
30
|
+
"TelemetryCollector",
|
|
31
|
+
"TraceContext",
|
|
32
|
+
"TNFRContainer",
|
|
33
|
+
)
|
tnfr/core/container.py
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"""Dependency injection container for TNFR engine components.
|
|
2
|
+
|
|
3
|
+
This module provides a lightweight dependency injection container that allows
|
|
4
|
+
configuring and resolving engine components (validators, registries, dynamics
|
|
5
|
+
engines, telemetry collectors) without hard-coding implementations.
|
|
6
|
+
|
|
7
|
+
The container supports both singleton and factory registrations, enabling
|
|
8
|
+
flexible composition of TNFR services while maintaining clean separation of
|
|
9
|
+
concerns.
|
|
10
|
+
|
|
11
|
+
Examples
|
|
12
|
+
--------
|
|
13
|
+
Create a container with default implementations:
|
|
14
|
+
|
|
15
|
+
>>> container = TNFRContainer.create_default()
|
|
16
|
+
>>> validator = container.get(ValidationService)
|
|
17
|
+
>>> validator.validate_sequence(["emission", "coherence"])
|
|
18
|
+
|
|
19
|
+
Register custom implementations:
|
|
20
|
+
|
|
21
|
+
>>> container = TNFRContainer()
|
|
22
|
+
>>> container.register_singleton(ValidationService, CustomValidator())
|
|
23
|
+
>>> validator = container.get(ValidationService)
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
from typing import Any, Callable, TypeVar
|
|
29
|
+
|
|
30
|
+
T = TypeVar("T")
|
|
31
|
+
|
|
32
|
+
__all__ = ("TNFRContainer",)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class TNFRContainer:
|
|
36
|
+
"""Dependency injection container for TNFR engine components.
|
|
37
|
+
|
|
38
|
+
The container manages the lifecycle of engine services, allowing
|
|
39
|
+
registration of singletons (reused instances) or factories (fresh
|
|
40
|
+
instances on each request). This enables flexible configuration without
|
|
41
|
+
coupling client code to specific implementations.
|
|
42
|
+
|
|
43
|
+
Examples
|
|
44
|
+
--------
|
|
45
|
+
Basic usage with singleton registration:
|
|
46
|
+
|
|
47
|
+
>>> from tnfr.core.interfaces import ValidationService
|
|
48
|
+
>>> class MyValidator:
|
|
49
|
+
... def validate_sequence(self, seq):
|
|
50
|
+
... pass
|
|
51
|
+
... def validate_graph_state(self, graph):
|
|
52
|
+
... pass
|
|
53
|
+
>>> container = TNFRContainer()
|
|
54
|
+
>>> container.register_singleton(ValidationService, MyValidator())
|
|
55
|
+
>>> validator = container.get(ValidationService)
|
|
56
|
+
|
|
57
|
+
Factory registration for per-request instances:
|
|
58
|
+
|
|
59
|
+
>>> container.register_factory(ValidationService, MyValidator)
|
|
60
|
+
>>> v1 = container.get(ValidationService)
|
|
61
|
+
>>> v2 = container.get(ValidationService)
|
|
62
|
+
>>> v1 is not v2 # Different instances
|
|
63
|
+
True
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
def __init__(self) -> None:
|
|
67
|
+
"""Initialize an empty container."""
|
|
68
|
+
self._instances: dict[Any, Any] = {}
|
|
69
|
+
self._factories: dict[Any, Callable[[], Any]] = {}
|
|
70
|
+
self._is_singleton: dict[Any, bool] = {} # Track singleton status
|
|
71
|
+
|
|
72
|
+
def register_singleton(self, interface: type[T], implementation: T) -> None:
|
|
73
|
+
"""Register an implementation as a singleton.
|
|
74
|
+
|
|
75
|
+
The provided instance will be cached and returned for all subsequent
|
|
76
|
+
requests for this interface.
|
|
77
|
+
|
|
78
|
+
Parameters
|
|
79
|
+
----------
|
|
80
|
+
interface : type
|
|
81
|
+
The interface or abstract type to register against.
|
|
82
|
+
implementation : T
|
|
83
|
+
The concrete instance to return for this interface.
|
|
84
|
+
|
|
85
|
+
Examples
|
|
86
|
+
--------
|
|
87
|
+
>>> container = TNFRContainer()
|
|
88
|
+
>>> container.register_singleton(ValidationService, MyValidator())
|
|
89
|
+
"""
|
|
90
|
+
# Store as a factory that returns the same instance
|
|
91
|
+
self._factories[interface] = lambda: implementation
|
|
92
|
+
self._is_singleton[interface] = True
|
|
93
|
+
|
|
94
|
+
def register_factory(
|
|
95
|
+
self, interface: type[T], factory_func: Callable[[], T]
|
|
96
|
+
) -> None:
|
|
97
|
+
"""Register a factory function for creating instances.
|
|
98
|
+
|
|
99
|
+
The factory will be called each time the interface is requested,
|
|
100
|
+
allowing fresh instances or cached instances depending on the
|
|
101
|
+
factory implementation.
|
|
102
|
+
|
|
103
|
+
Parameters
|
|
104
|
+
----------
|
|
105
|
+
interface : type
|
|
106
|
+
The interface or abstract type to register against.
|
|
107
|
+
factory_func : callable
|
|
108
|
+
Function that creates and returns an instance of the interface.
|
|
109
|
+
|
|
110
|
+
Examples
|
|
111
|
+
--------
|
|
112
|
+
>>> container = TNFRContainer()
|
|
113
|
+
>>> container.register_factory(ValidationService, MyValidator)
|
|
114
|
+
"""
|
|
115
|
+
self._factories[interface] = factory_func
|
|
116
|
+
self._is_singleton[interface] = False
|
|
117
|
+
|
|
118
|
+
def get(self, interface: type[T]) -> T:
|
|
119
|
+
"""Retrieve an instance implementing the specified interface.
|
|
120
|
+
|
|
121
|
+
For singleton registrations, returns the cached instance. For factory
|
|
122
|
+
registrations, calls the factory to produce an instance.
|
|
123
|
+
|
|
124
|
+
Parameters
|
|
125
|
+
----------
|
|
126
|
+
interface : type
|
|
127
|
+
The interface type to resolve.
|
|
128
|
+
|
|
129
|
+
Returns
|
|
130
|
+
-------
|
|
131
|
+
T
|
|
132
|
+
Instance implementing the interface.
|
|
133
|
+
|
|
134
|
+
Raises
|
|
135
|
+
------
|
|
136
|
+
ValueError
|
|
137
|
+
When no factory is registered for the interface.
|
|
138
|
+
|
|
139
|
+
Examples
|
|
140
|
+
--------
|
|
141
|
+
>>> container = TNFRContainer()
|
|
142
|
+
>>> container.register_singleton(ValidationService, MyValidator())
|
|
143
|
+
>>> validator = container.get(ValidationService)
|
|
144
|
+
"""
|
|
145
|
+
# Check if we have a cached singleton instance
|
|
146
|
+
if interface in self._instances:
|
|
147
|
+
return self._instances[interface]
|
|
148
|
+
|
|
149
|
+
# Check if we have a factory registered
|
|
150
|
+
if interface not in self._factories:
|
|
151
|
+
raise ValueError(
|
|
152
|
+
f"No factory registered for {interface}. "
|
|
153
|
+
f"Use register_singleton() or register_factory() first."
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
# Call factory
|
|
157
|
+
instance = self._factories[interface]()
|
|
158
|
+
|
|
159
|
+
# Cache only if registered as singleton
|
|
160
|
+
if self._is_singleton.get(interface, False):
|
|
161
|
+
self._instances[interface] = instance
|
|
162
|
+
|
|
163
|
+
return instance
|
|
164
|
+
|
|
165
|
+
def has(self, interface: type) -> bool:
|
|
166
|
+
"""Check if an interface has a registered factory.
|
|
167
|
+
|
|
168
|
+
Parameters
|
|
169
|
+
----------
|
|
170
|
+
interface : type
|
|
171
|
+
The interface type to check.
|
|
172
|
+
|
|
173
|
+
Returns
|
|
174
|
+
-------
|
|
175
|
+
bool
|
|
176
|
+
True if a factory is registered for this interface.
|
|
177
|
+
"""
|
|
178
|
+
return interface in self._factories
|
|
179
|
+
|
|
180
|
+
@classmethod
|
|
181
|
+
def create_default(cls) -> TNFRContainer:
|
|
182
|
+
"""Create a container with default TNFR implementations.
|
|
183
|
+
|
|
184
|
+
This factory method registers the standard implementations of all
|
|
185
|
+
core interfaces, making it easy to get started with the TNFR engine
|
|
186
|
+
without manual configuration.
|
|
187
|
+
|
|
188
|
+
Returns
|
|
189
|
+
-------
|
|
190
|
+
TNFRContainer
|
|
191
|
+
Container configured with default implementations.
|
|
192
|
+
|
|
193
|
+
Examples
|
|
194
|
+
--------
|
|
195
|
+
>>> container = TNFRContainer.create_default()
|
|
196
|
+
>>> validator = container.get(ValidationService)
|
|
197
|
+
>>> # Use validator with default implementation
|
|
198
|
+
|
|
199
|
+
Notes
|
|
200
|
+
-----
|
|
201
|
+
The default implementations are imported lazily to avoid circular
|
|
202
|
+
dependencies. Custom implementations can be registered after creation
|
|
203
|
+
to override defaults.
|
|
204
|
+
"""
|
|
205
|
+
from .default_implementations import (
|
|
206
|
+
DefaultDynamicsEngine,
|
|
207
|
+
DefaultOperatorRegistry,
|
|
208
|
+
DefaultTelemetryCollector,
|
|
209
|
+
DefaultValidationService,
|
|
210
|
+
)
|
|
211
|
+
from .interfaces import (
|
|
212
|
+
DynamicsEngine,
|
|
213
|
+
OperatorRegistry,
|
|
214
|
+
TelemetryCollector,
|
|
215
|
+
ValidationService,
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
container = cls()
|
|
219
|
+
|
|
220
|
+
# Register default implementations as singletons
|
|
221
|
+
container.register_singleton(ValidationService, DefaultValidationService())
|
|
222
|
+
container.register_singleton(OperatorRegistry, DefaultOperatorRegistry())
|
|
223
|
+
container.register_singleton(DynamicsEngine, DefaultDynamicsEngine())
|
|
224
|
+
container.register_singleton(TelemetryCollector, DefaultTelemetryCollector())
|
|
225
|
+
|
|
226
|
+
return container
|