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.

Files changed (365) hide show
  1. tnfr/__init__.py +334 -50
  2. tnfr/__init__.pyi +33 -0
  3. tnfr/_compat.py +10 -0
  4. tnfr/_generated_version.py +34 -0
  5. tnfr/_version.py +49 -0
  6. tnfr/_version.pyi +7 -0
  7. tnfr/alias.py +214 -37
  8. tnfr/alias.pyi +108 -0
  9. tnfr/backends/__init__.py +354 -0
  10. tnfr/backends/jax_backend.py +173 -0
  11. tnfr/backends/numpy_backend.py +238 -0
  12. tnfr/backends/optimized_numpy.py +420 -0
  13. tnfr/backends/torch_backend.py +408 -0
  14. tnfr/cache.py +149 -556
  15. tnfr/cache.pyi +13 -0
  16. tnfr/cli/__init__.py +51 -16
  17. tnfr/cli/__init__.pyi +26 -0
  18. tnfr/cli/arguments.py +344 -32
  19. tnfr/cli/arguments.pyi +29 -0
  20. tnfr/cli/execution.py +676 -50
  21. tnfr/cli/execution.pyi +70 -0
  22. tnfr/cli/interactive_validator.py +614 -0
  23. tnfr/cli/utils.py +18 -3
  24. tnfr/cli/utils.pyi +7 -0
  25. tnfr/cli/validate.py +236 -0
  26. tnfr/compat/__init__.py +85 -0
  27. tnfr/compat/dataclass.py +136 -0
  28. tnfr/compat/jsonschema_stub.py +61 -0
  29. tnfr/compat/matplotlib_stub.py +73 -0
  30. tnfr/compat/numpy_stub.py +155 -0
  31. tnfr/config/__init__.py +224 -0
  32. tnfr/config/__init__.pyi +10 -0
  33. tnfr/{constants_glyphs.py → config/constants.py} +26 -20
  34. tnfr/config/constants.pyi +12 -0
  35. tnfr/config/defaults.py +54 -0
  36. tnfr/{constants/core.py → config/defaults_core.py} +59 -6
  37. tnfr/config/defaults_init.py +33 -0
  38. tnfr/config/defaults_metric.py +104 -0
  39. tnfr/config/feature_flags.py +81 -0
  40. tnfr/config/feature_flags.pyi +16 -0
  41. tnfr/config/glyph_constants.py +31 -0
  42. tnfr/config/init.py +77 -0
  43. tnfr/config/init.pyi +8 -0
  44. tnfr/config/operator_names.py +254 -0
  45. tnfr/config/operator_names.pyi +36 -0
  46. tnfr/config/physics_derivation.py +354 -0
  47. tnfr/config/presets.py +83 -0
  48. tnfr/config/presets.pyi +7 -0
  49. tnfr/config/security.py +927 -0
  50. tnfr/config/thresholds.py +114 -0
  51. tnfr/config/tnfr_config.py +498 -0
  52. tnfr/constants/__init__.py +51 -133
  53. tnfr/constants/__init__.pyi +92 -0
  54. tnfr/constants/aliases.py +33 -0
  55. tnfr/constants/aliases.pyi +27 -0
  56. tnfr/constants/init.py +3 -1
  57. tnfr/constants/init.pyi +12 -0
  58. tnfr/constants/metric.py +9 -15
  59. tnfr/constants/metric.pyi +19 -0
  60. tnfr/core/__init__.py +33 -0
  61. tnfr/core/container.py +226 -0
  62. tnfr/core/default_implementations.py +329 -0
  63. tnfr/core/interfaces.py +279 -0
  64. tnfr/dynamics/__init__.py +213 -633
  65. tnfr/dynamics/__init__.pyi +83 -0
  66. tnfr/dynamics/adaptation.py +267 -0
  67. tnfr/dynamics/adaptation.pyi +7 -0
  68. tnfr/dynamics/adaptive_sequences.py +189 -0
  69. tnfr/dynamics/adaptive_sequences.pyi +14 -0
  70. tnfr/dynamics/aliases.py +23 -0
  71. tnfr/dynamics/aliases.pyi +19 -0
  72. tnfr/dynamics/bifurcation.py +232 -0
  73. tnfr/dynamics/canonical.py +229 -0
  74. tnfr/dynamics/canonical.pyi +48 -0
  75. tnfr/dynamics/coordination.py +385 -0
  76. tnfr/dynamics/coordination.pyi +25 -0
  77. tnfr/dynamics/dnfr.py +2699 -398
  78. tnfr/dynamics/dnfr.pyi +26 -0
  79. tnfr/dynamics/dynamic_limits.py +225 -0
  80. tnfr/dynamics/feedback.py +252 -0
  81. tnfr/dynamics/feedback.pyi +24 -0
  82. tnfr/dynamics/fused_dnfr.py +454 -0
  83. tnfr/dynamics/homeostasis.py +157 -0
  84. tnfr/dynamics/homeostasis.pyi +14 -0
  85. tnfr/dynamics/integrators.py +496 -102
  86. tnfr/dynamics/integrators.pyi +36 -0
  87. tnfr/dynamics/learning.py +310 -0
  88. tnfr/dynamics/learning.pyi +33 -0
  89. tnfr/dynamics/metabolism.py +254 -0
  90. tnfr/dynamics/nbody.py +796 -0
  91. tnfr/dynamics/nbody_tnfr.py +783 -0
  92. tnfr/dynamics/propagation.py +326 -0
  93. tnfr/dynamics/runtime.py +908 -0
  94. tnfr/dynamics/runtime.pyi +77 -0
  95. tnfr/dynamics/sampling.py +10 -5
  96. tnfr/dynamics/sampling.pyi +7 -0
  97. tnfr/dynamics/selectors.py +711 -0
  98. tnfr/dynamics/selectors.pyi +85 -0
  99. tnfr/dynamics/structural_clip.py +207 -0
  100. tnfr/errors/__init__.py +37 -0
  101. tnfr/errors/contextual.py +492 -0
  102. tnfr/execution.py +77 -55
  103. tnfr/execution.pyi +45 -0
  104. tnfr/extensions/__init__.py +205 -0
  105. tnfr/extensions/__init__.pyi +18 -0
  106. tnfr/extensions/base.py +173 -0
  107. tnfr/extensions/base.pyi +35 -0
  108. tnfr/extensions/business/__init__.py +71 -0
  109. tnfr/extensions/business/__init__.pyi +11 -0
  110. tnfr/extensions/business/cookbook.py +88 -0
  111. tnfr/extensions/business/cookbook.pyi +8 -0
  112. tnfr/extensions/business/health_analyzers.py +202 -0
  113. tnfr/extensions/business/health_analyzers.pyi +9 -0
  114. tnfr/extensions/business/patterns.py +183 -0
  115. tnfr/extensions/business/patterns.pyi +8 -0
  116. tnfr/extensions/medical/__init__.py +73 -0
  117. tnfr/extensions/medical/__init__.pyi +11 -0
  118. tnfr/extensions/medical/cookbook.py +88 -0
  119. tnfr/extensions/medical/cookbook.pyi +8 -0
  120. tnfr/extensions/medical/health_analyzers.py +181 -0
  121. tnfr/extensions/medical/health_analyzers.pyi +9 -0
  122. tnfr/extensions/medical/patterns.py +163 -0
  123. tnfr/extensions/medical/patterns.pyi +8 -0
  124. tnfr/flatten.py +29 -50
  125. tnfr/flatten.pyi +21 -0
  126. tnfr/gamma.py +66 -53
  127. tnfr/gamma.pyi +36 -0
  128. tnfr/glyph_history.py +144 -57
  129. tnfr/glyph_history.pyi +35 -0
  130. tnfr/glyph_runtime.py +19 -0
  131. tnfr/glyph_runtime.pyi +8 -0
  132. tnfr/immutable.py +70 -30
  133. tnfr/immutable.pyi +36 -0
  134. tnfr/initialization.py +22 -16
  135. tnfr/initialization.pyi +65 -0
  136. tnfr/io.py +5 -241
  137. tnfr/io.pyi +13 -0
  138. tnfr/locking.pyi +7 -0
  139. tnfr/mathematics/__init__.py +79 -0
  140. tnfr/mathematics/backend.py +453 -0
  141. tnfr/mathematics/backend.pyi +99 -0
  142. tnfr/mathematics/dynamics.py +408 -0
  143. tnfr/mathematics/dynamics.pyi +90 -0
  144. tnfr/mathematics/epi.py +391 -0
  145. tnfr/mathematics/epi.pyi +65 -0
  146. tnfr/mathematics/generators.py +242 -0
  147. tnfr/mathematics/generators.pyi +29 -0
  148. tnfr/mathematics/metrics.py +119 -0
  149. tnfr/mathematics/metrics.pyi +16 -0
  150. tnfr/mathematics/operators.py +239 -0
  151. tnfr/mathematics/operators.pyi +59 -0
  152. tnfr/mathematics/operators_factory.py +124 -0
  153. tnfr/mathematics/operators_factory.pyi +11 -0
  154. tnfr/mathematics/projection.py +87 -0
  155. tnfr/mathematics/projection.pyi +33 -0
  156. tnfr/mathematics/runtime.py +182 -0
  157. tnfr/mathematics/runtime.pyi +64 -0
  158. tnfr/mathematics/spaces.py +256 -0
  159. tnfr/mathematics/spaces.pyi +83 -0
  160. tnfr/mathematics/transforms.py +305 -0
  161. tnfr/mathematics/transforms.pyi +62 -0
  162. tnfr/metrics/__init__.py +47 -9
  163. tnfr/metrics/__init__.pyi +20 -0
  164. tnfr/metrics/buffer_cache.py +163 -0
  165. tnfr/metrics/buffer_cache.pyi +24 -0
  166. tnfr/metrics/cache_utils.py +214 -0
  167. tnfr/metrics/coherence.py +1510 -330
  168. tnfr/metrics/coherence.pyi +129 -0
  169. tnfr/metrics/common.py +23 -16
  170. tnfr/metrics/common.pyi +35 -0
  171. tnfr/metrics/core.py +251 -36
  172. tnfr/metrics/core.pyi +13 -0
  173. tnfr/metrics/diagnosis.py +709 -110
  174. tnfr/metrics/diagnosis.pyi +86 -0
  175. tnfr/metrics/emergence.py +245 -0
  176. tnfr/metrics/export.py +60 -18
  177. tnfr/metrics/export.pyi +7 -0
  178. tnfr/metrics/glyph_timing.py +233 -43
  179. tnfr/metrics/glyph_timing.pyi +81 -0
  180. tnfr/metrics/learning_metrics.py +280 -0
  181. tnfr/metrics/learning_metrics.pyi +21 -0
  182. tnfr/metrics/phase_coherence.py +351 -0
  183. tnfr/metrics/phase_compatibility.py +349 -0
  184. tnfr/metrics/reporting.py +63 -28
  185. tnfr/metrics/reporting.pyi +25 -0
  186. tnfr/metrics/sense_index.py +1126 -43
  187. tnfr/metrics/sense_index.pyi +9 -0
  188. tnfr/metrics/trig.py +215 -23
  189. tnfr/metrics/trig.pyi +13 -0
  190. tnfr/metrics/trig_cache.py +148 -24
  191. tnfr/metrics/trig_cache.pyi +10 -0
  192. tnfr/multiscale/__init__.py +32 -0
  193. tnfr/multiscale/hierarchical.py +517 -0
  194. tnfr/node.py +646 -140
  195. tnfr/node.pyi +139 -0
  196. tnfr/observers.py +160 -45
  197. tnfr/observers.pyi +31 -0
  198. tnfr/ontosim.py +23 -19
  199. tnfr/ontosim.pyi +28 -0
  200. tnfr/operators/__init__.py +1358 -106
  201. tnfr/operators/__init__.pyi +31 -0
  202. tnfr/operators/algebra.py +277 -0
  203. tnfr/operators/canonical_patterns.py +420 -0
  204. tnfr/operators/cascade.py +267 -0
  205. tnfr/operators/cycle_detection.py +358 -0
  206. tnfr/operators/definitions.py +4108 -0
  207. tnfr/operators/definitions.pyi +78 -0
  208. tnfr/operators/grammar.py +1164 -0
  209. tnfr/operators/grammar.pyi +140 -0
  210. tnfr/operators/hamiltonian.py +710 -0
  211. tnfr/operators/health_analyzer.py +809 -0
  212. tnfr/operators/jitter.py +107 -38
  213. tnfr/operators/jitter.pyi +11 -0
  214. tnfr/operators/lifecycle.py +314 -0
  215. tnfr/operators/metabolism.py +618 -0
  216. tnfr/operators/metrics.py +2138 -0
  217. tnfr/operators/network_analysis/__init__.py +27 -0
  218. tnfr/operators/network_analysis/source_detection.py +186 -0
  219. tnfr/operators/nodal_equation.py +395 -0
  220. tnfr/operators/pattern_detection.py +660 -0
  221. tnfr/operators/patterns.py +669 -0
  222. tnfr/operators/postconditions/__init__.py +38 -0
  223. tnfr/operators/postconditions/mutation.py +236 -0
  224. tnfr/operators/preconditions/__init__.py +1226 -0
  225. tnfr/operators/preconditions/coherence.py +305 -0
  226. tnfr/operators/preconditions/dissonance.py +236 -0
  227. tnfr/operators/preconditions/emission.py +128 -0
  228. tnfr/operators/preconditions/mutation.py +580 -0
  229. tnfr/operators/preconditions/reception.py +125 -0
  230. tnfr/operators/preconditions/resonance.py +364 -0
  231. tnfr/operators/registry.py +74 -0
  232. tnfr/operators/registry.pyi +9 -0
  233. tnfr/operators/remesh.py +1415 -91
  234. tnfr/operators/remesh.pyi +26 -0
  235. tnfr/operators/structural_units.py +268 -0
  236. tnfr/operators/unified_grammar.py +105 -0
  237. tnfr/parallel/__init__.py +54 -0
  238. tnfr/parallel/auto_scaler.py +234 -0
  239. tnfr/parallel/distributed.py +384 -0
  240. tnfr/parallel/engine.py +238 -0
  241. tnfr/parallel/gpu_engine.py +420 -0
  242. tnfr/parallel/monitoring.py +248 -0
  243. tnfr/parallel/partitioner.py +459 -0
  244. tnfr/py.typed +0 -0
  245. tnfr/recipes/__init__.py +22 -0
  246. tnfr/recipes/cookbook.py +743 -0
  247. tnfr/rng.py +75 -151
  248. tnfr/rng.pyi +26 -0
  249. tnfr/schemas/__init__.py +8 -0
  250. tnfr/schemas/grammar.json +94 -0
  251. tnfr/sdk/__init__.py +107 -0
  252. tnfr/sdk/__init__.pyi +19 -0
  253. tnfr/sdk/adaptive_system.py +173 -0
  254. tnfr/sdk/adaptive_system.pyi +21 -0
  255. tnfr/sdk/builders.py +370 -0
  256. tnfr/sdk/builders.pyi +51 -0
  257. tnfr/sdk/fluent.py +1121 -0
  258. tnfr/sdk/fluent.pyi +74 -0
  259. tnfr/sdk/templates.py +342 -0
  260. tnfr/sdk/templates.pyi +41 -0
  261. tnfr/sdk/utils.py +341 -0
  262. tnfr/secure_config.py +46 -0
  263. tnfr/security/__init__.py +70 -0
  264. tnfr/security/database.py +514 -0
  265. tnfr/security/subprocess.py +503 -0
  266. tnfr/security/validation.py +290 -0
  267. tnfr/selector.py +59 -22
  268. tnfr/selector.pyi +19 -0
  269. tnfr/sense.py +92 -67
  270. tnfr/sense.pyi +23 -0
  271. tnfr/services/__init__.py +17 -0
  272. tnfr/services/orchestrator.py +325 -0
  273. tnfr/sparse/__init__.py +39 -0
  274. tnfr/sparse/representations.py +492 -0
  275. tnfr/structural.py +639 -263
  276. tnfr/structural.pyi +83 -0
  277. tnfr/telemetry/__init__.py +35 -0
  278. tnfr/telemetry/cache_metrics.py +226 -0
  279. tnfr/telemetry/cache_metrics.pyi +64 -0
  280. tnfr/telemetry/nu_f.py +422 -0
  281. tnfr/telemetry/nu_f.pyi +108 -0
  282. tnfr/telemetry/verbosity.py +36 -0
  283. tnfr/telemetry/verbosity.pyi +15 -0
  284. tnfr/tokens.py +2 -4
  285. tnfr/tokens.pyi +36 -0
  286. tnfr/tools/__init__.py +20 -0
  287. tnfr/tools/domain_templates.py +478 -0
  288. tnfr/tools/sequence_generator.py +846 -0
  289. tnfr/topology/__init__.py +13 -0
  290. tnfr/topology/asymmetry.py +151 -0
  291. tnfr/trace.py +300 -126
  292. tnfr/trace.pyi +42 -0
  293. tnfr/tutorials/__init__.py +38 -0
  294. tnfr/tutorials/autonomous_evolution.py +285 -0
  295. tnfr/tutorials/interactive.py +1576 -0
  296. tnfr/tutorials/structural_metabolism.py +238 -0
  297. tnfr/types.py +743 -12
  298. tnfr/types.pyi +357 -0
  299. tnfr/units.py +68 -0
  300. tnfr/units.pyi +13 -0
  301. tnfr/utils/__init__.py +282 -0
  302. tnfr/utils/__init__.pyi +215 -0
  303. tnfr/utils/cache.py +4223 -0
  304. tnfr/utils/cache.pyi +470 -0
  305. tnfr/{callback_utils.py → utils/callbacks.py} +26 -39
  306. tnfr/utils/callbacks.pyi +49 -0
  307. tnfr/utils/chunks.py +108 -0
  308. tnfr/utils/chunks.pyi +22 -0
  309. tnfr/utils/data.py +428 -0
  310. tnfr/utils/data.pyi +74 -0
  311. tnfr/utils/graph.py +85 -0
  312. tnfr/utils/graph.pyi +10 -0
  313. tnfr/utils/init.py +821 -0
  314. tnfr/utils/init.pyi +80 -0
  315. tnfr/utils/io.py +559 -0
  316. tnfr/utils/io.pyi +66 -0
  317. tnfr/{helpers → utils}/numeric.py +51 -24
  318. tnfr/utils/numeric.pyi +21 -0
  319. tnfr/validation/__init__.py +257 -0
  320. tnfr/validation/__init__.pyi +85 -0
  321. tnfr/validation/compatibility.py +460 -0
  322. tnfr/validation/compatibility.pyi +6 -0
  323. tnfr/validation/config.py +73 -0
  324. tnfr/validation/graph.py +139 -0
  325. tnfr/validation/graph.pyi +18 -0
  326. tnfr/validation/input_validation.py +755 -0
  327. tnfr/validation/invariants.py +712 -0
  328. tnfr/validation/rules.py +253 -0
  329. tnfr/validation/rules.pyi +44 -0
  330. tnfr/validation/runtime.py +279 -0
  331. tnfr/validation/runtime.pyi +28 -0
  332. tnfr/validation/sequence_validator.py +162 -0
  333. tnfr/validation/soft_filters.py +170 -0
  334. tnfr/validation/soft_filters.pyi +32 -0
  335. tnfr/validation/spectral.py +164 -0
  336. tnfr/validation/spectral.pyi +42 -0
  337. tnfr/validation/validator.py +1266 -0
  338. tnfr/validation/window.py +39 -0
  339. tnfr/validation/window.pyi +1 -0
  340. tnfr/visualization/__init__.py +98 -0
  341. tnfr/visualization/cascade_viz.py +256 -0
  342. tnfr/visualization/hierarchy.py +284 -0
  343. tnfr/visualization/sequence_plotter.py +784 -0
  344. tnfr/viz/__init__.py +60 -0
  345. tnfr/viz/matplotlib.py +278 -0
  346. tnfr/viz/matplotlib.pyi +35 -0
  347. tnfr-8.5.0.dist-info/METADATA +573 -0
  348. tnfr-8.5.0.dist-info/RECORD +353 -0
  349. {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/entry_points.txt +1 -0
  350. {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/licenses/LICENSE.md +1 -1
  351. tnfr/collections_utils.py +0 -300
  352. tnfr/config.py +0 -32
  353. tnfr/grammar.py +0 -344
  354. tnfr/graph_utils.py +0 -84
  355. tnfr/helpers/__init__.py +0 -71
  356. tnfr/import_utils.py +0 -228
  357. tnfr/json_utils.py +0 -162
  358. tnfr/logging_utils.py +0 -116
  359. tnfr/presets.py +0 -60
  360. tnfr/validators.py +0 -84
  361. tnfr/value_utils.py +0 -59
  362. tnfr-4.5.2.dist-info/METADATA +0 -379
  363. tnfr-4.5.2.dist-info/RECORD +0 -67
  364. {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/WHEEL +0 -0
  365. {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/top_level.txt +0 -0
@@ -1,144 +1,56 @@
1
- """Shared constants."""
1
+ """Shared constants (backward compatibility layer).
2
2
 
3
- from __future__ import annotations
3
+ This module re-exports configuration from tnfr.config for backward compatibility.
4
+ New code should import directly from tnfr.config.
5
+
6
+ Migration Path:
7
+ Old: from tnfr.constants import DEFAULTS, inject_defaults
8
+ New: from tnfr.config import DEFAULTS, inject_defaults
9
+ """
4
10
 
5
- from typing import Any, Callable
6
- from collections.abc import Mapping
7
- import copy
8
- from types import MappingProxyType
11
+ from __future__ import annotations
9
12
 
10
- from .core import CORE_DEFAULTS, REMESH_DEFAULTS
11
- from .init import INIT_DEFAULTS
12
- from .metric import (
13
+ # Re-export all constants and utilities from tnfr.config
14
+ from ..config import (
15
+ ALIASES,
16
+ CANONICAL_STATE_TOKENS,
17
+ COHERENCE,
18
+ CORE_DEFAULTS,
19
+ D2EPI_PRIMARY,
20
+ D2VF_PRIMARY,
21
+ DEFAULT_SECTIONS,
22
+ DEFAULTS,
23
+ DIAGNOSIS,
24
+ DNFR_PRIMARY,
25
+ EPI_KIND_PRIMARY,
26
+ EPI_PRIMARY,
27
+ GRAMMAR_CANON,
28
+ INIT_DEFAULTS,
13
29
  METRIC_DEFAULTS,
30
+ METRICS,
31
+ REMESH_DEFAULTS,
32
+ SI_PRIMARY,
14
33
  SIGMA,
34
+ STATE_DISSONANT,
35
+ STATE_STABLE,
36
+ STATE_TRANSITION,
37
+ THETA_KEY,
38
+ THETA_PRIMARY,
15
39
  TRACE,
16
- METRICS,
17
- GRAMMAR_CANON,
18
- COHERENCE,
19
- DIAGNOSIS,
20
- )
21
-
22
- from ..immutable import _is_immutable
23
-
24
- try: # pragma: no cover - optional dependency
25
- from ..cache import ensure_node_offset_map
26
- except ImportError: # noqa: BLE001 - allow any import error
27
- ensure_node_offset_map = None
28
-
29
- # Secciones individuales exportadas
30
- DEFAULT_SECTIONS: Mapping[str, Mapping[str, Any]] = MappingProxyType(
31
- {
32
- "core": CORE_DEFAULTS,
33
- "init": INIT_DEFAULTS,
34
- "remesh": REMESH_DEFAULTS,
35
- "metric": METRIC_DEFAULTS,
36
- }
40
+ VF_KEY,
41
+ VF_PRIMARY,
42
+ dEPI_PRIMARY,
43
+ dSI_PRIMARY,
44
+ dVF_PRIMARY,
45
+ ensure_node_offset_map,
46
+ get_aliases,
47
+ get_graph_param,
48
+ get_param,
49
+ inject_defaults,
50
+ merge_overrides,
51
+ normalise_state_token,
37
52
  )
38
53
 
39
- # Diccionario combinado exportado
40
- # Unimos los diccionarios en orden de menor a mayor prioridad para que los
41
- # valores de ``METRIC_DEFAULTS`` sobrescriban al resto, como hacía
42
- # ``ChainMap``.
43
- DEFAULTS: Mapping[str, Any] = MappingProxyType(
44
- CORE_DEFAULTS | INIT_DEFAULTS | REMESH_DEFAULTS | METRIC_DEFAULTS
45
- )
46
-
47
- # -------------------------
48
- # Utilidades
49
- # -------------------------
50
-
51
-
52
- def inject_defaults(
53
- G, defaults: Mapping[str, Any] = DEFAULTS, override: bool = False
54
- ) -> None:
55
- """Inject ``defaults`` into ``G.graph``.
56
-
57
- ``defaults`` is usually ``DEFAULTS``, combining all sub-dictionaries.
58
- If ``override`` is ``True`` existing values are overwritten. Immutable
59
- values (numbers, strings, tuples, etc.) are assigned directly. Tuples are
60
- inspected recursively; if any element is mutable, a ``deepcopy`` is made
61
- to avoid shared state.
62
- """
63
- G.graph.setdefault("_tnfr_defaults_attached", False)
64
- for k, v in defaults.items():
65
- if override or k not in G.graph:
66
- G.graph[k] = v if _is_immutable(v) else copy.deepcopy(v)
67
- G.graph["_tnfr_defaults_attached"] = True
68
- if ensure_node_offset_map is not None:
69
- ensure_node_offset_map(G)
70
-
71
-
72
- def merge_overrides(G, **overrides) -> None:
73
- """Apply specific changes to ``G.graph``.
74
-
75
- Non-immutable values are deep-copied to avoid shared state with
76
- :data:`DEFAULTS`.
77
- """
78
- for key, value in overrides.items():
79
- if key not in DEFAULTS:
80
- raise KeyError(f"Parámetro desconocido: '{key}'")
81
- G.graph[key] = value if _is_immutable(value) else copy.deepcopy(value)
82
-
83
-
84
- def get_param(G, key: str):
85
- """Retrieve a parameter from ``G.graph`` or fall back to defaults."""
86
- if key in G.graph:
87
- return G.graph[key]
88
- if key not in DEFAULTS:
89
- raise KeyError(f"Parámetro desconocido: '{key}'")
90
- return DEFAULTS[key]
91
-
92
-
93
- def get_graph_param(G, key: str, cast: Callable[[Any], Any] = float):
94
- """Return ``key`` from ``G.graph`` applying ``cast``.
95
-
96
- The ``cast`` argument must be a function (e.g. ``float``, ``int``,
97
- ``bool``). If the stored value is ``None`` it is returned without
98
- casting.
99
- """
100
- val = get_param(G, key)
101
- return None if val is None else cast(val)
102
-
103
-
104
- # Claves canónicas con nombres ASCII
105
- VF_KEY = "νf"
106
- THETA_KEY = "θ"
107
-
108
- # Mapa de aliases para atributos nodales
109
- ALIASES: dict[str, tuple[str, ...]] = {
110
- "VF": (VF_KEY, "nu_f", "nu-f", "nu", "freq", "frequency"),
111
- "THETA": (THETA_KEY, "theta", "fase", "phi", "phase"),
112
- "DNFR": ("ΔNFR", "delta_nfr", "dnfr"),
113
- "EPI": ("EPI", "psi", "PSI", "value"),
114
- "EPI_KIND": ("EPI_kind", "epi_kind", "source_glyph"),
115
- "SI": ("Si", "sense_index", "S_i", "sense", "meaning_index"),
116
- "DEPI": ("dEPI_dt", "dpsi_dt", "dEPI", "velocity"),
117
- "D2EPI": ("d2EPI_dt2", "d2psi_dt2", "d2EPI", "accel"),
118
- "DVF": ("dνf_dt", "dvf_dt", "dnu_dt", "dvf"),
119
- "D2VF": ("d2νf_dt2", "d2vf_dt2", "d2nu_dt2", "B"),
120
- "DSI": ("δSi", "delta_Si", "dSi"),
121
- }
122
-
123
-
124
- def get_aliases(key: str) -> tuple[str, ...]:
125
- """Return alias tuple for canonical ``key``."""
126
-
127
- return ALIASES[key]
128
-
129
-
130
- VF_PRIMARY = get_aliases("VF")[0]
131
- THETA_PRIMARY = get_aliases("THETA")[0]
132
- DNFR_PRIMARY = get_aliases("DNFR")[0]
133
- EPI_PRIMARY = get_aliases("EPI")[0]
134
- EPI_KIND_PRIMARY = get_aliases("EPI_KIND")[0]
135
- SI_PRIMARY = get_aliases("SI")[0]
136
- dEPI_PRIMARY = get_aliases("DEPI")[0]
137
- D2EPI_PRIMARY = get_aliases("D2EPI")[0]
138
- dVF_PRIMARY = get_aliases("DVF")[0]
139
- D2VF_PRIMARY = get_aliases("D2VF")[0]
140
- dSI_PRIMARY = get_aliases("DSI")[0]
141
-
142
54
  __all__ = (
143
55
  "CORE_DEFAULTS",
144
56
  "INIT_DEFAULTS",
@@ -171,4 +83,10 @@ __all__ = (
171
83
  "dVF_PRIMARY",
172
84
  "D2VF_PRIMARY",
173
85
  "dSI_PRIMARY",
86
+ "STATE_STABLE",
87
+ "STATE_TRANSITION",
88
+ "STATE_DISSONANT",
89
+ "CANONICAL_STATE_TOKENS",
90
+ "normalise_state_token",
91
+ "ensure_node_offset_map",
174
92
  )
@@ -0,0 +1,92 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Callable, TypeVar
5
+
6
+ from ..types import GraphLike, TNFRConfigValue
7
+ from .core import CORE_DEFAULTS as CORE_DEFAULTS
8
+ from .core import REMESH_DEFAULTS as REMESH_DEFAULTS
9
+ from .init import INIT_DEFAULTS as INIT_DEFAULTS
10
+ from .metric import COHERENCE as COHERENCE
11
+ from .metric import DIAGNOSIS as DIAGNOSIS
12
+ from .metric import GRAMMAR_CANON as GRAMMAR_CANON
13
+ from .metric import METRIC_DEFAULTS as METRIC_DEFAULTS
14
+ from .metric import METRICS as METRICS
15
+ from .metric import SIGMA as SIGMA
16
+ from .metric import TRACE as TRACE
17
+
18
+ T = TypeVar("T")
19
+
20
+ __all__ = (
21
+ "CORE_DEFAULTS",
22
+ "INIT_DEFAULTS",
23
+ "REMESH_DEFAULTS",
24
+ "METRIC_DEFAULTS",
25
+ "SIGMA",
26
+ "TRACE",
27
+ "METRICS",
28
+ "GRAMMAR_CANON",
29
+ "COHERENCE",
30
+ "DIAGNOSIS",
31
+ "DEFAULTS",
32
+ "DEFAULT_SECTIONS",
33
+ "ALIASES",
34
+ "inject_defaults",
35
+ "merge_overrides",
36
+ "get_param",
37
+ "get_graph_param",
38
+ "get_aliases",
39
+ "VF_KEY",
40
+ "THETA_KEY",
41
+ "VF_PRIMARY",
42
+ "THETA_PRIMARY",
43
+ "DNFR_PRIMARY",
44
+ "EPI_PRIMARY",
45
+ "EPI_KIND_PRIMARY",
46
+ "SI_PRIMARY",
47
+ "dEPI_PRIMARY",
48
+ "D2EPI_PRIMARY",
49
+ "dVF_PRIMARY",
50
+ "D2VF_PRIMARY",
51
+ "dSI_PRIMARY",
52
+ "STATE_STABLE",
53
+ "STATE_TRANSITION",
54
+ "STATE_DISSONANT",
55
+ "CANONICAL_STATE_TOKENS",
56
+ "normalise_state_token",
57
+ )
58
+
59
+ ensure_node_offset_map: Callable[[GraphLike], None] | None
60
+ DEFAULT_SECTIONS: Mapping[str, Mapping[str, TNFRConfigValue]]
61
+ DEFAULTS: Mapping[str, TNFRConfigValue]
62
+ ALIASES: dict[str, tuple[str, ...]]
63
+ VF_KEY: str
64
+ THETA_KEY: str
65
+ VF_PRIMARY: str
66
+ THETA_PRIMARY: str
67
+ DNFR_PRIMARY: str
68
+ EPI_PRIMARY: str
69
+ EPI_KIND_PRIMARY: str
70
+ SI_PRIMARY: str
71
+ dEPI_PRIMARY: str
72
+ D2EPI_PRIMARY: str
73
+ dVF_PRIMARY: str
74
+ D2VF_PRIMARY: str
75
+ dSI_PRIMARY: str
76
+ STATE_STABLE: str
77
+ STATE_TRANSITION: str
78
+ STATE_DISSONANT: str
79
+ CANONICAL_STATE_TOKENS: frozenset[str]
80
+
81
+ def inject_defaults(
82
+ G: GraphLike,
83
+ defaults: Mapping[str, TNFRConfigValue] = ...,
84
+ override: bool = ...,
85
+ ) -> None: ...
86
+ def merge_overrides(G: GraphLike, **overrides: TNFRConfigValue) -> None: ...
87
+ def get_param(G: GraphLike, key: str) -> TNFRConfigValue: ...
88
+ def get_graph_param(
89
+ G: GraphLike, key: str, cast: Callable[[object], T] = ...
90
+ ) -> T | None: ...
91
+ def get_aliases(key: str) -> tuple[str, ...]: ...
92
+ def normalise_state_token(token: str) -> str: ...
@@ -0,0 +1,33 @@
1
+ """Shared alias constants for TNFR attributes."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from . import get_aliases
6
+
7
+ ALIAS_VF = get_aliases("VF")
8
+ ALIAS_THETA = get_aliases("THETA")
9
+ ALIAS_DNFR = get_aliases("DNFR")
10
+ ALIAS_EPI = get_aliases("EPI")
11
+ ALIAS_EPI_KIND = get_aliases("EPI_KIND")
12
+ ALIAS_SI = get_aliases("SI")
13
+ ALIAS_DEPI = get_aliases("DEPI")
14
+ ALIAS_D2EPI = get_aliases("D2EPI")
15
+ ALIAS_DVF = get_aliases("DVF")
16
+ ALIAS_D2VF = get_aliases("D2VF")
17
+ ALIAS_DSI = get_aliases("DSI")
18
+ ALIAS_EMISSION_TIMESTAMP = get_aliases("EMISSION_TIMESTAMP")
19
+
20
+ __all__ = [
21
+ "ALIAS_VF",
22
+ "ALIAS_THETA",
23
+ "ALIAS_DNFR",
24
+ "ALIAS_EPI",
25
+ "ALIAS_EPI_KIND",
26
+ "ALIAS_SI",
27
+ "ALIAS_DEPI",
28
+ "ALIAS_D2EPI",
29
+ "ALIAS_DVF",
30
+ "ALIAS_D2VF",
31
+ "ALIAS_DSI",
32
+ "ALIAS_EMISSION_TIMESTAMP",
33
+ ]
@@ -0,0 +1,27 @@
1
+ from _typeshed import Incomplete
2
+
3
+ __all__ = [
4
+ "ALIAS_VF",
5
+ "ALIAS_THETA",
6
+ "ALIAS_DNFR",
7
+ "ALIAS_EPI",
8
+ "ALIAS_EPI_KIND",
9
+ "ALIAS_SI",
10
+ "ALIAS_DEPI",
11
+ "ALIAS_D2EPI",
12
+ "ALIAS_DVF",
13
+ "ALIAS_D2VF",
14
+ "ALIAS_DSI",
15
+ ]
16
+
17
+ ALIAS_VF: Incomplete
18
+ ALIAS_THETA: Incomplete
19
+ ALIAS_DNFR: Incomplete
20
+ ALIAS_EPI: Incomplete
21
+ ALIAS_EPI_KIND: Incomplete
22
+ ALIAS_SI: Incomplete
23
+ ALIAS_DEPI: Incomplete
24
+ ALIAS_D2EPI: Incomplete
25
+ ALIAS_DVF: Incomplete
26
+ ALIAS_D2VF: Incomplete
27
+ ALIAS_DSI: Incomplete
tnfr/constants/init.py CHANGED
@@ -2,8 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from dataclasses import dataclass, asdict
6
5
  import math
6
+ from dataclasses import asdict
7
+
8
+ from ..compat.dataclass import dataclass
7
9
 
8
10
 
9
11
  @dataclass(frozen=True, slots=True)
@@ -0,0 +1,12 @@
1
+ from typing import Any
2
+
3
+ __all__: Any
4
+
5
+ def __getattr__(name: str) -> Any: ...
6
+
7
+ INIT_DEFAULTS: Any
8
+ InitDefaults: Any
9
+ annotations: Any
10
+ asdict: Any
11
+ dataclass: Any
12
+ math: Any
tnfr/constants/metric.py CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from dataclasses import dataclass, asdict, field
6
- from typing import Any
5
+ from dataclasses import asdict, field
7
6
  from types import MappingProxyType
7
+ from typing import Any
8
+
9
+ from ..compat.dataclass import dataclass
8
10
 
9
11
 
10
12
  @dataclass(frozen=True, slots=True)
@@ -27,7 +29,7 @@ class MetricDefaults:
27
29
  default_factory=lambda: {
28
30
  "enabled": True,
29
31
  "weight": "Si", # "Si" | "EPI" | "1"
30
- "smooth": 0.0, # EMA sobre el vector global (0=off)
32
+ "smooth": 0.0, # EMA over the global vector (0=off)
31
33
  "history_key": "sigma_global",
32
34
  "per_node": False,
33
35
  }
@@ -35,18 +37,7 @@ class MetricDefaults:
35
37
  TRACE: dict[str, Any] = field(
36
38
  default_factory=lambda: {
37
39
  "enabled": True,
38
- "capture": [
39
- "gamma",
40
- "grammar",
41
- "selector",
42
- "dnfr_weights",
43
- "si_weights",
44
- "callbacks",
45
- "thol_open_nodes",
46
- "sigma",
47
- "kuramoto",
48
- "glyph_counts",
49
- ],
40
+ "verbosity": "debug",
50
41
  "history_key": "trace_meta",
51
42
  }
52
43
  )
@@ -55,6 +46,8 @@ class MetricDefaults:
55
46
  "enabled": True,
56
47
  "save_by_node": True,
57
48
  "normalize_series": False,
49
+ "n_jobs": 1,
50
+ "verbosity": "debug",
58
51
  }
59
52
  )
60
53
  GRAMMAR_CANON: dict[str, Any] = field(
@@ -76,6 +69,7 @@ class MetricDefaults:
76
69
  "self_on_diag": True,
77
70
  "store_mode": "sparse",
78
71
  "threshold": 0.0,
72
+ "n_jobs": 1,
79
73
  "history_key": "W_sparse",
80
74
  "Wi_history_key": "W_i",
81
75
  "stats_history_key": "W_stats",
@@ -0,0 +1,19 @@
1
+ from typing import Any
2
+
3
+ __all__: Any
4
+
5
+ def __getattr__(name: str) -> Any: ...
6
+
7
+ COHERENCE: Any
8
+ DIAGNOSIS: Any
9
+ GRAMMAR_CANON: Any
10
+ METRICS: Any
11
+ METRIC_DEFAULTS: Any
12
+ MappingProxyType: Any
13
+ MetricDefaults: Any
14
+ SIGMA: Any
15
+ TRACE: Any
16
+ annotations: Any
17
+ asdict: Any
18
+ dataclass: Any
19
+ field: Any
tnfr/core/__init__.py ADDED
@@ -0,0 +1,33 @@
1
+ """Core architectural components for TNFR engine.
2
+
3
+ This package contains the foundational interfaces and dependency injection
4
+ infrastructure that enable separation of responsibilities across the TNFR
5
+ engine layers.
6
+
7
+ Public API
8
+ ----------
9
+ OperatorRegistry, ValidationService, DynamicsEngine, TelemetryCollector
10
+ Protocol interfaces defining contracts for each architectural layer.
11
+ TNFRContainer
12
+ Dependency injection container for configuring engine components.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from .container import TNFRContainer
18
+ from .interfaces import (
19
+ DynamicsEngine,
20
+ OperatorRegistry,
21
+ TelemetryCollector,
22
+ TraceContext,
23
+ ValidationService,
24
+ )
25
+
26
+ __all__ = (
27
+ "OperatorRegistry",
28
+ "ValidationService",
29
+ "DynamicsEngine",
30
+ "TelemetryCollector",
31
+ "TraceContext",
32
+ "TNFRContainer",
33
+ )