tnfr 1.0__py3-none-any.whl → 3.0.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 +45 -31
- tnfr/constants.py +183 -7
- tnfr/dynamics.py +543 -0
- tnfr/helpers.py +198 -0
- tnfr/main.py +37 -0
- tnfr/observers.py +149 -0
- tnfr/ontosim.py +137 -0
- tnfr/operators.py +296 -0
- tnfr-3.0.0.dist-info/METADATA +35 -0
- tnfr-3.0.0.dist-info/RECORD +13 -0
- tnfr-3.0.0.dist-info/top_level.txt +1 -0
- core/ontosim.py +0 -757
- matrix/operators.py +0 -496
- tnfr/core/ontosim.py +0 -1074
- tnfr/matrix/operators.py +0 -500
- tnfr/resonance/dynamics.py +0 -1305
- tnfr/utils/helpers.py +0 -357
- tnfr-1.0.dist-info/METADATA +0 -95
- tnfr-1.0.dist-info/RECORD +0 -14
- tnfr-1.0.dist-info/entry_points.txt +0 -2
- tnfr-1.0.dist-info/top_level.txt +0 -3
- {tnfr-1.0.dist-info → tnfr-3.0.0.dist-info}/WHEEL +0 -0
- {tnfr-1.0.dist-info → tnfr-3.0.0.dist-info}/licenses/LICENSE.txt +0 -0
tnfr/__init__.py
CHANGED
|
@@ -1,34 +1,48 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
"""
|
|
2
|
-
TNFR
|
|
3
|
-
|
|
4
|
+
TNFR — Teoría de la Naturaleza Fractal Resonante
|
|
5
|
+
API canónica del paquete.
|
|
6
|
+
|
|
7
|
+
Principio operativo (ecuación nodal):
|
|
8
|
+
∂EPI/∂t = νf · ΔNFR(t)
|
|
9
|
+
|
|
10
|
+
Este paquete expone utilidades para preparar una red (preparar_red),
|
|
11
|
+
ejecutar la dinámica (step, run) y observar coherencia (coherencia_global,
|
|
12
|
+
orden_kuramoto), alineado con la TNFR.
|
|
4
13
|
"""
|
|
5
14
|
|
|
6
|
-
__version__ = "0.
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
from .
|
|
10
|
-
from .
|
|
11
|
-
from .
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
15
|
+
__version__ = "3.0.0"
|
|
16
|
+
|
|
17
|
+
# Re-exports de la API pública
|
|
18
|
+
from .ontosim import preparar_red
|
|
19
|
+
from .dynamics import step, run, set_delta_nfr_hook
|
|
20
|
+
from .observers import attach_standard_observer, coherencia_global, orden_kuramoto
|
|
21
|
+
|
|
22
|
+
__all__ = [
|
|
23
|
+
"preparar_red",
|
|
24
|
+
"step", "run", "set_delta_nfr_hook",
|
|
25
|
+
"attach_standard_observer", "coherencia_global", "orden_kuramoto",
|
|
26
|
+
"__version__",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
# --- Adaptador de imports internos (compatibilidad sin tocar tus módulos) ---
|
|
30
|
+
# Varios archivos del paquete usan imports absolutos como:
|
|
31
|
+
# from constants import DEFAULTS
|
|
32
|
+
# en lugar de imports relativos:
|
|
33
|
+
# from .constants import DEFAULTS
|
|
34
|
+
# Para no reescribirlos, registramos alias en sys.modules.
|
|
35
|
+
import sys as _sys
|
|
36
|
+
from . import constants as _constants
|
|
37
|
+
from . import helpers as _helpers
|
|
38
|
+
from . import observers as _observers
|
|
39
|
+
from . import dynamics as _dynamics
|
|
40
|
+
from . import operators as _operators
|
|
41
|
+
from . import ontosim as _ontosim
|
|
42
|
+
|
|
43
|
+
_sys.modules.setdefault("constants", _constants)
|
|
44
|
+
_sys.modules.setdefault("helpers", _helpers)
|
|
45
|
+
_sys.modules.setdefault("observers", _observers)
|
|
46
|
+
_sys.modules.setdefault("dynamics", _dynamics)
|
|
47
|
+
_sys.modules.setdefault("operators", _operators)
|
|
48
|
+
_sys.modules.setdefault("ontosim", _ontosim)
|
tnfr/constants.py
CHANGED
|
@@ -1,7 +1,183 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"""
|
|
2
|
+
constants.py — TNFR canónica
|
|
3
|
+
|
|
4
|
+
Centraliza parámetros por defecto y nombres que usan el resto de módulos.
|
|
5
|
+
Provee utilidades para inyectarlos en G.graph.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
from typing import Dict, Any
|
|
9
|
+
|
|
10
|
+
# -------------------------
|
|
11
|
+
# Parámetros canónicos
|
|
12
|
+
# -------------------------
|
|
13
|
+
DEFAULTS: Dict[str, Any] = {
|
|
14
|
+
# Discretización
|
|
15
|
+
"DT": 1.0,
|
|
16
|
+
|
|
17
|
+
# Rango de EPI (estructura primaria)
|
|
18
|
+
"EPI_MIN": -1.0,
|
|
19
|
+
"EPI_MAX": 1.0,
|
|
20
|
+
# Alias histórico usado por algunos proyectos
|
|
21
|
+
"EPI_MAX_GLOBAL": 1.0,
|
|
22
|
+
|
|
23
|
+
# Rango de frecuencia estructural νf
|
|
24
|
+
"VF_MIN": 0.0,
|
|
25
|
+
"VF_MAX": 1.0,
|
|
26
|
+
|
|
27
|
+
# Envolvente de fase
|
|
28
|
+
"THETA_WRAP": True,
|
|
29
|
+
|
|
30
|
+
# --- Inicialización (evitar simetrías) ---
|
|
31
|
+
"INIT_RANDOM_PHASE": True, # si True, θ ~ U[-π, π]
|
|
32
|
+
"INIT_THETA_MIN": -3.141592653589793,
|
|
33
|
+
"INIT_THETA_MAX": 3.141592653589793,
|
|
34
|
+
|
|
35
|
+
"INIT_VF_MODE": "uniform", # "uniform" | "normal"
|
|
36
|
+
# para uniform:
|
|
37
|
+
"INIT_VF_MIN": None, # si None → usa VF_MIN
|
|
38
|
+
"INIT_VF_MAX": None, # si None → usa VF_MAX
|
|
39
|
+
# para normal:
|
|
40
|
+
"INIT_VF_MEAN": 0.5,
|
|
41
|
+
"INIT_VF_STD": 0.15,
|
|
42
|
+
# clamp de νf a límites canónicos
|
|
43
|
+
"INIT_VF_CLAMP_TO_LIMITS": True,
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# Mezcla para ΔNFR (campo nodal)
|
|
47
|
+
# phase: dispersión de fase local; epi: gradiente de EPI; vf: desajuste de νf
|
|
48
|
+
"DNFR_WEIGHTS": {"phase": 0.34, "epi": 0.33, "vf": 0.33},
|
|
49
|
+
|
|
50
|
+
# Índice de sentido Si = α·νf_norm + β·(1 - disp_fase) + γ·(1 - |ΔNFR|/max)
|
|
51
|
+
"SI_WEIGHTS": {"alpha": 0.34, "beta": 0.33, "gamma": 0.33},
|
|
52
|
+
|
|
53
|
+
# Coordinación de fase (U’M) global/vecinal por paso
|
|
54
|
+
"PHASE_K_GLOBAL": 0.05,
|
|
55
|
+
"PHASE_K_LOCAL": 0.15,
|
|
56
|
+
|
|
57
|
+
# Coordinación de fase adaptativa (kG/kL dinámicos por estado)
|
|
58
|
+
"PHASE_ADAPT": {
|
|
59
|
+
"enabled": True, # activar adaptación automática si no se pasan fuerzas explícitas a la función
|
|
60
|
+
"R_hi": 0.90, # sincronía alta (Kuramoto R) => estado ESTABLE
|
|
61
|
+
"R_lo": 0.60, # sincronía baja => estado DISONANTE
|
|
62
|
+
"disr_hi": 0.50, # carga glífica disruptiva alta => DISONANTE
|
|
63
|
+
"disr_lo": 0.25, # carga glífica disruptiva baja + R alta => ESTABLE
|
|
64
|
+
"kG_min": 0.01, "kG_max": 0.20,
|
|
65
|
+
"kL_min": 0.05, "kL_max": 0.25,
|
|
66
|
+
"up": 0.10, # velocidad de subida hacia el objetivo
|
|
67
|
+
"down": 0.07 # velocidad de bajada hacia el objetivo
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
"STOP_EARLY": {"enabled": False, "window": 25, "fraction": 0.90},
|
|
71
|
+
|
|
72
|
+
# Criterios de estabilidad (para activar RE’MESH de red)
|
|
73
|
+
"EPS_DNFR_STABLE": 1e-3,
|
|
74
|
+
"EPS_DEPI_STABLE": 1e-3,
|
|
75
|
+
"FRACTION_STABLE_REMESH": 0.80, # fracción de nodos estables requerida
|
|
76
|
+
"REMESH_COOLDOWN_VENTANA": 20, # pasos mínimos entre RE’MESH
|
|
77
|
+
# Gating adicional basado en observadores (conmutador + ventana)
|
|
78
|
+
"REMESH_REQUIRE_STABILITY": False, # si True, exige ventana de estabilidad multi-métrica
|
|
79
|
+
"REMESH_STABILITY_WINDOW": 25, # tamaño de ventana para evaluar estabilidad
|
|
80
|
+
"REMESH_MIN_PHASE_SYNC": 0.85, # media mínima de sincronía de fase en ventana
|
|
81
|
+
"REMESH_MAX_GLYPH_DISR": 0.35, # media máxima de carga glífica disruptiva en ventana
|
|
82
|
+
"REMESH_LOG_EVENTS": True, # guarda eventos y metadatos del RE’MESH
|
|
83
|
+
|
|
84
|
+
# RE’MESH: memoria τ y mezcla α
|
|
85
|
+
"REMESH_TAU": 8, # pasos hacia atrás
|
|
86
|
+
"REMESH_ALPHA": 0.5, # mezcla con pasado
|
|
87
|
+
|
|
88
|
+
# Histéresis glífica
|
|
89
|
+
"GLYPH_HYSTERESIS_WINDOW": 7,
|
|
90
|
+
|
|
91
|
+
# Margen de histéresis del selector (cuánto "aguanta" sin cambiar glifo si está cerca de un umbral)
|
|
92
|
+
"GLYPH_SELECTOR_MARGIN": 0.05,
|
|
93
|
+
|
|
94
|
+
# Ventana para estimar la carga glífica en history/plots
|
|
95
|
+
"GLYPH_LOAD_WINDOW": 50,
|
|
96
|
+
|
|
97
|
+
# Tamaño de ventana para coherencia promedio W̄
|
|
98
|
+
"WBAR_WINDOW": 25,
|
|
99
|
+
|
|
100
|
+
# Factores suaves por glifo (operadores)
|
|
101
|
+
"GLYPH_FACTORS": {
|
|
102
|
+
"AL_boost": 0.05, # A’L — pequeña emisión
|
|
103
|
+
"EN_mix": 0.25, # E’N — mezcla con vecindad
|
|
104
|
+
"IL_dnfr_factor": 0.7, # I’L — reduce ΔNFR
|
|
105
|
+
"OZ_dnfr_factor": 1.3, # O’Z — aumenta ΔNFR
|
|
106
|
+
"UM_theta_push": 0.25, # U’M — empuje adicional de fase local
|
|
107
|
+
"RA_epi_diff": 0.15, # R’A — difusión EPI
|
|
108
|
+
"SHA_vf_factor": 0.85, # SH’A — baja νf
|
|
109
|
+
"VAL_scale": 1.15, # VA’L — expande EPI
|
|
110
|
+
"NUL_scale": 0.85, # NU’L — contrae EPI
|
|
111
|
+
"THOL_accel": 0.10, # T’HOL — acelera (seg. deriv.) si hay umbral
|
|
112
|
+
"ZHIR_theta_shift": 1.57079632679, # Z’HIR — desplazamiento ~π/2
|
|
113
|
+
"NAV_jitter": 0.05, # NA’V — pequeña inestabilidad creativa
|
|
114
|
+
"REMESH_alpha": 0.5, # RE’MESH — mezcla si no se usa REMESH_ALPHA
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
# Umbrales para el selector glífico por defecto
|
|
118
|
+
"GLYPH_THRESHOLDS": {"hi": 0.66, "lo": 0.33, "dnfr": 1e-3},
|
|
119
|
+
|
|
120
|
+
# Comportamiento NA’V
|
|
121
|
+
"NAV_RANDOM": True, # si True, usa jitter aleatorio en [-j, j]; si False, jitter determinista por signo
|
|
122
|
+
"RANDOM_SEED": 0, # semilla base para reproducibilidad del jitter
|
|
123
|
+
|
|
124
|
+
# Modo ruido para O’Z
|
|
125
|
+
"OZ_NOISE_MODE": False, # si True, añade ruido aditivo en ΔNFR
|
|
126
|
+
"OZ_SIGMA": 0.1, # amplitud del ruido uniforme [-σ, σ]
|
|
127
|
+
|
|
128
|
+
# Gramática glífica (suave): evita repetir ciertos glifos salvo que el campo lo exija
|
|
129
|
+
"GRAMMAR": {
|
|
130
|
+
"window": 3, # cuántos pasos recientes miramos por nodo
|
|
131
|
+
"avoid_repeats": ["Z’HIR", "O’Z", "T’HOL"],
|
|
132
|
+
"force_dnfr": 0.60, # si |ΔNFR|_norm ≥ este valor, se permite repetir
|
|
133
|
+
"force_accel": 0.60, # o si |accel|_norm ≥ este valor
|
|
134
|
+
"fallbacks": { # a qué glifo caer si se bloquea el candidato
|
|
135
|
+
"Z’HIR": "NA’V",
|
|
136
|
+
"O’Z": "Z’HIR",
|
|
137
|
+
"T’HOL": "NA’V"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
# --- Selector multiobjetivo ---
|
|
142
|
+
# Ponderaciones (se reescalan a 1 automáticamente)
|
|
143
|
+
"SELECTOR_WEIGHTS": {"w_si": 0.5, "w_dnfr": 0.3, "w_accel": 0.2},
|
|
144
|
+
# Umbrales hi/lo para decidir categorías (trabajan con |ΔNFR|_norm y |accel|_norm)
|
|
145
|
+
"SELECTOR_THRESHOLDS": {
|
|
146
|
+
"si_hi": 0.66, "si_lo": 0.33,
|
|
147
|
+
"dnfr_hi": 0.50, "dnfr_lo": 0.10,
|
|
148
|
+
"accel_hi": 0.50, "accel_lo": 0.10
|
|
149
|
+
},
|
|
150
|
+
# Callbacks Γ(R)
|
|
151
|
+
"CALLBACKS_STRICT": False, # si True, un error en callback detiene; si False, se loguea y continúa
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
# -------------------------
|
|
156
|
+
# Utilidades
|
|
157
|
+
# -------------------------
|
|
158
|
+
|
|
159
|
+
def attach_defaults(G, override: bool = False) -> None:
|
|
160
|
+
"""Escribe DEFAULTS en G.graph (sin sobreescribir si override=False)."""
|
|
161
|
+
G.graph.setdefault("_tnfr_defaults_attached", False)
|
|
162
|
+
for k, v in DEFAULTS.items():
|
|
163
|
+
if override or k not in G.graph:
|
|
164
|
+
G.graph[k] = v
|
|
165
|
+
G.graph["_tnfr_defaults_attached"] = True
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def merge_overrides(G, **overrides) -> None:
|
|
169
|
+
"""Aplica cambios puntuales a G.graph.
|
|
170
|
+
Útil para ajustar pesos sin tocar DEFAULTS globales.
|
|
171
|
+
"""
|
|
172
|
+
for k, v in overrides.items():
|
|
173
|
+
G.graph[k] = v
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
# Alias exportados por conveniencia (evita imports circulares)
|
|
177
|
+
ALIAS_VF = ("νf", "nu_f", "nu-f", "nu", "freq", "frequency")
|
|
178
|
+
ALIAS_THETA = ("θ", "theta", "fase", "phi", "phase")
|
|
179
|
+
ALIAS_DNFR = ("ΔNFR", "delta_nfr", "dnfr")
|
|
180
|
+
ALIAS_EPI = ("EPI", "psi", "PSI", "value")
|
|
181
|
+
ALIAS_SI = ("Si", "sense_index", "S_i", "sense", "meaning_index")
|
|
182
|
+
ALIAS_dEPI = ("dEPI_dt", "dpsi_dt", "dEPI", "velocity")
|
|
183
|
+
ALIAS_D2EPI = ("d2EPI_dt2", "d2psi_dt2", "d2EPI", "accel")
|