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,238 @@
|
|
|
1
|
+
"""Tutorial: T'HOL Structural Metabolism and Bifurcation
|
|
2
|
+
|
|
3
|
+
This tutorial demonstrates the canonical implementation of T'HOL (Self-Organization)
|
|
4
|
+
as structural metabolism, including:
|
|
5
|
+
|
|
6
|
+
1. Bifurcation dynamics (∂²EPI/∂t² > τ)
|
|
7
|
+
2. Metabolic cycles (EN → THOL → IL)
|
|
8
|
+
3. Adaptive metabolism
|
|
9
|
+
4. Emergence metrics
|
|
10
|
+
|
|
11
|
+
Theory
|
|
12
|
+
------
|
|
13
|
+
T'HOL is not just self-organization - it's **structural metabolism**:
|
|
14
|
+
|
|
15
|
+
> "T'HOL no reacciona: reorganiza. No adapta: reinventa. T'HOL es el corazón del
|
|
16
|
+
> metabolismo estructural: permite que una forma se reorganice sin romperse."
|
|
17
|
+
|
|
18
|
+
**Key Characteristics:**
|
|
19
|
+
- **Bifurcation nodal**: When acceleration exceeds threshold, spawns sub-EPIs
|
|
20
|
+
- **Autonomous reorganization**: No external instruction required
|
|
21
|
+
- **Vibrational metabolism**: Digests external experience into internal structure
|
|
22
|
+
- **Emergence engine**: Creates complexity and novelty
|
|
23
|
+
|
|
24
|
+
Examples
|
|
25
|
+
--------
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
from tnfr.constants import DNFR_PRIMARY, EPI_PRIMARY, VF_PRIMARY
|
|
31
|
+
from tnfr.dynamics.metabolism import (
|
|
32
|
+
StructuralMetabolism,
|
|
33
|
+
adaptive_metabolism,
|
|
34
|
+
cascading_reorganization,
|
|
35
|
+
digest_stimulus,
|
|
36
|
+
)
|
|
37
|
+
from tnfr.metrics.emergence import (
|
|
38
|
+
compute_bifurcation_rate,
|
|
39
|
+
compute_emergence_index,
|
|
40
|
+
compute_metabolic_efficiency,
|
|
41
|
+
compute_structural_complexity,
|
|
42
|
+
)
|
|
43
|
+
from tnfr.operators.definitions import SelfOrganization
|
|
44
|
+
from tnfr.structural import create_nfr
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def example_1_basic_bifurcation():
|
|
48
|
+
"""Example 1: Basic bifurcation when acceleration exceeds threshold."""
|
|
49
|
+
print("\n=== Example 1: Basic Bifurcation ===\n")
|
|
50
|
+
|
|
51
|
+
# Create a node with sufficient EPI
|
|
52
|
+
G, node = create_nfr("cell", epi=0.5, vf=1.0)
|
|
53
|
+
|
|
54
|
+
# Set positive ΔNFR (required for T'HOL)
|
|
55
|
+
G.nodes[node][DNFR_PRIMARY] = 0.2
|
|
56
|
+
|
|
57
|
+
# Provide EPI history showing strong acceleration
|
|
58
|
+
# d²EPI = abs(0.7 - 2*0.5 + 0.3) = 0.1
|
|
59
|
+
G.nodes[node]["epi_history"] = [0.3, 0.5, 0.7]
|
|
60
|
+
|
|
61
|
+
print("Initial state:")
|
|
62
|
+
print(f" EPI: {G.nodes[node][EPI_PRIMARY]:.3f}")
|
|
63
|
+
print(f" EPI history: {G.nodes[node]['epi_history']}")
|
|
64
|
+
print(f" Acceleration: 0.1")
|
|
65
|
+
|
|
66
|
+
# Apply T'HOL with low threshold to trigger bifurcation
|
|
67
|
+
SelfOrganization()(G, node, tau=0.08)
|
|
68
|
+
|
|
69
|
+
# Check for bifurcation
|
|
70
|
+
sub_epis = G.nodes[node].get("sub_epis", [])
|
|
71
|
+
print(f"\nAfter T'HOL:")
|
|
72
|
+
print(f" EPI: {G.nodes[node][EPI_PRIMARY]:.3f}")
|
|
73
|
+
print(f" Bifurcations: {len(sub_epis)}")
|
|
74
|
+
|
|
75
|
+
if sub_epis:
|
|
76
|
+
print(f" Sub-EPI details:")
|
|
77
|
+
for i, sub in enumerate(sub_epis):
|
|
78
|
+
print(f" [{i}] epi={sub['epi']:.3f}, d2_epi={sub['d2_epi']:.3f}")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def example_2_metabolic_cycle():
|
|
82
|
+
"""Example 2: Complete metabolic cycle (EN → THOL → IL)."""
|
|
83
|
+
print("\n=== Example 2: Metabolic Cycle ===\n")
|
|
84
|
+
|
|
85
|
+
# Create a node with a neighbor (for Reception)
|
|
86
|
+
G, node = create_nfr("neuron", epi=0.4, vf=1.0)
|
|
87
|
+
G.add_node("neighbor", **{EPI_PRIMARY: 0.6, VF_PRIMARY: 1.0})
|
|
88
|
+
G.add_edge(node, "neighbor")
|
|
89
|
+
|
|
90
|
+
# Set positive ΔNFR and history for bifurcation
|
|
91
|
+
G.nodes[node][DNFR_PRIMARY] = 0.2
|
|
92
|
+
G.nodes[node]["epi_history"] = [0.2, 0.35, 0.5]
|
|
93
|
+
|
|
94
|
+
print("Initial state:")
|
|
95
|
+
print(f" EPI: {G.nodes[node][EPI_PRIMARY]:.3f}")
|
|
96
|
+
print(f" Neighbors: {list(G.neighbors(node))}")
|
|
97
|
+
|
|
98
|
+
# Use StructuralMetabolism for complete cycle
|
|
99
|
+
metabolism = StructuralMetabolism(G, node)
|
|
100
|
+
metabolism.digest(tau=0.08)
|
|
101
|
+
|
|
102
|
+
print(f"\nAfter metabolic cycle:")
|
|
103
|
+
# Get final EPI value safely using unified function
|
|
104
|
+
from tnfr.alias import get_attr
|
|
105
|
+
from tnfr.constants.aliases import ALIAS_EPI
|
|
106
|
+
|
|
107
|
+
final_epi = float(get_attr(G.nodes[node], ALIAS_EPI, 0.0))
|
|
108
|
+
print(f" EPI: {final_epi:.3f}")
|
|
109
|
+
# Get glyph history safely
|
|
110
|
+
glyph_hist = G.nodes[node].get("glyph_history", [])
|
|
111
|
+
if glyph_hist and isinstance(glyph_hist, list):
|
|
112
|
+
print(f" Glyph history: {glyph_hist[-5:]}") # Last 5 glyphs
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def example_3_adaptive_metabolism():
|
|
116
|
+
"""Example 3: Adaptive metabolism responds to stress levels."""
|
|
117
|
+
print("\n=== Example 3: Adaptive Metabolism ===\n")
|
|
118
|
+
|
|
119
|
+
# Import unified functions
|
|
120
|
+
from tnfr.alias import get_attr
|
|
121
|
+
from tnfr.constants.aliases import ALIAS_EPI
|
|
122
|
+
|
|
123
|
+
# High stress scenario
|
|
124
|
+
G_stress, node_stress = create_nfr("organism_stressed", epi=0.6, vf=1.0)
|
|
125
|
+
G_stress.nodes[node_stress][DNFR_PRIMARY] = 0.3
|
|
126
|
+
G_stress.nodes[node_stress]["epi_history"] = [0.4, 0.5, 0.7]
|
|
127
|
+
|
|
128
|
+
print("High stress (>= 0.5):")
|
|
129
|
+
initial_epi_stress = float(get_attr(G_stress.nodes[node_stress], ALIAS_EPI, 0.0))
|
|
130
|
+
print(f" Initial EPI: {initial_epi_stress:.3f}")
|
|
131
|
+
|
|
132
|
+
metabolism_stress = StructuralMetabolism(G_stress, node_stress)
|
|
133
|
+
metabolism_stress.adaptive_metabolism(stress_level=0.7)
|
|
134
|
+
|
|
135
|
+
final_epi_stress = float(get_attr(G_stress.nodes[node_stress], ALIAS_EPI, 0.0))
|
|
136
|
+
print(f" After adaptive metabolism: EPI={final_epi_stress:.3f}")
|
|
137
|
+
|
|
138
|
+
# Low stress scenario
|
|
139
|
+
G_calm, node_calm = create_nfr("organism_calm", epi=0.5, vf=1.0)
|
|
140
|
+
G_calm.nodes[node_calm][DNFR_PRIMARY] = 0.1
|
|
141
|
+
G_calm.nodes[node_calm]["epi_history"] = [0.45, 0.48, 0.52]
|
|
142
|
+
|
|
143
|
+
print("\nLow stress (< 0.5):")
|
|
144
|
+
initial_epi_calm = float(get_attr(G_calm.nodes[node_calm], ALIAS_EPI, 0.0))
|
|
145
|
+
print(f" Initial EPI: {initial_epi_calm:.3f}")
|
|
146
|
+
|
|
147
|
+
metabolism_calm = StructuralMetabolism(G_calm, node_calm)
|
|
148
|
+
metabolism_calm.adaptive_metabolism(stress_level=0.3)
|
|
149
|
+
|
|
150
|
+
final_epi_calm = float(get_attr(G_calm.nodes[node_calm], ALIAS_EPI, 0.0))
|
|
151
|
+
print(f" After adaptive metabolism: EPI={final_epi_calm:.3f}")
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def example_4_cascading_reorganization():
|
|
155
|
+
"""Example 4: Cascading T'HOL for multi-scale reorganization."""
|
|
156
|
+
print("\n=== Example 4: Cascading Reorganization ===\n")
|
|
157
|
+
|
|
158
|
+
# Import unified functions
|
|
159
|
+
from tnfr.alias import get_attr
|
|
160
|
+
from tnfr.constants.aliases import ALIAS_EPI
|
|
161
|
+
|
|
162
|
+
G, node = create_nfr("system", epi=0.7, vf=1.2)
|
|
163
|
+
G.nodes[node][DNFR_PRIMARY] = 0.25
|
|
164
|
+
G.nodes[node]["epi_history"] = [0.5, 0.6, 0.8]
|
|
165
|
+
|
|
166
|
+
print("Initial state:")
|
|
167
|
+
initial_epi = float(get_attr(G.nodes[node], ALIAS_EPI, 0.0))
|
|
168
|
+
print(f" EPI: {initial_epi:.3f}")
|
|
169
|
+
|
|
170
|
+
# Cascading reorganization with 3 levels
|
|
171
|
+
metabolism = StructuralMetabolism(G, node)
|
|
172
|
+
metabolism.cascading_reorganization(depth=3)
|
|
173
|
+
|
|
174
|
+
sub_epis = G.nodes[node].get("sub_epis", [])
|
|
175
|
+
final_epi = float(get_attr(G.nodes[node], ALIAS_EPI, 0.0))
|
|
176
|
+
print(f"\nAfter cascading reorganization (depth=3):")
|
|
177
|
+
print(f" EPI: {final_epi:.3f}")
|
|
178
|
+
print(f" Total bifurcations: {len(sub_epis)}")
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def example_5_emergence_metrics():
|
|
182
|
+
"""Example 5: Measuring structural complexity and metabolic efficiency."""
|
|
183
|
+
print("\n=== Example 5: Emergence Metrics ===\n")
|
|
184
|
+
|
|
185
|
+
# Import unified functions
|
|
186
|
+
from tnfr.alias import get_attr
|
|
187
|
+
from tnfr.constants.aliases import ALIAS_EPI
|
|
188
|
+
|
|
189
|
+
G, node = create_nfr("evolving_system", epi=0.6, vf=1.0)
|
|
190
|
+
|
|
191
|
+
# Record initial EPI for efficiency calculation
|
|
192
|
+
G.nodes[node]["epi_initial"] = 0.3
|
|
193
|
+
|
|
194
|
+
# Simulate several T'HOL applications with bifurcations
|
|
195
|
+
G.nodes[node][DNFR_PRIMARY] = 0.2
|
|
196
|
+
G.nodes[node]["glyph_history"] = []
|
|
197
|
+
|
|
198
|
+
for i in range(3):
|
|
199
|
+
# Update history to show acceleration
|
|
200
|
+
G.nodes[node]["epi_history"] = [0.3 + i * 0.1, 0.4 + i * 0.1, 0.6 + i * 0.1]
|
|
201
|
+
SelfOrganization()(G, node, tau=0.08)
|
|
202
|
+
|
|
203
|
+
print("After 3 T'HOL applications:")
|
|
204
|
+
final_epi = float(get_attr(G.nodes[node], ALIAS_EPI, 0.0))
|
|
205
|
+
print(f" Final EPI: {final_epi:.3f}")
|
|
206
|
+
|
|
207
|
+
# Compute emergence metrics
|
|
208
|
+
complexity = compute_structural_complexity(G, node)
|
|
209
|
+
rate = compute_bifurcation_rate(G, node, window=10)
|
|
210
|
+
efficiency = compute_metabolic_efficiency(G, node)
|
|
211
|
+
emergence = compute_emergence_index(G, node)
|
|
212
|
+
|
|
213
|
+
print(f"\nEmergence Metrics:")
|
|
214
|
+
print(f" Structural complexity: {complexity}")
|
|
215
|
+
print(f" Bifurcation rate: {rate:.3f} per step")
|
|
216
|
+
print(f" Metabolic efficiency: {efficiency:.3f} EPI/THOL")
|
|
217
|
+
print(f" Emergence index: {emergence:.3f}")
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def main():
|
|
221
|
+
"""Run all examples."""
|
|
222
|
+
print("\n" + "=" * 70)
|
|
223
|
+
print("T'HOL STRUCTURAL METABOLISM TUTORIAL")
|
|
224
|
+
print("=" * 70)
|
|
225
|
+
|
|
226
|
+
example_1_basic_bifurcation()
|
|
227
|
+
example_2_metabolic_cycle()
|
|
228
|
+
example_3_adaptive_metabolism()
|
|
229
|
+
example_4_cascading_reorganization()
|
|
230
|
+
example_5_emergence_metrics()
|
|
231
|
+
|
|
232
|
+
print("\n" + "=" * 70)
|
|
233
|
+
print("Tutorial complete!")
|
|
234
|
+
print("=" * 70 + "\n")
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
if __name__ == "__main__":
|
|
238
|
+
main()
|