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.

Files changed (360) hide show
  1. tnfr/__init__.py +375 -56
  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 +723 -0
  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 +171 -0
  15. tnfr/cache.pyi +13 -0
  16. tnfr/cli/__init__.py +110 -0
  17. tnfr/cli/__init__.pyi +26 -0
  18. tnfr/cli/arguments.py +489 -0
  19. tnfr/cli/arguments.pyi +29 -0
  20. tnfr/cli/execution.py +914 -0
  21. tnfr/cli/execution.pyi +70 -0
  22. tnfr/cli/interactive_validator.py +614 -0
  23. tnfr/cli/utils.py +51 -0
  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/config/constants.py +104 -0
  34. tnfr/config/constants.pyi +12 -0
  35. tnfr/config/defaults.py +54 -0
  36. tnfr/config/defaults_core.py +212 -0
  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 +92 -0
  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 +33 -0
  57. tnfr/constants/init.pyi +12 -0
  58. tnfr/constants/metric.py +104 -0
  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 +238 -0
  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 +3034 -0
  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 +661 -0
  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 +36 -0
  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 +223 -0
  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 +262 -0
  125. tnfr/flatten.pyi +21 -0
  126. tnfr/gamma.py +354 -0
  127. tnfr/gamma.pyi +36 -0
  128. tnfr/glyph_history.py +377 -0
  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 +218 -0
  133. tnfr/immutable.pyi +36 -0
  134. tnfr/initialization.py +203 -0
  135. tnfr/initialization.pyi +65 -0
  136. tnfr/io.py +10 -0
  137. tnfr/io.pyi +13 -0
  138. tnfr/locking.py +37 -0
  139. tnfr/locking.pyi +7 -0
  140. tnfr/mathematics/__init__.py +79 -0
  141. tnfr/mathematics/backend.py +453 -0
  142. tnfr/mathematics/backend.pyi +99 -0
  143. tnfr/mathematics/dynamics.py +408 -0
  144. tnfr/mathematics/dynamics.pyi +90 -0
  145. tnfr/mathematics/epi.py +391 -0
  146. tnfr/mathematics/epi.pyi +65 -0
  147. tnfr/mathematics/generators.py +242 -0
  148. tnfr/mathematics/generators.pyi +29 -0
  149. tnfr/mathematics/metrics.py +119 -0
  150. tnfr/mathematics/metrics.pyi +16 -0
  151. tnfr/mathematics/operators.py +239 -0
  152. tnfr/mathematics/operators.pyi +59 -0
  153. tnfr/mathematics/operators_factory.py +124 -0
  154. tnfr/mathematics/operators_factory.pyi +11 -0
  155. tnfr/mathematics/projection.py +87 -0
  156. tnfr/mathematics/projection.pyi +33 -0
  157. tnfr/mathematics/runtime.py +182 -0
  158. tnfr/mathematics/runtime.pyi +64 -0
  159. tnfr/mathematics/spaces.py +256 -0
  160. tnfr/mathematics/spaces.pyi +83 -0
  161. tnfr/mathematics/transforms.py +305 -0
  162. tnfr/mathematics/transforms.pyi +62 -0
  163. tnfr/metrics/__init__.py +79 -0
  164. tnfr/metrics/__init__.pyi +20 -0
  165. tnfr/metrics/buffer_cache.py +163 -0
  166. tnfr/metrics/buffer_cache.pyi +24 -0
  167. tnfr/metrics/cache_utils.py +214 -0
  168. tnfr/metrics/coherence.py +2009 -0
  169. tnfr/metrics/coherence.pyi +129 -0
  170. tnfr/metrics/common.py +158 -0
  171. tnfr/metrics/common.pyi +35 -0
  172. tnfr/metrics/core.py +316 -0
  173. tnfr/metrics/core.pyi +13 -0
  174. tnfr/metrics/diagnosis.py +833 -0
  175. tnfr/metrics/diagnosis.pyi +86 -0
  176. tnfr/metrics/emergence.py +245 -0
  177. tnfr/metrics/export.py +179 -0
  178. tnfr/metrics/export.pyi +7 -0
  179. tnfr/metrics/glyph_timing.py +379 -0
  180. tnfr/metrics/glyph_timing.pyi +81 -0
  181. tnfr/metrics/learning_metrics.py +280 -0
  182. tnfr/metrics/learning_metrics.pyi +21 -0
  183. tnfr/metrics/phase_coherence.py +351 -0
  184. tnfr/metrics/phase_compatibility.py +349 -0
  185. tnfr/metrics/reporting.py +183 -0
  186. tnfr/metrics/reporting.pyi +25 -0
  187. tnfr/metrics/sense_index.py +1203 -0
  188. tnfr/metrics/sense_index.pyi +9 -0
  189. tnfr/metrics/trig.py +373 -0
  190. tnfr/metrics/trig.pyi +13 -0
  191. tnfr/metrics/trig_cache.py +233 -0
  192. tnfr/metrics/trig_cache.pyi +10 -0
  193. tnfr/multiscale/__init__.py +32 -0
  194. tnfr/multiscale/hierarchical.py +517 -0
  195. tnfr/node.py +763 -0
  196. tnfr/node.pyi +139 -0
  197. tnfr/observers.py +255 -130
  198. tnfr/observers.pyi +31 -0
  199. tnfr/ontosim.py +144 -137
  200. tnfr/ontosim.pyi +28 -0
  201. tnfr/operators/__init__.py +1672 -0
  202. tnfr/operators/__init__.pyi +31 -0
  203. tnfr/operators/algebra.py +277 -0
  204. tnfr/operators/canonical_patterns.py +420 -0
  205. tnfr/operators/cascade.py +267 -0
  206. tnfr/operators/cycle_detection.py +358 -0
  207. tnfr/operators/definitions.py +4108 -0
  208. tnfr/operators/definitions.pyi +78 -0
  209. tnfr/operators/grammar.py +1164 -0
  210. tnfr/operators/grammar.pyi +140 -0
  211. tnfr/operators/hamiltonian.py +710 -0
  212. tnfr/operators/health_analyzer.py +809 -0
  213. tnfr/operators/jitter.py +272 -0
  214. tnfr/operators/jitter.pyi +11 -0
  215. tnfr/operators/lifecycle.py +314 -0
  216. tnfr/operators/metabolism.py +618 -0
  217. tnfr/operators/metrics.py +2138 -0
  218. tnfr/operators/network_analysis/__init__.py +27 -0
  219. tnfr/operators/network_analysis/source_detection.py +186 -0
  220. tnfr/operators/nodal_equation.py +395 -0
  221. tnfr/operators/pattern_detection.py +660 -0
  222. tnfr/operators/patterns.py +669 -0
  223. tnfr/operators/postconditions/__init__.py +38 -0
  224. tnfr/operators/postconditions/mutation.py +236 -0
  225. tnfr/operators/preconditions/__init__.py +1226 -0
  226. tnfr/operators/preconditions/coherence.py +305 -0
  227. tnfr/operators/preconditions/dissonance.py +236 -0
  228. tnfr/operators/preconditions/emission.py +128 -0
  229. tnfr/operators/preconditions/mutation.py +580 -0
  230. tnfr/operators/preconditions/reception.py +125 -0
  231. tnfr/operators/preconditions/resonance.py +364 -0
  232. tnfr/operators/registry.py +74 -0
  233. tnfr/operators/registry.pyi +9 -0
  234. tnfr/operators/remesh.py +1809 -0
  235. tnfr/operators/remesh.pyi +26 -0
  236. tnfr/operators/structural_units.py +268 -0
  237. tnfr/operators/unified_grammar.py +105 -0
  238. tnfr/parallel/__init__.py +54 -0
  239. tnfr/parallel/auto_scaler.py +234 -0
  240. tnfr/parallel/distributed.py +384 -0
  241. tnfr/parallel/engine.py +238 -0
  242. tnfr/parallel/gpu_engine.py +420 -0
  243. tnfr/parallel/monitoring.py +248 -0
  244. tnfr/parallel/partitioner.py +459 -0
  245. tnfr/py.typed +0 -0
  246. tnfr/recipes/__init__.py +22 -0
  247. tnfr/recipes/cookbook.py +743 -0
  248. tnfr/rng.py +178 -0
  249. tnfr/rng.pyi +26 -0
  250. tnfr/schemas/__init__.py +8 -0
  251. tnfr/schemas/grammar.json +94 -0
  252. tnfr/sdk/__init__.py +107 -0
  253. tnfr/sdk/__init__.pyi +19 -0
  254. tnfr/sdk/adaptive_system.py +173 -0
  255. tnfr/sdk/adaptive_system.pyi +21 -0
  256. tnfr/sdk/builders.py +370 -0
  257. tnfr/sdk/builders.pyi +51 -0
  258. tnfr/sdk/fluent.py +1121 -0
  259. tnfr/sdk/fluent.pyi +74 -0
  260. tnfr/sdk/templates.py +342 -0
  261. tnfr/sdk/templates.pyi +41 -0
  262. tnfr/sdk/utils.py +341 -0
  263. tnfr/secure_config.py +46 -0
  264. tnfr/security/__init__.py +70 -0
  265. tnfr/security/database.py +514 -0
  266. tnfr/security/subprocess.py +503 -0
  267. tnfr/security/validation.py +290 -0
  268. tnfr/selector.py +247 -0
  269. tnfr/selector.pyi +19 -0
  270. tnfr/sense.py +378 -0
  271. tnfr/sense.pyi +23 -0
  272. tnfr/services/__init__.py +17 -0
  273. tnfr/services/orchestrator.py +325 -0
  274. tnfr/sparse/__init__.py +39 -0
  275. tnfr/sparse/representations.py +492 -0
  276. tnfr/structural.py +705 -0
  277. tnfr/structural.pyi +83 -0
  278. tnfr/telemetry/__init__.py +35 -0
  279. tnfr/telemetry/cache_metrics.py +226 -0
  280. tnfr/telemetry/cache_metrics.pyi +64 -0
  281. tnfr/telemetry/nu_f.py +422 -0
  282. tnfr/telemetry/nu_f.pyi +108 -0
  283. tnfr/telemetry/verbosity.py +36 -0
  284. tnfr/telemetry/verbosity.pyi +15 -0
  285. tnfr/tokens.py +58 -0
  286. tnfr/tokens.pyi +36 -0
  287. tnfr/tools/__init__.py +20 -0
  288. tnfr/tools/domain_templates.py +478 -0
  289. tnfr/tools/sequence_generator.py +846 -0
  290. tnfr/topology/__init__.py +13 -0
  291. tnfr/topology/asymmetry.py +151 -0
  292. tnfr/trace.py +543 -0
  293. tnfr/trace.pyi +42 -0
  294. tnfr/tutorials/__init__.py +38 -0
  295. tnfr/tutorials/autonomous_evolution.py +285 -0
  296. tnfr/tutorials/interactive.py +1576 -0
  297. tnfr/tutorials/structural_metabolism.py +238 -0
  298. tnfr/types.py +775 -0
  299. tnfr/types.pyi +357 -0
  300. tnfr/units.py +68 -0
  301. tnfr/units.pyi +13 -0
  302. tnfr/utils/__init__.py +282 -0
  303. tnfr/utils/__init__.pyi +215 -0
  304. tnfr/utils/cache.py +4223 -0
  305. tnfr/utils/cache.pyi +470 -0
  306. tnfr/utils/callbacks.py +375 -0
  307. tnfr/utils/callbacks.pyi +49 -0
  308. tnfr/utils/chunks.py +108 -0
  309. tnfr/utils/chunks.pyi +22 -0
  310. tnfr/utils/data.py +428 -0
  311. tnfr/utils/data.pyi +74 -0
  312. tnfr/utils/graph.py +85 -0
  313. tnfr/utils/graph.pyi +10 -0
  314. tnfr/utils/init.py +821 -0
  315. tnfr/utils/init.pyi +80 -0
  316. tnfr/utils/io.py +559 -0
  317. tnfr/utils/io.pyi +66 -0
  318. tnfr/utils/numeric.py +114 -0
  319. tnfr/utils/numeric.pyi +21 -0
  320. tnfr/validation/__init__.py +257 -0
  321. tnfr/validation/__init__.pyi +85 -0
  322. tnfr/validation/compatibility.py +460 -0
  323. tnfr/validation/compatibility.pyi +6 -0
  324. tnfr/validation/config.py +73 -0
  325. tnfr/validation/graph.py +139 -0
  326. tnfr/validation/graph.pyi +18 -0
  327. tnfr/validation/input_validation.py +755 -0
  328. tnfr/validation/invariants.py +712 -0
  329. tnfr/validation/rules.py +253 -0
  330. tnfr/validation/rules.pyi +44 -0
  331. tnfr/validation/runtime.py +279 -0
  332. tnfr/validation/runtime.pyi +28 -0
  333. tnfr/validation/sequence_validator.py +162 -0
  334. tnfr/validation/soft_filters.py +170 -0
  335. tnfr/validation/soft_filters.pyi +32 -0
  336. tnfr/validation/spectral.py +164 -0
  337. tnfr/validation/spectral.pyi +42 -0
  338. tnfr/validation/validator.py +1266 -0
  339. tnfr/validation/window.py +39 -0
  340. tnfr/validation/window.pyi +1 -0
  341. tnfr/visualization/__init__.py +98 -0
  342. tnfr/visualization/cascade_viz.py +256 -0
  343. tnfr/visualization/hierarchy.py +284 -0
  344. tnfr/visualization/sequence_plotter.py +784 -0
  345. tnfr/viz/__init__.py +60 -0
  346. tnfr/viz/matplotlib.py +278 -0
  347. tnfr/viz/matplotlib.pyi +35 -0
  348. tnfr-8.5.0.dist-info/METADATA +573 -0
  349. tnfr-8.5.0.dist-info/RECORD +353 -0
  350. tnfr-8.5.0.dist-info/entry_points.txt +3 -0
  351. tnfr-3.0.3.dist-info/licenses/LICENSE.txt → tnfr-8.5.0.dist-info/licenses/LICENSE.md +1 -1
  352. tnfr/constants.py +0 -183
  353. tnfr/dynamics.py +0 -543
  354. tnfr/helpers.py +0 -198
  355. tnfr/main.py +0 -37
  356. tnfr/operators.py +0 -296
  357. tnfr-3.0.3.dist-info/METADATA +0 -35
  358. tnfr-3.0.3.dist-info/RECORD +0 -13
  359. {tnfr-3.0.3.dist-info → tnfr-8.5.0.dist-info}/WHEEL +0 -0
  360. {tnfr-3.0.3.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
@@ -0,0 +1,104 @@
1
+ """Canonical glyph constants tied to configuration presets."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import math
6
+ from types import MappingProxyType
7
+ from typing import Mapping
8
+
9
+ from ..types import Glyph
10
+
11
+ # -------------------------
12
+ # Canonical order and functional classifications
13
+ # -------------------------
14
+
15
+ GLYPHS_CANONICAL: tuple[str, ...] = (
16
+ Glyph.AL.value, # 0
17
+ Glyph.EN.value, # 1
18
+ Glyph.IL.value, # 2
19
+ Glyph.OZ.value, # 3
20
+ Glyph.UM.value, # 4
21
+ Glyph.RA.value, # 5
22
+ Glyph.SHA.value, # 6
23
+ Glyph.VAL.value, # 7
24
+ Glyph.NUL.value, # 8
25
+ Glyph.THOL.value, # 9
26
+ Glyph.ZHIR.value, # 10
27
+ Glyph.NAV.value, # 11
28
+ Glyph.REMESH.value, # 12
29
+ )
30
+
31
+ GLYPHS_CANONICAL_SET: frozenset[str] = frozenset(GLYPHS_CANONICAL)
32
+
33
+ STABILIZERS: tuple[str, ...] = (
34
+ Glyph.IL.value,
35
+ Glyph.RA.value,
36
+ Glyph.UM.value,
37
+ Glyph.SHA.value,
38
+ )
39
+
40
+ DISRUPTORS: tuple[str, ...] = (
41
+ Glyph.OZ.value,
42
+ Glyph.ZHIR.value,
43
+ Glyph.NAV.value,
44
+ Glyph.THOL.value,
45
+ )
46
+
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.
53
+ GLYPH_GROUPS: Mapping[str, tuple[str, ...]] = MappingProxyType(
54
+ {
55
+ "stabilizers": STABILIZERS,
56
+ "disruptors": DISRUPTORS,
57
+ # Auxiliary groups for morphosyntactic metrics
58
+ "ID": (Glyph.OZ.value,),
59
+ "CM": (Glyph.ZHIR.value, Glyph.NAV.value),
60
+ "NE": (Glyph.IL.value, Glyph.THOL.value),
61
+ "PP_num": (Glyph.SHA.value,),
62
+ "PP_den": (Glyph.REMESH.value,),
63
+ }
64
+ )
65
+
66
+ # -------------------------
67
+ # Glyph angle map
68
+ # -------------------------
69
+
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.
73
+
74
+
75
+ def _build_angle_map() -> dict[str, float]:
76
+ """Build the angle map in the σ-plane."""
77
+
78
+ step = 2 * math.pi / len(GLYPHS_CANONICAL)
79
+ canonical = {g: i * step for i, g in enumerate(GLYPHS_CANONICAL)}
80
+ angles = dict(canonical)
81
+
82
+ # Orientation rules
83
+ for idx, g in enumerate(STABILIZERS):
84
+ angles[g] = idx * math.pi / 4
85
+ for idx, g in enumerate(DISRUPTORS):
86
+ angles[g] = math.pi + idx * math.pi / 4
87
+
88
+ # Manual exceptions
89
+ angles[Glyph.VAL.value] = canonical[Glyph.RA.value]
90
+ angles[Glyph.NUL.value] = canonical[Glyph.ZHIR.value]
91
+ angles[Glyph.AL.value] = 0.0
92
+ return angles
93
+
94
+
95
+ ANGLE_MAP: Mapping[str, float] = MappingProxyType(_build_angle_map())
96
+
97
+ __all__ = (
98
+ "GLYPHS_CANONICAL",
99
+ "GLYPHS_CANONICAL_SET",
100
+ "STABILIZERS",
101
+ "DISRUPTORS",
102
+ "GLYPH_GROUPS",
103
+ "ANGLE_MAP",
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
+ )