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,254 @@
|
|
|
1
|
+
"""Canonical operator name constants and physics-derived operator sets.
|
|
2
|
+
|
|
3
|
+
This module defines operator names and derives valid start/end operator sets
|
|
4
|
+
from TNFR physical principles rather than arbitrary lists.
|
|
5
|
+
|
|
6
|
+
Physics-Based Derivation
|
|
7
|
+
------------------------
|
|
8
|
+
The sets VALID_START_OPERATORS and VALID_END_OPERATORS are derived from the
|
|
9
|
+
fundamental TNFR nodal equation:
|
|
10
|
+
|
|
11
|
+
∂EPI/∂t = νf · ΔNFR(t)
|
|
12
|
+
|
|
13
|
+
Where:
|
|
14
|
+
- EPI: Primary Information Structure (coherent form)
|
|
15
|
+
- νf: Structural frequency (reorganization rate, Hz_str)
|
|
16
|
+
- ΔNFR: Internal reorganization operator/gradient
|
|
17
|
+
|
|
18
|
+
Start Operators (Activation)
|
|
19
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
20
|
+
An operator can START a sequence if it can either:
|
|
21
|
+
|
|
22
|
+
1. **Generate EPI from null state** (νf=0, EPI=0):
|
|
23
|
+
- emission: Creates outward coherence pulse, generates νf > 0 and ΔNFR > 0
|
|
24
|
+
|
|
25
|
+
2. **Activate latent EPI** (νf≈0, but EPI>0):
|
|
26
|
+
- recursivity: Replicates/echoes existing patterns across scales
|
|
27
|
+
- transition: Activates node from another phase/regime
|
|
28
|
+
|
|
29
|
+
Physical justification: Only operators that can create or activate structural
|
|
30
|
+
capacity (νf > 0) from dormant/null states can initiate reorganization.
|
|
31
|
+
|
|
32
|
+
End Operators (Closure)
|
|
33
|
+
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
34
|
+
An operator can END a sequence if it can either:
|
|
35
|
+
|
|
36
|
+
1. **Stabilize reorganization** (∂EPI/∂t → 0):
|
|
37
|
+
- silence: Forces νf → 0, causing ∂EPI/∂t → 0 while preserving EPI
|
|
38
|
+
|
|
39
|
+
2. **Achieve operational closure**:
|
|
40
|
+
- transition: Hands off to next phase (completes current cycle)
|
|
41
|
+
- recursivity: Fractal echo creates self-similar closure
|
|
42
|
+
- dissonance: Postponed conflict / contained tension (questionable)
|
|
43
|
+
|
|
44
|
+
Physical justification: Terminal operators must either freeze evolution
|
|
45
|
+
(νf → 0) or complete an operational cycle with clear boundary.
|
|
46
|
+
|
|
47
|
+
For detailed physics derivation logic, see:
|
|
48
|
+
tnfr.config.physics_derivation
|
|
49
|
+
|
|
50
|
+
References
|
|
51
|
+
----------
|
|
52
|
+
- TNFR.pdf: Section 2.1 (Nodal Equation)
|
|
53
|
+
- AGENTS.md: Section 3 (Canonical Invariants)
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
from __future__ import annotations
|
|
57
|
+
|
|
58
|
+
from typing import Any
|
|
59
|
+
|
|
60
|
+
# Canonical operator identifiers (English tokens)
|
|
61
|
+
EMISSION = "emission"
|
|
62
|
+
RECEPTION = "reception"
|
|
63
|
+
COHERENCE = "coherence"
|
|
64
|
+
DISSONANCE = "dissonance"
|
|
65
|
+
COUPLING = "coupling"
|
|
66
|
+
RESONANCE = "resonance"
|
|
67
|
+
SILENCE = "silence"
|
|
68
|
+
EXPANSION = "expansion"
|
|
69
|
+
CONTRACTION = "contraction"
|
|
70
|
+
SELF_ORGANIZATION = "self_organization"
|
|
71
|
+
MUTATION = "mutation"
|
|
72
|
+
TRANSITION = "transition"
|
|
73
|
+
RECURSIVITY = "recursivity"
|
|
74
|
+
|
|
75
|
+
# Canonical collections -------------------------------------------------------
|
|
76
|
+
|
|
77
|
+
CANONICAL_OPERATOR_NAMES = frozenset(
|
|
78
|
+
{
|
|
79
|
+
EMISSION,
|
|
80
|
+
RECEPTION,
|
|
81
|
+
COHERENCE,
|
|
82
|
+
DISSONANCE,
|
|
83
|
+
COUPLING,
|
|
84
|
+
RESONANCE,
|
|
85
|
+
SILENCE,
|
|
86
|
+
EXPANSION,
|
|
87
|
+
CONTRACTION,
|
|
88
|
+
SELF_ORGANIZATION,
|
|
89
|
+
MUTATION,
|
|
90
|
+
TRANSITION,
|
|
91
|
+
RECURSIVITY,
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
ALL_OPERATOR_NAMES = CANONICAL_OPERATOR_NAMES
|
|
96
|
+
ENGLISH_OPERATOR_NAMES = CANONICAL_OPERATOR_NAMES
|
|
97
|
+
|
|
98
|
+
# Physics-derived operator sets (derived from TNFR canonical principles)
|
|
99
|
+
# Import here to avoid issues, but actual derivation is in physics_derivation module
|
|
100
|
+
# These are computed at module load time from TNFR physical principles
|
|
101
|
+
VALID_START_OPERATORS = frozenset({EMISSION, RECURSIVITY, TRANSITION})
|
|
102
|
+
INTERMEDIATE_OPERATORS = frozenset({DISSONANCE, COUPLING, RESONANCE})
|
|
103
|
+
VALID_END_OPERATORS = frozenset({SILENCE, TRANSITION, RECURSIVITY, DISSONANCE})
|
|
104
|
+
SELF_ORGANIZATION_CLOSURES = frozenset({SILENCE, CONTRACTION})
|
|
105
|
+
|
|
106
|
+
# R4 Bifurcation control: operators that enable structural transformations
|
|
107
|
+
# Legacy single-level destabilizers (for backward compatibility)
|
|
108
|
+
DESTABILIZERS = frozenset({DISSONANCE, TRANSITION, EXPANSION}) # OZ, NAV, VAL
|
|
109
|
+
TRANSFORMERS = frozenset({MUTATION, SELF_ORGANIZATION}) # ZHIR, THOL
|
|
110
|
+
BIFURCATION_WINDOW = 3 # Legacy: Search window for destabilizer precedent
|
|
111
|
+
|
|
112
|
+
# R4 Extended: Graduated destabilizer classification by intensity
|
|
113
|
+
DESTABILIZERS_STRONG = frozenset({DISSONANCE}) # OZ: explicit dissonance
|
|
114
|
+
DESTABILIZERS_MODERATE = frozenset({TRANSITION, EXPANSION}) # NAV, VAL: indirect
|
|
115
|
+
DESTABILIZERS_WEAK = frozenset({RECEPTION}) # EN: latent potential
|
|
116
|
+
|
|
117
|
+
# All destabilizers (union of all levels)
|
|
118
|
+
DESTABILIZERS_ALL = DESTABILIZERS_STRONG | DESTABILIZERS_MODERATE | DESTABILIZERS_WEAK
|
|
119
|
+
|
|
120
|
+
# R4 Extended: Bifurcation windows by destabilizer intensity
|
|
121
|
+
# These define how many operators can separate a destabilizer from a transformer
|
|
122
|
+
BIFURCATION_WINDOWS = {
|
|
123
|
+
"strong": 4, # OZ permits ZHIR/THOL within 4 operators
|
|
124
|
+
"moderate": 2, # NAV/VAL permit ZHIR/THOL within 2 operators
|
|
125
|
+
"weak": 1, # EN requires ZHIR/THOL as immediate successor
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def canonical_operator_name(name: str) -> str:
|
|
130
|
+
"""Return the canonical operator token for ``name``."""
|
|
131
|
+
|
|
132
|
+
return name
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def operator_display_name(name: str) -> str:
|
|
136
|
+
"""Return the display label for ``name`` (currently the canonical token)."""
|
|
137
|
+
|
|
138
|
+
return canonical_operator_name(name)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
__all__ = [
|
|
142
|
+
"EMISSION",
|
|
143
|
+
"RECEPTION",
|
|
144
|
+
"COHERENCE",
|
|
145
|
+
"DISSONANCE",
|
|
146
|
+
"COUPLING",
|
|
147
|
+
"RESONANCE",
|
|
148
|
+
"SILENCE",
|
|
149
|
+
"EXPANSION",
|
|
150
|
+
"CONTRACTION",
|
|
151
|
+
"SELF_ORGANIZATION",
|
|
152
|
+
"MUTATION",
|
|
153
|
+
"TRANSITION",
|
|
154
|
+
"RECURSIVITY",
|
|
155
|
+
"CANONICAL_OPERATOR_NAMES",
|
|
156
|
+
"ENGLISH_OPERATOR_NAMES",
|
|
157
|
+
"ALL_OPERATOR_NAMES",
|
|
158
|
+
"VALID_START_OPERATORS",
|
|
159
|
+
"INTERMEDIATE_OPERATORS",
|
|
160
|
+
"VALID_END_OPERATORS",
|
|
161
|
+
"SELF_ORGANIZATION_CLOSURES",
|
|
162
|
+
"DESTABILIZERS",
|
|
163
|
+
"TRANSFORMERS",
|
|
164
|
+
"BIFURCATION_WINDOW",
|
|
165
|
+
"DESTABILIZERS_STRONG",
|
|
166
|
+
"DESTABILIZERS_MODERATE",
|
|
167
|
+
"DESTABILIZERS_WEAK",
|
|
168
|
+
"DESTABILIZERS_ALL",
|
|
169
|
+
"BIFURCATION_WINDOWS",
|
|
170
|
+
"canonical_operator_name",
|
|
171
|
+
"operator_display_name",
|
|
172
|
+
"validate_physics_derivation",
|
|
173
|
+
]
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def validate_physics_derivation() -> dict[str, Any]:
|
|
177
|
+
"""Validate that operator sets are consistent with TNFR physics derivation.
|
|
178
|
+
|
|
179
|
+
This function verifies that VALID_START_OPERATORS and VALID_END_OPERATORS
|
|
180
|
+
match what would be derived from first principles using the physics_derivation
|
|
181
|
+
module.
|
|
182
|
+
|
|
183
|
+
Returns
|
|
184
|
+
-------
|
|
185
|
+
dict[str, Any]
|
|
186
|
+
Validation report with keys:
|
|
187
|
+
- "start_operators_valid": bool
|
|
188
|
+
- "end_operators_valid": bool
|
|
189
|
+
- "start_operators_expected": frozenset
|
|
190
|
+
- "start_operators_actual": frozenset
|
|
191
|
+
- "end_operators_expected": frozenset
|
|
192
|
+
- "end_operators_actual": frozenset
|
|
193
|
+
- "discrepancies": list of str
|
|
194
|
+
|
|
195
|
+
Notes
|
|
196
|
+
-----
|
|
197
|
+
This function is primarily for testing and validation. It ensures that
|
|
198
|
+
any manual updates to VALID_START_OPERATORS or VALID_END_OPERATORS remain
|
|
199
|
+
consistent with TNFR canonical physics.
|
|
200
|
+
|
|
201
|
+
If discrepancies are found, the function logs warnings but does not raise
|
|
202
|
+
exceptions, allowing for intentional overrides with clear audit trail.
|
|
203
|
+
"""
|
|
204
|
+
from .physics_derivation import (
|
|
205
|
+
derive_start_operators_from_physics,
|
|
206
|
+
derive_end_operators_from_physics,
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
expected_starts = derive_start_operators_from_physics()
|
|
210
|
+
expected_ends = derive_end_operators_from_physics()
|
|
211
|
+
|
|
212
|
+
discrepancies = []
|
|
213
|
+
|
|
214
|
+
start_valid = VALID_START_OPERATORS == expected_starts
|
|
215
|
+
if not start_valid:
|
|
216
|
+
missing = expected_starts - VALID_START_OPERATORS
|
|
217
|
+
extra = VALID_START_OPERATORS - expected_starts
|
|
218
|
+
if missing:
|
|
219
|
+
discrepancies.append(
|
|
220
|
+
f"VALID_START_OPERATORS missing physics-derived operators: {missing}"
|
|
221
|
+
)
|
|
222
|
+
if extra:
|
|
223
|
+
discrepancies.append(
|
|
224
|
+
f"VALID_START_OPERATORS contains non-physics operators: {extra}"
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
end_valid = VALID_END_OPERATORS == expected_ends
|
|
228
|
+
if not end_valid:
|
|
229
|
+
missing = expected_ends - VALID_END_OPERATORS
|
|
230
|
+
extra = VALID_END_OPERATORS - expected_ends
|
|
231
|
+
if missing:
|
|
232
|
+
discrepancies.append(
|
|
233
|
+
f"VALID_END_OPERATORS missing physics-derived operators: {missing}"
|
|
234
|
+
)
|
|
235
|
+
if extra:
|
|
236
|
+
discrepancies.append(
|
|
237
|
+
f"VALID_END_OPERATORS contains non-physics operators: {extra}"
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
"start_operators_valid": start_valid,
|
|
242
|
+
"end_operators_valid": end_valid,
|
|
243
|
+
"start_operators_expected": expected_starts,
|
|
244
|
+
"start_operators_actual": VALID_START_OPERATORS,
|
|
245
|
+
"end_operators_expected": expected_ends,
|
|
246
|
+
"end_operators_actual": VALID_END_OPERATORS,
|
|
247
|
+
"discrepancies": discrepancies,
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def __getattr__(name: str) -> Any:
|
|
252
|
+
"""Provide a consistent ``AttributeError`` when names are missing."""
|
|
253
|
+
|
|
254
|
+
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
__all__: Any
|
|
4
|
+
|
|
5
|
+
def __getattr__(name: str) -> Any: ...
|
|
6
|
+
|
|
7
|
+
ALL_OPERATOR_NAMES: Any
|
|
8
|
+
BIFURCATION_WINDOW: Any
|
|
9
|
+
BIFURCATION_WINDOWS: Any
|
|
10
|
+
CANONICAL_OPERATOR_NAMES: Any
|
|
11
|
+
COHERENCE: Any
|
|
12
|
+
CONTRACTION: Any
|
|
13
|
+
COUPLING: Any
|
|
14
|
+
DESTABILIZERS: Any
|
|
15
|
+
DESTABILIZERS_ALL: Any
|
|
16
|
+
DESTABILIZERS_MODERATE: Any
|
|
17
|
+
DESTABILIZERS_STRONG: Any
|
|
18
|
+
DESTABILIZERS_WEAK: Any
|
|
19
|
+
DISSONANCE: Any
|
|
20
|
+
EMISSION: Any
|
|
21
|
+
ENGLISH_OPERATOR_NAMES: Any
|
|
22
|
+
EXPANSION: Any
|
|
23
|
+
INTERMEDIATE_OPERATORS: Any
|
|
24
|
+
MUTATION: Any
|
|
25
|
+
RECEPTION: Any
|
|
26
|
+
RECURSIVITY: Any
|
|
27
|
+
RESONANCE: Any
|
|
28
|
+
SELF_ORGANIZATION: Any
|
|
29
|
+
SELF_ORGANIZATION_CLOSURES: Any
|
|
30
|
+
SILENCE: Any
|
|
31
|
+
TRANSFORMERS: Any
|
|
32
|
+
TRANSITION: Any
|
|
33
|
+
VALID_END_OPERATORS: Any
|
|
34
|
+
VALID_START_OPERATORS: Any
|
|
35
|
+
canonical_operator_name: Any
|
|
36
|
+
operator_display_name: Any
|
|
@@ -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)
|