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,354 @@
|
|
|
1
|
+
"""Physics-based derivation of canonical start/end operators from TNFR principles.
|
|
2
|
+
|
|
3
|
+
This module derives which operators can validly start or end sequences based on
|
|
4
|
+
the fundamental TNFR nodal equation and structural coherence principles, rather
|
|
5
|
+
than using arbitrary static lists.
|
|
6
|
+
|
|
7
|
+
Core TNFR Equation
|
|
8
|
+
------------------
|
|
9
|
+
∂EPI/∂t = νf · ΔNFR(t)
|
|
10
|
+
|
|
11
|
+
Where:
|
|
12
|
+
- EPI: Primary Information Structure (coherent form)
|
|
13
|
+
- νf: Structural frequency (reorganization rate, Hz_str)
|
|
14
|
+
- ΔNFR: Internal reorganization operator/gradient
|
|
15
|
+
|
|
16
|
+
Node Activation Conditions
|
|
17
|
+
---------------------------
|
|
18
|
+
A node activates (exists structurally) when:
|
|
19
|
+
1. νf > 0 (has reorganization capacity)
|
|
20
|
+
2. ΔNFR ≠ 0 (has structural pressure)
|
|
21
|
+
3. EPI ≥ ε (minimum coherence threshold)
|
|
22
|
+
|
|
23
|
+
Node Termination Conditions
|
|
24
|
+
----------------------------
|
|
25
|
+
A sequence terminates coherently when:
|
|
26
|
+
1. ∂EPI/∂t → 0 (reorganization stabilizes)
|
|
27
|
+
2. EPI remains stable (coherence sustained)
|
|
28
|
+
3. No open transitions (operational closure)
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
from __future__ import annotations
|
|
32
|
+
|
|
33
|
+
from typing import FrozenSet
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
"derive_start_operators_from_physics",
|
|
37
|
+
"derive_end_operators_from_physics",
|
|
38
|
+
"can_generate_epi_from_null",
|
|
39
|
+
"can_activate_latent_epi",
|
|
40
|
+
"can_stabilize_reorganization",
|
|
41
|
+
"achieves_operational_closure",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def can_generate_epi_from_null(operator: str) -> bool:
|
|
46
|
+
"""Check if operator can generate EPI from null/zero state.
|
|
47
|
+
|
|
48
|
+
According to TNFR physics, an operator can generate EPI from nothing
|
|
49
|
+
when it can:
|
|
50
|
+
1. Create positive νf from νf=0 (initiate reorganization capacity)
|
|
51
|
+
2. Generate positive ΔNFR from equilibrium (create structural pressure)
|
|
52
|
+
|
|
53
|
+
Parameters
|
|
54
|
+
----------
|
|
55
|
+
operator : str
|
|
56
|
+
Canonical operator name (e.g., "emission", "reception")
|
|
57
|
+
|
|
58
|
+
Returns
|
|
59
|
+
-------
|
|
60
|
+
bool
|
|
61
|
+
True if operator can create EPI from null state
|
|
62
|
+
|
|
63
|
+
Notes
|
|
64
|
+
-----
|
|
65
|
+
Physical Rationale:
|
|
66
|
+
|
|
67
|
+
**EMISSION (AL)**: ✓ Can generate from null
|
|
68
|
+
- Creates outward coherence pulse
|
|
69
|
+
- Generates positive νf (activates reorganization)
|
|
70
|
+
- Creates positive ΔNFR (initiates structural pressure)
|
|
71
|
+
- From ∂EPI/∂t = νf · ΔNFR: can produce ∂EPI/∂t > 0 from zero
|
|
72
|
+
|
|
73
|
+
**RECEPTION (EN)**: ✗ Cannot generate from null
|
|
74
|
+
- Requires external coherence to capture
|
|
75
|
+
- Needs existing EPI > 0 to anchor incoming energy
|
|
76
|
+
- Cannot create structure from absolute void
|
|
77
|
+
"""
|
|
78
|
+
# Physical generators: create EPI via field emission
|
|
79
|
+
return operator == "emission"
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def can_activate_latent_epi(operator: str) -> bool:
|
|
83
|
+
"""Check if operator can activate pre-existing latent EPI.
|
|
84
|
+
|
|
85
|
+
Some operators can't create EPI from absolute zero but can activate
|
|
86
|
+
structure that already exists in dormant/latent form (νf ≈ 0, but EPI > 0).
|
|
87
|
+
|
|
88
|
+
Parameters
|
|
89
|
+
----------
|
|
90
|
+
operator : str
|
|
91
|
+
Canonical operator name
|
|
92
|
+
|
|
93
|
+
Returns
|
|
94
|
+
-------
|
|
95
|
+
bool
|
|
96
|
+
True if operator can activate latent structure
|
|
97
|
+
|
|
98
|
+
Notes
|
|
99
|
+
-----
|
|
100
|
+
Physical Rationale:
|
|
101
|
+
|
|
102
|
+
**RECURSIVITY (REMESH)**: ✓ Can activate latent
|
|
103
|
+
- Echoes/replicates existing patterns
|
|
104
|
+
- Requires source EPI > 0 to replicate
|
|
105
|
+
- Increases νf of dormant structure
|
|
106
|
+
- Fractality: can activate nested EPIs
|
|
107
|
+
|
|
108
|
+
**TRANSITION (NAV)**: ✓ Can activate latent
|
|
109
|
+
- Moves node from one phase to another
|
|
110
|
+
- Can transition from dormant (νf ≈ 0) to active (νf > 0)
|
|
111
|
+
- Requires EPI > 0 in target phase
|
|
112
|
+
"""
|
|
113
|
+
return operator in {"recursivity", "transition"}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def can_stabilize_reorganization(operator: str) -> bool:
|
|
117
|
+
"""Check if operator can reduce ∂EPI/∂t → 0 (stabilize evolution).
|
|
118
|
+
|
|
119
|
+
Terminal operators must reduce the rate of structural change to zero
|
|
120
|
+
or near-zero, achieving stability.
|
|
121
|
+
|
|
122
|
+
Parameters
|
|
123
|
+
----------
|
|
124
|
+
operator : str
|
|
125
|
+
Canonical operator name
|
|
126
|
+
|
|
127
|
+
Returns
|
|
128
|
+
-------
|
|
129
|
+
bool
|
|
130
|
+
True if operator achieves ∂EPI/∂t → 0
|
|
131
|
+
|
|
132
|
+
Notes
|
|
133
|
+
-----
|
|
134
|
+
Physical Rationale:
|
|
135
|
+
|
|
136
|
+
**SILENCE (SHA)**: ✓ Achieves ∂EPI/∂t → 0
|
|
137
|
+
- Reduces νf → νf_min ≈ 0
|
|
138
|
+
- From ∂EPI/∂t = νf · ΔNFR: forces ∂EPI/∂t → 0
|
|
139
|
+
- Preserves EPI intact (memory/latency)
|
|
140
|
+
- Canonical structural silence
|
|
141
|
+
|
|
142
|
+
**COHERENCE (IL)**: ✗ Not sufficient alone
|
|
143
|
+
- Reduces |ΔNFR| (decreases gradient)
|
|
144
|
+
- But doesn't guarantee ∂EPI/∂t → 0
|
|
145
|
+
- EPI can still evolve slowly
|
|
146
|
+
- Best as intermediate, not terminal
|
|
147
|
+
"""
|
|
148
|
+
return operator == "silence"
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def achieves_operational_closure(operator: str) -> bool:
|
|
152
|
+
"""Check if operator provides operational closure (completes cycle).
|
|
153
|
+
|
|
154
|
+
Some operators naturally close structural sequences by establishing
|
|
155
|
+
a complete operational cycle or handing off to a stable successor state.
|
|
156
|
+
|
|
157
|
+
Parameters
|
|
158
|
+
----------
|
|
159
|
+
operator : str
|
|
160
|
+
Canonical operator name
|
|
161
|
+
|
|
162
|
+
Returns
|
|
163
|
+
-------
|
|
164
|
+
bool
|
|
165
|
+
True if operator achieves operational closure
|
|
166
|
+
|
|
167
|
+
Notes
|
|
168
|
+
-----
|
|
169
|
+
Physical Rationale:
|
|
170
|
+
|
|
171
|
+
**TRANSITION (NAV)**: ✓ Achieves closure
|
|
172
|
+
- Hands off to next phase/regime
|
|
173
|
+
- Completes current structural cycle
|
|
174
|
+
- Opens new cycle in target phase
|
|
175
|
+
- Natural boundary operator
|
|
176
|
+
|
|
177
|
+
**RECURSIVITY (REMESH)**: ✓ Achieves closure
|
|
178
|
+
- Fractal echo creates self-similar closure
|
|
179
|
+
- Nested EPI structure naturally terminates
|
|
180
|
+
- Operational fractality preserves identity
|
|
181
|
+
|
|
182
|
+
**DISSONANCE (OZ)**: ? Questionable closure
|
|
183
|
+
- Generates high ΔNFR (instability)
|
|
184
|
+
- Can be terminal in specific contexts (postponed conflict)
|
|
185
|
+
- But typically leads to further transformation
|
|
186
|
+
- Controversial as general terminator
|
|
187
|
+
"""
|
|
188
|
+
# Operators that naturally close cycles
|
|
189
|
+
closures = {"transition", "recursivity"}
|
|
190
|
+
|
|
191
|
+
# DISSONANCE is currently in VALID_END_OPERATORS but questionable
|
|
192
|
+
# Include it for backward compatibility but flag for review
|
|
193
|
+
# Physical justification: postponed conflict, contained tension
|
|
194
|
+
questionable = {"dissonance"}
|
|
195
|
+
|
|
196
|
+
return operator in closures or operator in questionable
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def derive_start_operators_from_physics() -> FrozenSet[str]:
|
|
200
|
+
"""Derive valid start operators from TNFR physical principles.
|
|
201
|
+
|
|
202
|
+
A sequence can start with an operator if it satisfies at least one:
|
|
203
|
+
1. Can generate EPI from null state (generative capacity)
|
|
204
|
+
2. Can activate latent/dormant EPI (activation capacity)
|
|
205
|
+
|
|
206
|
+
Returns
|
|
207
|
+
-------
|
|
208
|
+
frozenset[str]
|
|
209
|
+
Set of canonical operator names that can validly start sequences
|
|
210
|
+
|
|
211
|
+
Examples
|
|
212
|
+
--------
|
|
213
|
+
>>> ops = derive_start_operators_from_physics()
|
|
214
|
+
>>> "emission" in ops
|
|
215
|
+
True
|
|
216
|
+
>>> "recursivity" in ops
|
|
217
|
+
True
|
|
218
|
+
>>> "reception" in ops
|
|
219
|
+
False
|
|
220
|
+
|
|
221
|
+
Notes
|
|
222
|
+
-----
|
|
223
|
+
**Derived Start Operators:**
|
|
224
|
+
|
|
225
|
+
1. **emission** - EPI generator
|
|
226
|
+
- Creates EPI from null via field emission
|
|
227
|
+
- Generates νf > 0 and ΔNFR > 0
|
|
228
|
+
- Physical: outward coherence pulse
|
|
229
|
+
|
|
230
|
+
2. **recursivity** - EPI activator
|
|
231
|
+
- Replicates existing/latent patterns
|
|
232
|
+
- Echoes structure across scales
|
|
233
|
+
- Physical: fractal activation
|
|
234
|
+
|
|
235
|
+
3. **transition** - Phase activator
|
|
236
|
+
- Activates node from different phase
|
|
237
|
+
- Moves from dormant to active
|
|
238
|
+
- Physical: regime hand-off
|
|
239
|
+
|
|
240
|
+
**Why Others Cannot Start:**
|
|
241
|
+
|
|
242
|
+
- **reception**: Needs external source + existing EPI to anchor
|
|
243
|
+
- **coherence**: Stabilizes existing form, cannot create from null
|
|
244
|
+
- **dissonance**: Perturbs existing structure, needs EPI > 0
|
|
245
|
+
- **coupling**: Links existing nodes, requires both nodes active
|
|
246
|
+
- **resonance**: Amplifies existing coherence, needs EPI > 0
|
|
247
|
+
- **silence**: Suspends reorganization, needs active νf to suspend
|
|
248
|
+
- **expansion/contraction**: Transform existing structure dimensionally
|
|
249
|
+
- **self_organization**: Creates sub-EPIs from existing structure
|
|
250
|
+
- **mutation**: Transforms across thresholds, needs base structure
|
|
251
|
+
|
|
252
|
+
See Also
|
|
253
|
+
--------
|
|
254
|
+
can_generate_epi_from_null : Check generative capacity
|
|
255
|
+
can_activate_latent_epi : Check activation capacity
|
|
256
|
+
"""
|
|
257
|
+
# Import here to avoid circular dependency
|
|
258
|
+
from .operator_names import (
|
|
259
|
+
EMISSION,
|
|
260
|
+
RECURSIVITY,
|
|
261
|
+
TRANSITION,
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
generators = {EMISSION} # Can create EPI from null
|
|
265
|
+
activators = {RECURSIVITY, TRANSITION} # Can activate latent EPI
|
|
266
|
+
|
|
267
|
+
# A valid start operator must be either a generator or activator
|
|
268
|
+
valid_starts = generators | activators
|
|
269
|
+
|
|
270
|
+
return frozenset(valid_starts)
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def derive_end_operators_from_physics() -> FrozenSet[str]:
|
|
274
|
+
"""Derive valid end operators from TNFR physical principles.
|
|
275
|
+
|
|
276
|
+
A sequence can end with an operator if it satisfies at least one:
|
|
277
|
+
1. Stabilizes reorganization (∂EPI/∂t → 0)
|
|
278
|
+
2. Achieves operational closure (completes cycle)
|
|
279
|
+
|
|
280
|
+
Returns
|
|
281
|
+
-------
|
|
282
|
+
frozenset[str]
|
|
283
|
+
Set of canonical operator names that can validly end sequences
|
|
284
|
+
|
|
285
|
+
Examples
|
|
286
|
+
--------
|
|
287
|
+
>>> ops = derive_end_operators_from_physics()
|
|
288
|
+
>>> "silence" in ops
|
|
289
|
+
True
|
|
290
|
+
>>> "transition" in ops
|
|
291
|
+
True
|
|
292
|
+
>>> "emission" in ops
|
|
293
|
+
False
|
|
294
|
+
|
|
295
|
+
Notes
|
|
296
|
+
-----
|
|
297
|
+
**Derived End Operators:**
|
|
298
|
+
|
|
299
|
+
1. **silence** - Stabilizer
|
|
300
|
+
- Forces ∂EPI/∂t → 0 via νf → 0
|
|
301
|
+
- Preserves EPI intact
|
|
302
|
+
- Physical: structural suspension
|
|
303
|
+
|
|
304
|
+
2. **transition** - Closure
|
|
305
|
+
- Hands off to next phase
|
|
306
|
+
- Completes current cycle
|
|
307
|
+
- Physical: regime boundary
|
|
308
|
+
|
|
309
|
+
3. **recursivity** - Fractal closure
|
|
310
|
+
- Self-similar pattern completion
|
|
311
|
+
- Nested EPI termination
|
|
312
|
+
- Physical: operational fractality
|
|
313
|
+
|
|
314
|
+
4. **dissonance** - Questionable closure
|
|
315
|
+
- High ΔNFR state (tension)
|
|
316
|
+
- Can represent postponed conflict
|
|
317
|
+
- Physical: contained instability
|
|
318
|
+
- Included for backward compatibility
|
|
319
|
+
|
|
320
|
+
**Why Others Cannot End:**
|
|
321
|
+
|
|
322
|
+
- **emission**: Generates activation (∂EPI/∂t > 0), not closure
|
|
323
|
+
- **reception**: Captures input (ongoing process)
|
|
324
|
+
- **coherence**: Reduces ΔNFR but doesn't force ∂EPI/∂t = 0
|
|
325
|
+
- **coupling**: Creates links (ongoing connection)
|
|
326
|
+
- **resonance**: Amplifies coherence (active propagation)
|
|
327
|
+
- **expansion**: Increases dimensionality (active growth)
|
|
328
|
+
- **contraction**: Concentrates trajectories (active compression)
|
|
329
|
+
- **self_organization**: Creates cascades (ongoing emergence)
|
|
330
|
+
- **mutation**: Crosses thresholds (active transformation)
|
|
331
|
+
|
|
332
|
+
See Also
|
|
333
|
+
--------
|
|
334
|
+
can_stabilize_reorganization : Check stabilization capacity
|
|
335
|
+
achieves_operational_closure : Check closure capacity
|
|
336
|
+
"""
|
|
337
|
+
# Import here to avoid circular dependency
|
|
338
|
+
from .operator_names import (
|
|
339
|
+
SILENCE,
|
|
340
|
+
TRANSITION,
|
|
341
|
+
RECURSIVITY,
|
|
342
|
+
DISSONANCE,
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
stabilizers = {SILENCE} # Forces ∂EPI/∂t → 0
|
|
346
|
+
closures = {TRANSITION, RECURSIVITY} # Completes operational cycles
|
|
347
|
+
|
|
348
|
+
# DISSONANCE is questionable but included for backward compatibility
|
|
349
|
+
# Represents postponed conflict / contained tension patterns
|
|
350
|
+
questionable = {DISSONANCE}
|
|
351
|
+
|
|
352
|
+
valid_ends = stabilizers | closures | questionable
|
|
353
|
+
|
|
354
|
+
return frozenset(valid_ends)
|
tnfr/config/presets.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Predefined TNFR configuration sequences.
|
|
2
|
+
|
|
3
|
+
Only the canonical English preset identifiers are recognised.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from ..execution import (
|
|
9
|
+
CANONICAL_PRESET_NAME,
|
|
10
|
+
CANONICAL_PROGRAM_TOKENS,
|
|
11
|
+
block,
|
|
12
|
+
seq,
|
|
13
|
+
wait,
|
|
14
|
+
)
|
|
15
|
+
from ..types import Glyph, PresetTokens
|
|
16
|
+
|
|
17
|
+
__all__ = (
|
|
18
|
+
"get_preset",
|
|
19
|
+
"PREFERRED_PRESET_NAMES",
|
|
20
|
+
"legacy_preset_guidance",
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
_PRIMARY_PRESETS: dict[str, PresetTokens] = {
|
|
24
|
+
"resonant_bootstrap": seq(
|
|
25
|
+
Glyph.AL,
|
|
26
|
+
Glyph.EN,
|
|
27
|
+
Glyph.IL,
|
|
28
|
+
Glyph.RA,
|
|
29
|
+
Glyph.VAL,
|
|
30
|
+
Glyph.UM,
|
|
31
|
+
wait(3),
|
|
32
|
+
Glyph.SHA,
|
|
33
|
+
),
|
|
34
|
+
"contained_mutation": seq(
|
|
35
|
+
Glyph.AL,
|
|
36
|
+
Glyph.EN,
|
|
37
|
+
block(Glyph.OZ, Glyph.ZHIR, Glyph.IL, repeat=2),
|
|
38
|
+
Glyph.RA,
|
|
39
|
+
Glyph.SHA,
|
|
40
|
+
),
|
|
41
|
+
"coupling_exploration": seq(
|
|
42
|
+
Glyph.AL,
|
|
43
|
+
Glyph.EN,
|
|
44
|
+
Glyph.IL,
|
|
45
|
+
Glyph.VAL,
|
|
46
|
+
Glyph.UM,
|
|
47
|
+
block(Glyph.OZ, Glyph.NAV, Glyph.IL, repeat=1),
|
|
48
|
+
Glyph.RA,
|
|
49
|
+
Glyph.SHA,
|
|
50
|
+
),
|
|
51
|
+
"fractal_expand": seq(
|
|
52
|
+
block(Glyph.THOL, Glyph.VAL, Glyph.UM, repeat=2, close=Glyph.NUL),
|
|
53
|
+
Glyph.RA,
|
|
54
|
+
),
|
|
55
|
+
"fractal_contract": seq(
|
|
56
|
+
block(Glyph.THOL, Glyph.NUL, Glyph.UM, repeat=2, close=Glyph.SHA),
|
|
57
|
+
Glyph.RA,
|
|
58
|
+
),
|
|
59
|
+
CANONICAL_PRESET_NAME: list(CANONICAL_PROGRAM_TOKENS),
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
PREFERRED_PRESET_NAMES: tuple[str, ...] = tuple(_PRIMARY_PRESETS.keys())
|
|
63
|
+
|
|
64
|
+
_PRESETS: dict[str, PresetTokens] = {**_PRIMARY_PRESETS}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def legacy_preset_guidance(name: str) -> str | None:
|
|
68
|
+
"""Return CLI guidance for preset lookups.
|
|
69
|
+
|
|
70
|
+
Legacy aliases were removed; the function now always returns ``None``.
|
|
71
|
+
``name`` is accepted to preserve the public helper signature.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
return None
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def get_preset(name: str) -> PresetTokens:
|
|
78
|
+
"""Return the preset token sequence identified by ``name``."""
|
|
79
|
+
|
|
80
|
+
try:
|
|
81
|
+
return _PRESETS[name]
|
|
82
|
+
except KeyError:
|
|
83
|
+
raise KeyError(f"Preset not found: {name}") from None
|