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
@@ -0,0 +1,155 @@
1
+ """Lightweight stub for numpy when it's not installed.
2
+
3
+ This stub provides minimal type compatibility for numpy when it's not installed,
4
+ allowing type checking to succeed. At runtime, actual numpy operations will fail
5
+ with informative errors if called without the real numpy package.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any, TYPE_CHECKING
11
+
12
+ __all__ = [
13
+ "ndarray",
14
+ "float64",
15
+ "float_",
16
+ "complex128",
17
+ "complexfloating",
18
+ "dtype",
19
+ "asarray",
20
+ "array",
21
+ "eye",
22
+ "zeros",
23
+ "ones",
24
+ "isfinite",
25
+ "all",
26
+ "allclose",
27
+ "diff",
28
+ "any",
29
+ "pi",
30
+ ]
31
+
32
+
33
+ class _NotInstalledError(RuntimeError):
34
+ """Raised when trying to use numpy operations without numpy installed."""
35
+
36
+ def __init__(self, operation: str = "numpy operation") -> None:
37
+ super().__init__(
38
+ f"Cannot perform {operation}: numpy is not installed. "
39
+ "Install it with: pip install numpy"
40
+ )
41
+
42
+
43
+ class ndarray:
44
+ """Stub for numpy.ndarray type."""
45
+
46
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
47
+ raise _NotInstalledError("array creation")
48
+
49
+ @property
50
+ def shape(self) -> tuple[int, ...]:
51
+ raise _NotInstalledError("array.shape")
52
+
53
+ @property
54
+ def ndim(self) -> int:
55
+ raise _NotInstalledError("array.ndim")
56
+
57
+ @property
58
+ def size(self) -> int:
59
+ raise _NotInstalledError("array.size")
60
+
61
+
62
+ class dtype:
63
+ """Stub for numpy.dtype type."""
64
+
65
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
66
+ raise _NotInstalledError("dtype")
67
+
68
+
69
+ class float64:
70
+ """Stub for numpy.float64 type."""
71
+
72
+ pass
73
+
74
+
75
+ class float_:
76
+ """Stub for numpy.float_ type."""
77
+
78
+ pass
79
+
80
+
81
+ class complex128:
82
+ """Stub for numpy.complex128 type."""
83
+
84
+ pass
85
+
86
+
87
+ class complexfloating:
88
+ """Stub for numpy.complexfloating type."""
89
+
90
+ pass
91
+
92
+
93
+ def asarray(*args: Any, **kwargs: Any) -> ndarray:
94
+ """Stub for numpy.asarray."""
95
+ raise _NotInstalledError("numpy.asarray")
96
+
97
+
98
+ def array(*args: Any, **kwargs: Any) -> ndarray:
99
+ """Stub for numpy.array."""
100
+ raise _NotInstalledError("numpy.array")
101
+
102
+
103
+ def eye(*args: Any, **kwargs: Any) -> ndarray:
104
+ """Stub for numpy.eye."""
105
+ raise _NotInstalledError("numpy.eye")
106
+
107
+
108
+ def zeros(*args: Any, **kwargs: Any) -> ndarray:
109
+ """Stub for numpy.zeros."""
110
+ raise _NotInstalledError("numpy.zeros")
111
+
112
+
113
+ def ones(*args: Any, **kwargs: Any) -> ndarray:
114
+ """Stub for numpy.ones."""
115
+ raise _NotInstalledError("numpy.ones")
116
+
117
+
118
+ def isfinite(*args: Any, **kwargs: Any) -> Any:
119
+ """Stub for numpy.isfinite."""
120
+ raise _NotInstalledError("numpy.isfinite")
121
+
122
+
123
+ def all(*args: Any, **kwargs: Any) -> Any:
124
+ """Stub for numpy.all."""
125
+ raise _NotInstalledError("numpy.all")
126
+
127
+
128
+ def allclose(*args: Any, **kwargs: Any) -> Any:
129
+ """Stub for numpy.allclose."""
130
+ raise _NotInstalledError("numpy.allclose")
131
+
132
+
133
+ def diff(*args: Any, **kwargs: Any) -> ndarray:
134
+ """Stub for numpy.diff."""
135
+ raise _NotInstalledError("numpy.diff")
136
+
137
+
138
+ def any(*args: Any, **kwargs: Any) -> Any:
139
+ """Stub for numpy.any."""
140
+ raise _NotInstalledError("numpy.any")
141
+
142
+
143
+ # Constants
144
+ pi: float = 3.141592653589793
145
+
146
+
147
+ if TYPE_CHECKING:
148
+ # Provide typing namespace for numpy.typing when used in TYPE_CHECKING blocks
149
+ class typing:
150
+ """Stub for numpy.typing module."""
151
+
152
+ class NDArray:
153
+ """Stub for numpy.typing.NDArray."""
154
+
155
+ pass
@@ -0,0 +1,224 @@
1
+ """Canonical TNFR configuration system.
2
+
3
+ This package provides the unified configuration system for TNFR, consolidating:
4
+ - TNFRConfig class with structural invariant validation
5
+ - Secure configuration management (moved from secure_config.py)
6
+ - All default configurations organized by subsystem
7
+ - TNFR semantic mapping (νf, θ, ΔNFR)
8
+
9
+ Single import path philosophy:
10
+ from tnfr.config import TNFRConfig, DEFAULTS, get_param
11
+
12
+ Key Changes (Phase 3):
13
+ - Consolidated constants from constants/ package
14
+ - Integrated secure_config functionality
15
+ - Added TNFR invariant validation
16
+ - Explicit structural coherence principles
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ from .defaults import (
22
+ COHERENCE,
23
+ CORE_DEFAULTS,
24
+ DEFAULT_SECTIONS,
25
+ DEFAULTS,
26
+ DIAGNOSIS,
27
+ GRAMMAR_CANON,
28
+ INIT_DEFAULTS,
29
+ METRIC_DEFAULTS,
30
+ METRICS,
31
+ REMESH_DEFAULTS,
32
+ SIGMA,
33
+ TRACE,
34
+ )
35
+ from .feature_flags import context_flags, get_flags
36
+ from .init import apply_config, load_config
37
+ from .thresholds import (
38
+ EPSILON_MIN_EMISSION,
39
+ EPI_LATENT_MAX,
40
+ MIN_NETWORK_DEGREE_COUPLING,
41
+ VF_BASAL_THRESHOLD,
42
+ )
43
+ from .tnfr_config import (
44
+ ALIASES,
45
+ CANONICAL_STATE_TOKENS,
46
+ D2EPI_PRIMARY,
47
+ D2VF_PRIMARY,
48
+ DNFR_KEY,
49
+ DNFR_PRIMARY,
50
+ EPI_KIND_PRIMARY,
51
+ EPI_PRIMARY,
52
+ SI_PRIMARY,
53
+ STATE_DISSONANT,
54
+ STATE_STABLE,
55
+ STATE_TRANSITION,
56
+ THETA_KEY,
57
+ THETA_PRIMARY,
58
+ TNFRConfig,
59
+ TNFRConfigError,
60
+ VF_KEY,
61
+ VF_PRIMARY,
62
+ dEPI_PRIMARY,
63
+ dSI_PRIMARY,
64
+ dVF_PRIMARY,
65
+ get_aliases,
66
+ normalise_state_token,
67
+ )
68
+
69
+ # Import compatibility utilities from constants (for backward compat)
70
+ # These will be re-exported through constants/__init__.py
71
+ try:
72
+ from ..utils import ensure_node_offset_map as _ensure_node_offset_map
73
+ except ImportError:
74
+ _ensure_node_offset_map = None
75
+
76
+ ensure_node_offset_map = _ensure_node_offset_map
77
+
78
+
79
+ # Legacy function wrappers that use TNFRConfig internally
80
+ def inject_defaults(G, defaults=None, override=False):
81
+ """Inject defaults into graph (backward compatible wrapper).
82
+
83
+ Uses TNFRConfig internally for validation.
84
+ """
85
+ config = TNFRConfig(defaults=defaults or DEFAULTS, validate_invariants=True)
86
+ config.inject_defaults(G, defaults=defaults or DEFAULTS, override=override)
87
+
88
+
89
+ def merge_overrides(G, **overrides):
90
+ """Apply specific overrides to graph configuration.
91
+
92
+ Parameters
93
+ ----------
94
+ G : GraphLike
95
+ The graph whose configuration should be updated.
96
+ **overrides
97
+ Keyword arguments mapping parameter names to new values.
98
+
99
+ Raises
100
+ ------
101
+ KeyError
102
+ If any parameter name is not present in DEFAULTS.
103
+ """
104
+ import copy
105
+ from ..immutable import _is_immutable
106
+ from ..types import TNFRConfigValue
107
+ from typing import cast
108
+
109
+ for key, value in overrides.items():
110
+ if key not in DEFAULTS:
111
+ raise KeyError(f"Unknown parameter: '{key}'")
112
+ G.graph[key] = (
113
+ value
114
+ if _is_immutable(value)
115
+ else cast(TNFRConfigValue, copy.deepcopy(value))
116
+ )
117
+
118
+
119
+ def get_param(G, key: str):
120
+ """Retrieve parameter from graph or defaults.
121
+
122
+ Parameters
123
+ ----------
124
+ G : GraphLike
125
+ Graph containing configuration.
126
+ key : str
127
+ Parameter name.
128
+
129
+ Returns
130
+ -------
131
+ TNFRConfigValue
132
+ Configuration value.
133
+
134
+ Raises
135
+ ------
136
+ KeyError
137
+ If key not found in graph or DEFAULTS.
138
+ """
139
+ if key in G.graph:
140
+ return G.graph[key]
141
+ if key not in DEFAULTS:
142
+ raise KeyError(f"Unknown parameter: '{key}'")
143
+ return DEFAULTS[key]
144
+
145
+
146
+ def get_graph_param(G, key: str, cast_fn=float):
147
+ """Return parameter from graph applying cast function.
148
+
149
+ Parameters
150
+ ----------
151
+ G : GraphLike
152
+ Graph containing configuration.
153
+ key : str
154
+ Parameter name.
155
+ cast_fn : callable, default=float
156
+ Function to cast value (e.g., float, int, bool).
157
+
158
+ Returns
159
+ -------
160
+ Any
161
+ Casted parameter value, or None if value is None.
162
+ """
163
+ val = get_param(G, key)
164
+ return None if val is None else cast_fn(val)
165
+
166
+
167
+ __all__ = (
168
+ # Main configuration class
169
+ "TNFRConfig",
170
+ "TNFRConfigError",
171
+ # File-based configuration
172
+ "load_config",
173
+ "apply_config",
174
+ # Feature flags
175
+ "get_flags",
176
+ "context_flags",
177
+ # Defaults and sections
178
+ "DEFAULTS",
179
+ "DEFAULT_SECTIONS",
180
+ "CORE_DEFAULTS",
181
+ "INIT_DEFAULTS",
182
+ "REMESH_DEFAULTS",
183
+ "METRIC_DEFAULTS",
184
+ "SIGMA",
185
+ "TRACE",
186
+ "METRICS",
187
+ "GRAMMAR_CANON",
188
+ "COHERENCE",
189
+ "DIAGNOSIS",
190
+ # Operator precondition thresholds
191
+ "EPI_LATENT_MAX",
192
+ "VF_BASAL_THRESHOLD",
193
+ "EPSILON_MIN_EMISSION",
194
+ "MIN_NETWORK_DEGREE_COUPLING",
195
+ # TNFR semantic aliases
196
+ "ALIASES",
197
+ "VF_KEY",
198
+ "THETA_KEY",
199
+ "DNFR_KEY",
200
+ "VF_PRIMARY",
201
+ "THETA_PRIMARY",
202
+ "DNFR_PRIMARY",
203
+ "EPI_PRIMARY",
204
+ "EPI_KIND_PRIMARY",
205
+ "SI_PRIMARY",
206
+ "dEPI_PRIMARY",
207
+ "D2EPI_PRIMARY",
208
+ "dVF_PRIMARY",
209
+ "D2VF_PRIMARY",
210
+ "dSI_PRIMARY",
211
+ # State tokens
212
+ "STATE_STABLE",
213
+ "STATE_TRANSITION",
214
+ "STATE_DISSONANT",
215
+ "CANONICAL_STATE_TOKENS",
216
+ # Utility functions
217
+ "get_aliases",
218
+ "normalise_state_token",
219
+ "inject_defaults",
220
+ "merge_overrides",
221
+ "get_param",
222
+ "get_graph_param",
223
+ "ensure_node_offset_map",
224
+ )
@@ -0,0 +1,10 @@
1
+ from typing import Any
2
+
3
+ __all__: Any
4
+
5
+ def __getattr__(name: str) -> Any: ...
6
+
7
+ apply_config: Any
8
+ load_config: Any
9
+ get_flags: Any
10
+ context_flags: Any
@@ -1,4 +1,4 @@
1
- """Default glyphs."""
1
+ """Canonical glyph constants tied to configuration presets."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -6,10 +6,10 @@ import math
6
6
  from types import MappingProxyType
7
7
  from typing import Mapping
8
8
 
9
- from .types import Glyph
9
+ from ..types import Glyph
10
10
 
11
11
  # -------------------------
12
- # Orden canónico y clasificaciones funcionales
12
+ # Canonical order and functional classifications
13
13
  # -------------------------
14
14
 
15
15
  GLYPHS_CANONICAL: tuple[str, ...] = (
@@ -30,26 +30,31 @@ GLYPHS_CANONICAL: tuple[str, ...] = (
30
30
 
31
31
  GLYPHS_CANONICAL_SET: frozenset[str] = frozenset(GLYPHS_CANONICAL)
32
32
 
33
- ESTABILIZADORES = (
33
+ STABILIZERS: tuple[str, ...] = (
34
34
  Glyph.IL.value,
35
35
  Glyph.RA.value,
36
36
  Glyph.UM.value,
37
37
  Glyph.SHA.value,
38
38
  )
39
39
 
40
- DISRUPTIVOS = (
40
+ DISRUPTORS: tuple[str, ...] = (
41
41
  Glyph.OZ.value,
42
42
  Glyph.ZHIR.value,
43
43
  Glyph.NAV.value,
44
44
  Glyph.THOL.value,
45
45
  )
46
46
 
47
- # Mapa general de agrupaciones glíficas para referencia cruzada.
47
+ # General map of glyph groupings for cross-reference.
48
+ #
49
+ # Spanish keys (``estabilizadores`` / ``disruptivos``) were removed in TNFR 7.0
50
+ # to keep the public surface English-only. Code that still referenced those
51
+ # identifiers must switch to the canonical ``stabilizers`` / ``disruptors``
52
+ # entries or maintain a private compatibility layer.
48
53
  GLYPH_GROUPS: Mapping[str, tuple[str, ...]] = MappingProxyType(
49
54
  {
50
- "estabilizadores": ESTABILIZADORES,
51
- "disruptivos": DISRUPTIVOS,
52
- # Grupos auxiliares para métricas morfosintácticas
55
+ "stabilizers": STABILIZERS,
56
+ "disruptors": DISRUPTORS,
57
+ # Auxiliary groups for morphosyntactic metrics
53
58
  "ID": (Glyph.OZ.value,),
54
59
  "CM": (Glyph.ZHIR.value, Glyph.NAV.value),
55
60
  "NE": (Glyph.IL.value, Glyph.THOL.value),
@@ -59,27 +64,28 @@ GLYPH_GROUPS: Mapping[str, tuple[str, ...]] = MappingProxyType(
59
64
  )
60
65
 
61
66
  # -------------------------
62
- # Mapa de ángulos glíficos
67
+ # Glyph angle map
63
68
  # -------------------------
64
69
 
65
- # Ángulos canónicos para todos los glyphs reconocidos. Se calculan a partir
66
- # del orden canónico y reglas de orientación para las categorías
67
- # "estabilizadores" y "disruptivos".
70
+ # Canonical angles for all recognised glyphs. They are computed from the
71
+ # canonical order and orientation rules for the "stabilizers" and
72
+ # "disruptors" categories.
68
73
 
69
74
 
70
75
  def _build_angle_map() -> dict[str, float]:
71
- """Construir el mapa de ángulos en el plano σ."""
76
+ """Build the angle map in the σ-plane."""
77
+
72
78
  step = 2 * math.pi / len(GLYPHS_CANONICAL)
73
79
  canonical = {g: i * step for i, g in enumerate(GLYPHS_CANONICAL)}
74
80
  angles = dict(canonical)
75
81
 
76
- # Reglas específicas de orientación
77
- for idx, g in enumerate(ESTABILIZADORES):
82
+ # Orientation rules
83
+ for idx, g in enumerate(STABILIZERS):
78
84
  angles[g] = idx * math.pi / 4
79
- for idx, g in enumerate(DISRUPTIVOS):
85
+ for idx, g in enumerate(DISRUPTORS):
80
86
  angles[g] = math.pi + idx * math.pi / 4
81
87
 
82
- # Excepciones manuales
88
+ # Manual exceptions
83
89
  angles[Glyph.VAL.value] = canonical[Glyph.RA.value]
84
90
  angles[Glyph.NUL.value] = canonical[Glyph.ZHIR.value]
85
91
  angles[Glyph.AL.value] = 0.0
@@ -91,8 +97,8 @@ ANGLE_MAP: Mapping[str, float] = MappingProxyType(_build_angle_map())
91
97
  __all__ = (
92
98
  "GLYPHS_CANONICAL",
93
99
  "GLYPHS_CANONICAL_SET",
94
- "ESTABILIZADORES",
95
- "DISRUPTIVOS",
100
+ "STABILIZERS",
101
+ "DISRUPTORS",
96
102
  "GLYPH_GROUPS",
97
103
  "ANGLE_MAP",
98
104
  )
@@ -0,0 +1,12 @@
1
+ from typing import Any
2
+
3
+ __all__: Any
4
+
5
+ def __getattr__(name: str) -> Any: ...
6
+
7
+ ANGLE_MAP: Any
8
+ DISRUPTORS: Any
9
+ STABILIZERS: Any
10
+ GLYPHS_CANONICAL: Any
11
+ GLYPHS_CANONICAL_SET: Any
12
+ GLYPH_GROUPS: Any
@@ -0,0 +1,54 @@
1
+ """Consolidated TNFR configuration defaults.
2
+
3
+ This module provides all default configuration values organized by subsystem,
4
+ following TNFR structural coherence principles.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from types import MappingProxyType
10
+ from typing import Mapping
11
+
12
+ from ..types import TNFRConfigValue
13
+ from .defaults_core import CORE_DEFAULTS, REMESH_DEFAULTS
14
+ from .defaults_init import INIT_DEFAULTS
15
+ from .defaults_metric import (
16
+ COHERENCE,
17
+ DIAGNOSIS,
18
+ GRAMMAR_CANON,
19
+ METRIC_DEFAULTS,
20
+ METRICS,
21
+ SIGMA,
22
+ TRACE,
23
+ )
24
+
25
+ # Exported sections organized by subsystem
26
+ DEFAULT_SECTIONS: Mapping[str, Mapping[str, TNFRConfigValue]] = MappingProxyType(
27
+ {
28
+ "core": CORE_DEFAULTS,
29
+ "init": INIT_DEFAULTS,
30
+ "remesh": REMESH_DEFAULTS,
31
+ "metric": METRIC_DEFAULTS,
32
+ }
33
+ )
34
+
35
+ # Combined defaults with priority: CORE < INIT < REMESH < METRIC
36
+ # METRIC_DEFAULTS has highest priority to match previous ChainMap behavior
37
+ DEFAULTS: Mapping[str, TNFRConfigValue] = MappingProxyType(
38
+ CORE_DEFAULTS | INIT_DEFAULTS | REMESH_DEFAULTS | METRIC_DEFAULTS
39
+ )
40
+
41
+ __all__ = (
42
+ "DEFAULTS",
43
+ "DEFAULT_SECTIONS",
44
+ "CORE_DEFAULTS",
45
+ "INIT_DEFAULTS",
46
+ "REMESH_DEFAULTS",
47
+ "METRIC_DEFAULTS",
48
+ "SIGMA",
49
+ "TRACE",
50
+ "METRICS",
51
+ "GRAMMAR_CANON",
52
+ "COHERENCE",
53
+ "DIAGNOSIS",
54
+ )
@@ -2,10 +2,11 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from dataclasses import dataclass, asdict, field
6
- from typing import Any, Mapping
5
+ from dataclasses import asdict, field
7
6
  from types import MappingProxyType
7
+ from typing import Any, Mapping
8
8
 
9
+ from ..compat.dataclass import dataclass
9
10
 
10
11
  SELECTOR_THRESHOLD_DEFAULTS: Mapping[str, float] = MappingProxyType(
11
12
  {
@@ -33,8 +34,10 @@ class CoreDefaults:
33
34
  EPI_MIN: float = -1.0
34
35
  EPI_MAX: float = 1.0
35
36
  VF_MIN: float = 0.0
36
- VF_MAX: float = 1.0
37
+ VF_MAX: float = 10.0
37
38
  THETA_WRAP: bool = True
39
+ CLIP_MODE: str = "hard"
40
+ CLIP_SOFT_K: float = 3.0
38
41
  DNFR_WEIGHTS: dict[str, float] = field(
39
42
  default_factory=lambda: {
40
43
  "phase": 0.34,
@@ -72,6 +75,7 @@ class CoreDefaults:
72
75
  GLYPH_SELECTOR_MARGIN: float = 0.05
73
76
  VF_ADAPT_TAU: int = 5
74
77
  VF_ADAPT_MU: float = 0.1
78
+ HZ_STR_BRIDGE: float = 1.0
75
79
  GLYPH_FACTORS: dict[str, float] = field(
76
80
  default_factory=lambda: {
77
81
  "AL_boost": 0.05,
@@ -79,12 +83,27 @@ class CoreDefaults:
79
83
  "IL_dnfr_factor": 0.7,
80
84
  "OZ_dnfr_factor": 1.3,
81
85
  "UM_theta_push": 0.25,
86
+ "UM_vf_sync": 0.10,
87
+ "UM_dnfr_reduction": 0.15,
82
88
  "RA_epi_diff": 0.15,
89
+ "RA_vf_amplification": 0.05,
90
+ "RA_phase_coupling": 0.10, # Canonical phase alignment strengthening
83
91
  "SHA_vf_factor": 0.85,
84
- "VAL_scale": 1.15,
92
+ # Conservative scaling (1.05) prevents EPI overflow near boundaries
93
+ # while maintaining meaningful expansion capacity. Critical threshold:
94
+ # EPI × 1.05 = 1.0 when EPI ≈ 0.952 (vs previous threshold ≈ 0.870).
95
+ # This preserves structural identity at boundary (EPI_MAX as identity frontier).
96
+ "VAL_scale": 1.05,
85
97
  "NUL_scale": 0.85,
98
+ # NUL canonical ΔNFR densification factor: implements structural pressure
99
+ # concentration due to volume reduction. When V' = V × 0.85, density increases
100
+ # by ~1.176× geometrically. Canonical value 1.35 accounts for nonlinear
101
+ # structural effects at smaller scales, per TNFR theory.
102
+ "NUL_densification_factor": 1.35,
86
103
  "THOL_accel": 0.10,
87
- "ZHIR_theta_shift": 1.57079632679,
104
+ # ZHIR now uses canonical transformation by default (θ → θ' based on ΔNFR)
105
+ # To use fixed shift, explicitly set ZHIR_theta_shift in graph
106
+ "ZHIR_theta_shift_factor": 0.3, # Canonical transformation magnitude
88
107
  "NAV_jitter": 0.05,
89
108
  "NAV_eta": 0.5,
90
109
  "REMESH_alpha": 0.5,
@@ -121,6 +140,40 @@ class CoreDefaults:
121
140
  VALIDATORS_STRICT: bool = False
122
141
  PROGRAM_TRACE_MAXLEN: int = 50
123
142
  HISTORY_MAXLEN: int = 0
143
+ NODAL_EQUATION_CLIP_AWARE: bool = True
144
+ NODAL_EQUATION_TOLERANCE: float = 1e-9
145
+ # THOL (Self-organization) vibrational metabolism parameters
146
+ THOL_METABOLIC_ENABLED: bool = True
147
+ THOL_METABOLIC_GRADIENT_WEIGHT: float = 0.15
148
+ THOL_METABOLIC_COMPLEXITY_WEIGHT: float = 0.10
149
+ THOL_BIFURCATION_THRESHOLD: float = 0.1
150
+
151
+ # THOL network propagation and cascade parameters
152
+ THOL_PROPAGATION_ENABLED: bool = True
153
+ THOL_MIN_COUPLING_FOR_PROPAGATION: float = 0.5
154
+ THOL_PROPAGATION_ATTENUATION: float = 0.7
155
+ THOL_CASCADE_MIN_NODES: int = 3
156
+
157
+ # THOL precondition thresholds
158
+ THOL_MIN_EPI: float = 0.2 # Minimum EPI for bifurcation
159
+ THOL_MIN_VF: float = 0.1 # Minimum structural frequency for reorganization
160
+ THOL_MIN_DEGREE: int = 1 # Minimum network connectivity
161
+ THOL_MIN_HISTORY_LENGTH: int = 3 # Minimum EPI history for acceleration computation
162
+ THOL_ALLOW_ISOLATED: bool = False # Require network context by default
163
+ THOL_MIN_COLLECTIVE_COHERENCE: float = 0.3 # Minimum collective coherence for sub-EPI ensemble
164
+
165
+ # VAL (Expansion) precondition thresholds
166
+ VAL_MAX_VF: float = 10.0 # Maximum structural frequency threshold
167
+ VAL_MIN_DNFR: float = 1e-6 # Minimum positive ΔNFR for coherent expansion (very low to minimize breaking changes)
168
+ VAL_MIN_EPI: float = 0.2 # Minimum EPI for coherent expansion base
169
+ VAL_CHECK_NETWORK_CAPACITY: bool = False # Optional network capacity validation
170
+ VAL_MAX_NETWORK_SIZE: int = 1000 # Maximum network size if capacity checking enabled
171
+
172
+ # VAL (Expansion) metric thresholds (Issue #2724)
173
+ VAL_BIFURCATION_THRESHOLD: float = 0.3 # Threshold for |∂²EPI/∂t²| bifurcation detection
174
+ VAL_MIN_COHERENCE: float = 0.5 # Minimum local coherence for healthy expansion
175
+ VAL_FRACTAL_RATIO_MIN: float = 0.5 # Minimum vf_growth/epi_growth ratio for fractality
176
+ VAL_FRACTAL_RATIO_MAX: float = 2.0 # Maximum vf_growth/epi_growth ratio for fractality
124
177
 
125
178
 
126
179
  @dataclass(frozen=True, slots=True)
@@ -134,7 +187,7 @@ class RemeshDefaults:
134
187
  EPS_DNFR_STABLE: float = 1e-3
135
188
  EPS_DEPI_STABLE: float = 1e-3
136
189
  FRACTION_STABLE_REMESH: float = 0.80
137
- REMESH_COOLDOWN_VENTANA: int = 20
190
+ REMESH_COOLDOWN_WINDOW: int = 20
138
191
  REMESH_COOLDOWN_TS: float = 0.0
139
192
  REMESH_REQUIRE_STABILITY: bool = True
140
193
  REMESH_STABILITY_WINDOW: int = 25