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
tnfr/presets.py DELETED
@@ -1,60 +0,0 @@
1
- """Predefined configurations."""
2
-
3
- from __future__ import annotations
4
- from .execution import (
5
- CANONICAL_PRESET_NAME,
6
- CANONICAL_PROGRAM_TOKENS,
7
- block,
8
- seq,
9
- wait,
10
- )
11
- from .types import Glyph
12
-
13
- __all__ = ("get_preset",)
14
-
15
-
16
- _PRESETS = {
17
- "arranque_resonante": seq(
18
- Glyph.AL,
19
- Glyph.EN,
20
- Glyph.IL,
21
- Glyph.RA,
22
- Glyph.VAL,
23
- Glyph.UM,
24
- wait(3),
25
- Glyph.SHA,
26
- ),
27
- "mutacion_contenida": seq(
28
- Glyph.AL,
29
- Glyph.EN,
30
- block(Glyph.OZ, Glyph.ZHIR, Glyph.IL, repeat=2),
31
- Glyph.RA,
32
- Glyph.SHA,
33
- ),
34
- "exploracion_acople": seq(
35
- Glyph.AL,
36
- Glyph.EN,
37
- Glyph.IL,
38
- Glyph.VAL,
39
- Glyph.UM,
40
- block(Glyph.OZ, Glyph.NAV, Glyph.IL, repeat=1),
41
- Glyph.RA,
42
- Glyph.SHA,
43
- ),
44
- CANONICAL_PRESET_NAME: list(CANONICAL_PROGRAM_TOKENS),
45
- # Topologías fractales: expansión/contracción modular
46
- "fractal_expand": seq(
47
- block(Glyph.THOL, Glyph.VAL, Glyph.UM, repeat=2, close=Glyph.NUL),
48
- Glyph.RA,
49
- ),
50
- "fractal_contract": seq(
51
- block(Glyph.THOL, Glyph.NUL, Glyph.UM, repeat=2, close=Glyph.SHA),
52
- Glyph.RA,
53
- ),
54
- }
55
-
56
-
57
- def get_preset(name: str):
58
- if name not in _PRESETS:
59
- raise KeyError(f"Preset no encontrado: {name}")
60
- return _PRESETS[name]
tnfr/validators.py DELETED
@@ -1,84 +0,0 @@
1
- """Validation utilities."""
2
-
3
- from __future__ import annotations
4
-
5
- import numbers
6
- import sys
7
-
8
- from .constants import get_aliases, get_param
9
- from .alias import get_attr
10
- from .sense import sigma_vector_from_graph
11
- from .helpers.numeric import within_range
12
- from .constants_glyphs import GLYPHS_CANONICAL_SET
13
-
14
- ALIAS_EPI = get_aliases("EPI")
15
- ALIAS_VF = get_aliases("VF")
16
-
17
- __all__ = ("validate_window", "run_validators")
18
-
19
-
20
- def validate_window(window: int, *, positive: bool = False) -> int:
21
- """Validate ``window`` as an ``int`` and return it.
22
-
23
- Non-integer values raise :class:`TypeError`. When ``positive`` is ``True``
24
- the value must be strictly greater than zero; otherwise it may be zero.
25
- Negative values always raise :class:`ValueError`.
26
- """
27
-
28
- if isinstance(window, bool) or not isinstance(window, numbers.Integral):
29
- raise TypeError("'window' must be an integer")
30
- if window < 0 or (positive and window == 0):
31
- kind = "positive" if positive else "non-negative"
32
- raise ValueError(f"'window'={window} must be {kind}")
33
- return int(window)
34
-
35
-
36
- def _require_attr(data, alias, node, name):
37
- """Return attribute value or raise if missing."""
38
- val = get_attr(data, alias, None)
39
- if val is None:
40
- raise ValueError(f"Missing {name} attribute in node {node}")
41
- return val
42
-
43
-
44
- def _validate_sigma(G) -> None:
45
- sv = sigma_vector_from_graph(G)
46
- if sv.get("mag", 0.0) > 1.0 + sys.float_info.epsilon:
47
- raise ValueError("σ norm exceeds 1")
48
-
49
-
50
- def _check_epi_vf(epi, vf, epi_min, epi_max, vf_min, vf_max, n):
51
- _check_range(epi, epi_min, epi_max, "EPI", n)
52
- _check_range(vf, vf_min, vf_max, "VF", n)
53
-
54
-
55
- def _out_of_range_msg(name, node, val):
56
- return f"{name} out of range in node {node}: {val}"
57
-
58
-
59
- def _check_range(val, lower, upper, name, node, tol: float = 1e-9):
60
- if not within_range(val, lower, upper, tol):
61
- raise ValueError(_out_of_range_msg(name, node, val))
62
-
63
-
64
- def _check_glyph(g, n):
65
- if g and g not in GLYPHS_CANONICAL_SET:
66
- raise KeyError(f"Invalid glyph {g} in node {n}")
67
-
68
-
69
- def run_validators(G) -> None:
70
- """Run all invariant validators on ``G`` with a single node pass."""
71
- from .glyph_history import last_glyph
72
-
73
- epi_min = float(get_param(G, "EPI_MIN"))
74
- epi_max = float(get_param(G, "EPI_MAX"))
75
- vf_min = float(get_param(G, "VF_MIN"))
76
- vf_max = float(get_param(G, "VF_MAX"))
77
-
78
- for n, data in G.nodes(data=True):
79
- epi = _require_attr(data, ALIAS_EPI, n, "EPI")
80
- vf = _require_attr(data, ALIAS_VF, n, "VF")
81
- _check_epi_vf(epi, vf, epi_min, epi_max, vf_min, vf_max, n)
82
- _check_glyph(last_glyph(data), n)
83
-
84
- _validate_sigma(G)
tnfr/value_utils.py DELETED
@@ -1,59 +0,0 @@
1
- """Conversion helpers with logging for value normalisation.
2
-
3
- Wraps conversion callables to standardise error handling and logging.
4
- """
5
-
6
- from __future__ import annotations
7
-
8
- from typing import Any, Callable, TypeVar
9
- import logging
10
- from .logging_utils import get_logger
11
-
12
- T = TypeVar("T")
13
-
14
- logger = get_logger(__name__)
15
-
16
- __all__ = ("convert_value",)
17
-
18
-
19
- def convert_value(
20
- value: Any,
21
- conv: Callable[[Any], T],
22
- *,
23
- strict: bool = False,
24
- key: str | None = None,
25
- log_level: int | None = None,
26
- ) -> tuple[bool, T | None]:
27
- """Attempt to convert a value and report failures.
28
-
29
- Parameters
30
- ----------
31
- value : Any
32
- Input value to convert.
33
- conv : Callable[[Any], T]
34
- Callable performing the conversion.
35
- strict : bool, optional
36
- Raise exceptions directly instead of logging them. Defaults to ``False``.
37
- key : str, optional
38
- Name associated with the value for logging context.
39
- log_level : int, optional
40
- Logging level used when reporting failures. Defaults to
41
- ``logging.DEBUG``.
42
-
43
- Returns
44
- -------
45
- tuple[bool, T | None]
46
- ``(True, result)`` on success or ``(False, None)`` when conversion
47
- fails.
48
- """
49
- try:
50
- return True, conv(value)
51
- except (ValueError, TypeError) as exc:
52
- if strict:
53
- raise
54
- level = log_level if log_level is not None else logging.DEBUG
55
- if key is not None:
56
- logger.log(level, "Could not convert value for %r: %s", key, exc)
57
- else:
58
- logger.log(level, "Could not convert value: %s", exc)
59
- return False, None
@@ -1,379 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: tnfr
3
- Version: 4.5.2
4
- Summary: Modular structural-based dynamics on networks.
5
- Author: fmg
6
- License: MIT
7
- Project-URL: Homepage, https://pypi.org/project/tnfr/
8
- Project-URL: Repository, https://github.com/fermga/Teoria-de-la-naturaleza-fractal-resonante-TNFR-
9
- Project-URL: GPT, https://chatgpt.com/g/g-67abc78885a88191b2d67f94fd60dc97-tnfr-teoria-de-la-naturaleza-fractal-resonante
10
- Keywords: TNFR,complex systems,fractals,resonance,networks,structural dynamics,structural analysis
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3 :: Only
13
- Classifier: Programming Language :: Python :: 3.9
14
- Classifier: Programming Language :: Python :: 3.10
15
- Classifier: Programming Language :: Python :: 3.11
16
- Classifier: Programming Language :: Python :: 3.12
17
- Classifier: License :: OSI Approved :: MIT License
18
- Classifier: Operating System :: OS Independent
19
- Classifier: Intended Audience :: Science/Research
20
- Requires-Python: >=3.9
21
- Description-Content-Type: text/markdown
22
- License-File: LICENSE.md
23
- Requires-Dist: networkx>=2.6
24
- Requires-Dist: cachetools>=5
25
- Provides-Extra: numpy
26
- Requires-Dist: numpy>=1.24; extra == "numpy"
27
- Provides-Extra: yaml
28
- Requires-Dist: pyyaml>=6.0; extra == "yaml"
29
- Provides-Extra: orjson
30
- Requires-Dist: orjson>=3; extra == "orjson"
31
- Provides-Extra: test
32
- Requires-Dist: pytest>=7; extra == "test"
33
- Requires-Dist: pydocstyle>=6; extra == "test"
34
- Dynamic: license-file
35
-
36
- # TNFR Python Engine
37
-
38
- Engine for **modeling, simulation and measurement** of multiscale structural coherence through **structural operators** (emission, reception, coherence, dissonance, coupling, resonance, silence, expansion, contraction, self‑organization, mutation, transition, recursivity).
39
-
40
- ---
41
-
42
- ## What is `tnfr`?
43
-
44
- `tnfr` is a Python library to **operate with form**: build nodes, couple them into networks, and **modulate their coherence** over time using structural operators. It does not describe “things”; it **activates processes**. Its theoretical basis is the *Teoria de la Naturaleza Fractal Resonante (TNFR)*, which understands reality as **networks of coherence** that persist because they **resonate**.
45
-
46
- In practical terms, `tnfr` lets you:
47
-
48
- * Model **Resonant Fractal Nodes (NFR)** with parameters for **frequency** (νf), **phase** (θ), and **form** (EPI). Use the ASCII constants `VF_KEY` and `THETA_KEY` to reference these attributes programmatically; the Unicode names remain available as aliases.
49
- * Apply **structural operators** to start, stabilize, propagate, or reconfigure coherence.
50
- * **Simulate** nodal dynamics with discrete/continuous integrators.
51
- * **Measure** global coherence C(t), nodal gradient ΔNFR, and the **Sense Index** (Si).
52
- * **Visualize** states and trajectories (coupling matrices, C(t) curves, graphs).
53
-
54
- A form emerges and persists when **internal reorganization** (ΔNFR) **resonates** with the node’s **frequency** (νf).
55
-
56
- ## Quick start
57
-
58
- ### Desde Python
59
-
60
- ```python
61
- from tnfr import create_nfr, run_sequence
62
- from tnfr.structural import (
63
- Emision,
64
- Recepcion,
65
- Coherencia,
66
- Resonancia,
67
- Silencio,
68
- )
69
- from tnfr.metrics.common import compute_coherence
70
- from tnfr.metrics.sense_index import compute_Si
71
-
72
- G, nodo = create_nfr("A", epi=0.2, vf=1.0, theta=0.0)
73
- ops = [Emision(), Recepcion(), Coherencia(), Resonancia(), Silencio()]
74
- run_sequence(G, nodo, ops)
75
-
76
- C, delta_nfr_medio, depi_medio = compute_coherence(G, return_means=True)
77
- si_por_nodo = compute_Si(G)
78
- print(f"C(t)={C:.3f}, ΔNFR̄={delta_nfr_medio:.3f}, dEPI/dt̄={depi_medio:.3f}, Si={si_por_nodo[nodo]:.3f}")
79
- ```
80
-
81
- La secuencia respeta la ecuación nodal porque `create_nfr` inicializa el nodo con su **νf** y fase, y `run_sequence` valida la gramática TNFR antes de aplicar los operadores en el orden provisto. Tras cada operador invoca el gancho `compute_delta_nfr` del grafo para recalcular únicamente **ΔNFR** (por defecto usa `dnfr_epi_vf_mixed`, que mezcla EPI y νf sin alterar la fase). La fase solo cambiará si los propios operadores la modifican o si se ejecutan pasos dinámicos posteriores (por ejemplo `tnfr.dynamics.step` o `coordinate_global_local_phase`). Cuando necesites sincronización de fase automática, utiliza el ciclo de dinámica completo (`tnfr.dynamics.step`/`tnfr.dynamics.run`) o invoca explícitamente los coordinadores de fase después de `run_sequence`. Esa telemetría permite medir **C(t)** y **Si**, adelantando lo que se desarrolla en [Key concepts (operational summary)](#key-concepts-operational-summary) y [Main metrics](#main-metrics).
82
-
83
- ### Desde la línea de comandos
84
-
85
- Archivo `secuencia.json`:
86
-
87
- ```json
88
- [
89
- "emision",
90
- "recepcion",
91
- "coherencia",
92
- "resonancia",
93
- "silencio"
94
- ]
95
- ```
96
-
97
- ```bash
98
- tnfr sequence --nodes 1 --sequence-file secuencia.json --save-history historia.json
99
- ```
100
-
101
- El subcomando `sequence` carga la trayectoria canónica del archivo JSON, ejecuta los operadores con la gramática oficial y actualiza **νf**, **ΔNFR** y fase usando los mismos ganchos que la API de Python. Al finalizar se vuelcan en `historia.json` las series de **C(t)**, **ΔNFR** medio y **Si**, que amplían las secciones sobre [operadores estructurales](#key-concepts-operational-summary) y [métricas](#main-metrics).
102
-
103
- ---
104
-
105
- ## Installation
106
-
107
- ```bash
108
- pip install tnfr
109
- ```
110
- * https://pypi.org/project/tnfr/
111
- * Requires **Python ≥ 3.9**.
112
- * Install extras:
113
- * NumPy: `pip install tnfr[numpy]`
114
- * YAML: `pip install tnfr[yaml]`
115
- * orjson (faster JSON serialization): `pip install tnfr[orjson]`
116
- * All: `pip install tnfr[numpy,yaml,orjson]`
117
- * When `orjson` is unavailable the engine falls back to Python's built-in
118
- `json` module.
119
-
120
- ### Optional imports with cache
121
-
122
- Use ``tnfr.cached_import`` to load optional dependencies and cache the result
123
- via a process-wide LRU cache. Missing modules (or attributes) yield ``None``
124
- without triggering repeated imports. The helper records failures and emits a
125
- single warning per module to keep logs tidy. When optional packages are
126
- installed at runtime call ``prune_failed_imports`` to clear the consolidated
127
- failure/warning registry before retrying:
128
-
129
- ```python
130
- from tnfr import cached_import, prune_failed_imports
131
-
132
- np = cached_import("numpy")
133
- safe_load = cached_import("yaml", "safe_load")
134
-
135
- # provide a shared cache with an explicit lock
136
- from cachetools import TTLCache
137
- import threading
138
-
139
- cache = TTLCache(32, 60)
140
- lock = threading.Lock()
141
- cached_import("numpy", cache=cache, lock=lock)
142
-
143
- # clear caches after installing a dependency at runtime
144
- cached_import.cache_clear()
145
- prune_failed_imports()
146
- ```
147
-
148
- ## Tests
149
-
150
- Run the test suite from the project root using the helper script, which sets
151
- the necessary `PYTHONPATH` and mirrors the checks described in
152
- [`CONTRIBUTING.md`](CONTRIBUTING.md):
153
-
154
- ```bash
155
- ./scripts/run_tests.sh
156
- ```
157
-
158
- The script sequentially executes `pydocstyle`, `pytest` under `coverage`, the
159
- coverage summary, and `vulture --min-confidence 80 src tests`. Avoid running
160
- `pytest` directly or executing the script from other directories, as the
161
- environment may be misconfigured and imports will fail. To pass additional
162
- flags to `pytest`, append them after `--`, for example:
163
-
164
- ```bash
165
- ./scripts/run_tests.sh -- -k coherence
166
- ```
167
-
168
- ## Locking policy
169
-
170
- The engine centralises reusable process-wide locks in
171
- `tnfr.locking`. Modules obtain named locks via `locking.get_lock()` and
172
- use the returned `threading.Lock` in their own critical sections. This
173
- avoids scattering `threading.Lock` instances across the codebase and
174
- ensures that shared resources are synchronised consistently.
175
- Module-level caches or global state should always use these named
176
- locks; only short-lived objects may instantiate ad-hoc locks directly
177
- when they are not shared.
178
-
179
- ---
180
-
181
- ## Callback error handling
182
-
183
- Callback errors are stored in a ring buffer attached to the graph. The
184
- buffer retains at most the last 100 errors by default, but the limit can be
185
- adjusted at runtime via ``tnfr.callback_utils.callback_manager.set_callback_error_limit``
186
- and inspected with ``tnfr.callback_utils.callback_manager.get_callback_error_limit``.
187
-
188
- ---
189
-
190
- ## Helper utilities API
191
-
192
- `tnfr.helpers` bundles a compact set of public helpers that stay stable across
193
- releases. They provide ergonomic access to the most common preparation steps
194
- when orchestrating TNFR experiments.
195
-
196
- ### Collections and numeric helpers
197
-
198
- * ``ensure_collection(it, *, max_materialize=...)`` — materialize potentially
199
- lazy iterables once, enforcing a configurable limit to keep simulations
200
- bounded.
201
- * ``clamp(x, a, b)`` and ``clamp01(x)`` — restrict scalars to safe ranges for
202
- operator parameters.
203
- * ``kahan_sum_nd(values, dims)`` — numerically stable accumulators used to
204
- track coherence magnitudes across long trajectories (use ``dims=1`` for
205
- scalars, ``dims=2`` for paired values, etc.).
206
- * ``angle_diff(a, b)`` — compute minimal angular differences (radians) to
207
- compare structural phases.
208
-
209
- ### Historial de operadores estructurales
210
-
211
- * ``push_glyph(nd, glyph, window)`` — registra la aplicación de un operador en el
212
- historial del nodo respetando la ventana configurada.
213
- * ``recent_glyph(nd, glyph, window)`` — comprueba si un operador específico
214
- aparece en el historial reciente de un nodo.
215
- * ``ensure_history(G)`` — prepare the graph-level history container with the
216
- appropriate bounds.
217
- * ``last_glyph(nd)`` — inspecciona el último operador emitido por un nodo.
218
- * ``count_glyphs(G, window=None, *, last_only=False)`` — agrega el uso de
219
- operadores estructurales en la red ya sea desde todo el historial o una
220
- ventana limitada.
221
-
222
- ### Graph caches and ΔNFR invalidation
223
-
224
- * ``cached_node_list(G)`` — lazily cache a stable tuple of node identifiers,
225
- respecting opt-in sorted ordering.
226
- * ``ensure_node_index_map(G)`` / ``ensure_node_offset_map(G)`` — expose cached
227
- index and offset mappings for graphs that need to project nodes to arrays.
228
- * ``node_set_checksum(G, nodes=None, *, presorted=False, store=True)`` —
229
- produce deterministic BLAKE2b hashes to detect topology changes.
230
- * ``stable_json(obj)`` — render deterministic JSON strings suited for hashing
231
- and reproducible logs.
232
- * ``get_graph(obj)`` / ``get_graph_mapping(G, key, warn_msg)`` — normalise
233
- access to graph-level metadata regardless of wrappers.
234
- * ``EdgeCacheManager`` together with ``edge_version_cache``,
235
- ``cached_nodes_and_A`` and ``edge_version_update`` encapsulate the edge
236
- version cache. ``increment_edge_version`` bumps the version manually for
237
- imperative workflows.
238
- * ``mark_dnfr_prep_dirty(G)`` — invalidate precomputed ΔNFR preparation when
239
- mutating edges outside the cache helpers.
240
-
241
- ---
242
-
243
- ## Why TNFR (in 60 seconds)
244
-
245
- * **From objects to coherences:** you model **processes** that hold, not fixed entities.
246
- * **Operators instead of rules:** you compose **structural operators** (e.g., *emission*, *coherence*, *dissonance*) to **build trajectories**.
247
- * **Operational fractality:** the same pattern works for **ideas, teams, tissues, narratives**; the scales change, **the logic doesn’t**.
248
-
249
- ---
250
-
251
- ## Key concepts (operational summary)
252
-
253
- * **Node (NFR):** a unit that persists because it **resonates**. Parameterized by **νf** (frequency), **θ** (phase), and **EPI** (coherent form).
254
- * **Structural operators** - functions that reorganize the network:
255
-
256
- * **Emission** (start), **Reception** (open), **Coherence** (stabilize), **Dissonance** (creative tension), **Coupling** (synchrony), **Resonance** (propagate), **Silence** (latency), **Expansion**, **Contraction**, **Self‑organization**, **Mutation**, **Transition**, **Recursivity**.
257
- * **Magnitudes:**
258
-
259
- * **C(t):** global coherence.
260
- * **ΔNFR:** nodal gradient (need for reorganization).
261
- * **νf:** structural frequency (Hz\_str).
262
- * **Si:** sense index (ability to generate stable shared coherence).
263
-
264
- ---
265
-
266
- ## Typical workflow
267
-
268
- 1. **Model** your system as a network: nodes (agents, ideas, tissues, modules) and couplings.
269
- 2. **Select** a **trajectory of operators** aligned with your goal (e.g., *start → couple → stabilize*).
270
- 3. **Simulate** the dynamics: number of steps, step size, tolerances.
271
- 4. **Measure**: C(t), ΔNFR, Si; identify bifurcations and collapses.
272
- 5. **Iterate** with controlled **dissonance** to open mutations without losing form.
273
-
274
- ---
275
-
276
- ## Main metrics
277
-
278
- * `coherence(traj) → C(t)`: global stability; higher values indicate sustained form.
279
- * `gradient(state) → ΔNFR`: local demand for reorganization (high = risk of collapse/bifurcation).
280
- * `sense_index(traj) → Si`: proxy for **structural sense** (capacity to generate shared coherence) combining **νf**, phase, and topology.
281
-
282
- ## Topological remeshing
283
-
284
- Use ``tnfr.operators.apply_topological_remesh`` (``from tnfr.operators import apply_topological_remesh``)
285
- to reorganize connectivity based on nodal EPI similarity while preserving
286
- graph connectivity. Modes:
287
-
288
- - ``"knn"`` – connect each node to its ``k`` nearest neighbours (with optional
289
- rewiring).
290
- - ``"mst"`` – retain only a minimum spanning tree.
291
- - ``"community"`` – collapse modular communities and reconnect them by
292
- similarity.
293
-
294
- All modes ensure connectivity by adding a base MST.
295
-
296
- ---
297
-
298
- ## History configuration
299
-
300
- Recorded series are stored under `G.graph['history']`. Set `HISTORY_MAXLEN` in
301
- the graph (or override the default) to keep only the most recent entries. The
302
- value must be non‑negative; negative values raise ``ValueError``. When the
303
- limit is positive the library uses bounded `deque` objects and removes the
304
- least populated series when the number of history keys grows beyond the limit.
305
-
306
- ### Random node sampling
307
-
308
- To reduce costly comparisons the engine stores a per‑step random subset of
309
- node ids under `G.graph['_node_sample']`. Operators may use this to avoid
310
- scanning the whole network. Sampling is skipped automatically when the graph
311
- has fewer than **50 nodes**, in which case all nodes are included.
312
-
313
- ### Jitter RNG cache
314
-
315
- `random_jitter` uses an LRU cache of `random.Random` instances keyed by `(seed, node)`.
316
- `JITTER_CACHE_SIZE` controls the maximum number of cached generators (default: `256`);
317
- when the limit is exceeded the least‑recently used entry is discarded. Increase it for
318
- large graphs or heavy jitter usage, or lower it to save memory.
319
-
320
- To adjust the number of cached jitter sequences used for deterministic noise,
321
- obtain the manager with ``get_jitter_manager`` before calling ``setup``:
322
-
323
- ```python
324
- from tnfr.operators import get_jitter_manager
325
-
326
- manager = get_jitter_manager()
327
- # Resize cache to keep only 512 entries
328
- manager.max_entries = 512
329
-
330
- # or in a single call that also clears previous counters
331
- manager.setup(max_entries=512)
332
- ```
333
-
334
- ``setup`` preserves the current size unless a new ``max_entries`` value is
335
- supplied. Custom sizes persist across subsequent ``setup`` calls, and
336
- ``max_entries`` assignments take effect immediately.
337
-
338
- ### Edge version tracking
339
-
340
- Wrap sequences of edge mutations with `edge_version_update(G)` so the edge
341
- version increments on entry and exit. This keeps caches and structural logs
342
- aligned with the network's evolution.
343
-
344
- ### Defaults injection performance
345
-
346
- `inject_defaults` evita copias profundas cuando los valores son inmutables (números,
347
- cadenas, tuplas). Solo se usa `copy.deepcopy` para estructuras mutables, reduciendo
348
- el costo de inicializar grafos con parámetros por defecto.
349
-
350
- ---
351
-
352
- ## Trained GPT
353
-
354
- https://chatgpt.com/g/g-67abc78885a88191b2d67f94fd60dc97-tnfr-teoria-de-la-naturaleza-fractal-resonante
355
-
356
- ---
357
-
358
- ## Changelog
359
-
360
- * Removed deprecated alias `sigma_vector_global`; use `sigma_vector_from_graph` instead.
361
- * Removed legacy `tnfr.program` alias; import programming helpers from `tnfr.execution`.
362
- * Stopped re-exporting ``CallbackSpec`` and ``apply_topological_remesh`` at the
363
- package root; import them via ``tnfr.trace`` and ``tnfr.operators``.
364
-
365
- ---
366
-
367
- ## MIT License
368
-
369
- Copyright (c) 2025 TNFR - Teoría de la naturaleza fractral resonante
370
-
371
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
372
-
373
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
374
-
375
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
376
-
377
- ---
378
-
379
- If you use `tnfr` in research or projects, please cite the TNFR conceptual framework and link to the PyPI package.
@@ -1,67 +0,0 @@
1
- tnfr/__init__.py,sha256=hPgnqhJxoa5C1rpRghF51ux8aV6SEUCp4CEXB63tNFY,2921
2
- tnfr/alias.py,sha256=CvfXiTNyQCLI6RwkAriCnE8ajbadsJKA7gFeSz-sFCM,15568
3
- tnfr/cache.py,sha256=l15jZyJoPbs6rUZfnq3UKwHaRnAmsPPZBBYcJ5iS2VY,16841
4
- tnfr/callback_utils.py,sha256=O0zgH-fl813A-wmWtp9dG4SK0Phq4YK_ZaHV6fC1rDU,12257
5
- tnfr/collections_utils.py,sha256=f1zbti135Yu9b5ou7SKl6w3x0T-Ew9FyuKMCmAd9zRo,9774
6
- tnfr/config.py,sha256=vx7l92bBFHEeE7faDrNucaLYmk4jnX4R41RErJk3Z5k,1032
7
- tnfr/constants_glyphs.py,sha256=j4hatCJrqxoLfNki4cIV_VWkRVVjR0uP9ZEoiL7bZKU,2566
8
- tnfr/execution.py,sha256=Sjf-2LDIzWvVP3Ri3edSvpcEwC4OsyPqh2WrCY6PfxU,5068
9
- tnfr/flatten.py,sha256=iNzHei_otD07_EMR4AsWyPU2lwAldgDQioUyITvyUpo,8178
10
- tnfr/gamma.py,sha256=TfFze8X3cUQn0pIG6opudkFLNlt1rj95upS9H8YiVI8,10658
11
- tnfr/glyph_history.py,sha256=F_v0X17BUOJlJn9u2rU5gK5Rr3t_fjemVDJrm45NEn8,9158
12
- tnfr/grammar.py,sha256=_sJcTLeBAOmTKGnir7SiVQIHrgNXu44afhVGFwId4h8,10527
13
- tnfr/graph_utils.py,sha256=crRQ-b7MpIRXP_xAHkLYIVU42RrgRqgJTPzZkNPMAI4,2265
14
- tnfr/immutable.py,sha256=Tmut7BWcnILdehmFpt0WA5EWpnF7tp-5f30Rfnaz-rQ,4951
15
- tnfr/import_utils.py,sha256=0yqPuqyCmMsAHvqRovIpaTCQ-1YolljrXnfG2CUTm1E,6538
16
- tnfr/initialization.py,sha256=AelCnte63X0GOQTWsfzMK66rOO4PfxRCa9gUlIigEvU,5783
17
- tnfr/io.py,sha256=ITA3CVCCzU1BY-eltUi299iDKcJgMKFJ6-4tR2zg_is,6608
18
- tnfr/json_utils.py,sha256=_T4DeZZ0omqtigySG3Xc1e0C1ymRtqIWnW_DrYCgf9E,5277
19
- tnfr/locking.py,sha256=mOvaENBNSsWw6KiBG_UXv4xXfZ9uQZvWw5SN2cKFmSU,1168
20
- tnfr/logging_utils.py,sha256=9gEnMYUfxP-824tD1jHI2_98Cfzvlxu-xLCJ996bDW8,3574
21
- tnfr/node.py,sha256=RVYW4A3_I2oNs36EF_HMas0AqrxmaQc6rzoR1wrhQQ0,7121
22
- tnfr/observers.py,sha256=okpR67Vc0lujiFotutgMeQsFodh9PdhfilaIPKw49QE,4623
23
- tnfr/ontosim.py,sha256=UWx8NhovmITosS2vxTPLERaaoGXm0isGSyOjrUwRYXg,4043
24
- tnfr/presets.py,sha256=RR0EuKSI5_TTfsB2ng2pFeFMVxgGwHDDbdy_sCO3gM0,1341
25
- tnfr/rng.py,sha256=UDW1dyDAzJPqIrNDF-ehTgNEy3xRL5OnAgDMnoXJX7k,7310
26
- tnfr/selector.py,sha256=tIA_XcLtXt53Tdz6o9ZGIvI1qdAbp3VT3tYsMXhVLsA,5884
27
- tnfr/sense.py,sha256=d1vmRHnpMupuSawerREpv5LrFrBa1JiANra0DiYJ4Js,9845
28
- tnfr/structural.py,sha256=TXGA9qp8hHIdrYFo6CBUh7lGUcap8Fkk06_dmrvzpg4,8749
29
- tnfr/tokens.py,sha256=nhfBtef-S6XdvGXz6uoJTSzDr45Wr6km1bBNUHek12g,1124
30
- tnfr/trace.py,sha256=sdzD3g6pUlaAPDsPLjBVzOlsV_sJMALZR0hN008PcYc,10283
31
- tnfr/types.py,sha256=n6Gr4BwUr8eWVFcSrjM6uH2iGbNvNN2onYDGAA4yZiU,982
32
- tnfr/validators.py,sha256=xSQk_H9JLaiDPtVAQ0zQaP-EWhhXbAQZOR9Y3F80y1U,2671
33
- tnfr/value_utils.py,sha256=tmgmHXRLr77Y-fyHX5GUwy8kYVxRYvKas53ynUWW-y0,1613
34
- tnfr/cli/__init__.py,sha256=dF5YkpTml_txA6GaH0IP_9NMuZYdEGjAH2wrVarx8OU,1775
35
- tnfr/cli/arguments.py,sha256=ZgNIWEaY0DZ1-04km0twiSmR5iDAhod6fKdJ-Tt0C60,5698
36
- tnfr/cli/execution.py,sha256=-gMAXI-5QDifM9y5qkUjot33A0sHHzxAy7hkhU-2Rrc,8910
37
- tnfr/cli/utils.py,sha256=KNnE1z3pYKsxm3-naDMfLkYOd1gmtuoqA19Z27K1qZ8,979
38
- tnfr/constants/__init__.py,sha256=DFbpF9uEvVqJn4ljYLvV-rdLTf2viGuF49Gb7k9MVrA,5011
39
- tnfr/constants/core.py,sha256=ulMaJajWf6VPVbpxi64QQ2m5_w3Vd_WDfJYJ2C2xlv8,4720
40
- tnfr/constants/init.py,sha256=WdMKkdPKO7vyQoJAuoFnhWbb3n1nBkmkzprwyYj_ZN8,805
41
- tnfr/constants/metric.py,sha256=xicROOCW8gd3C3IM-fYZ18UhEtrcmkV2VQ-v3Bwms7M,3503
42
- tnfr/dynamics/__init__.py,sha256=lldlB5YZZzFJlcGHKi8QuxSOfCWqU8lIuYwHdOltUXw,20964
43
- tnfr/dynamics/dnfr.py,sha256=bQ_FNfJBZ7lfFBdV4I9tTueTr846qLL38b4ffMPIlLI,22114
44
- tnfr/dynamics/integrators.py,sha256=RK4rG9A5PrvRoUfIjRbeAtU1Yk4T6hEKB24-Rw-eFhg,8204
45
- tnfr/dynamics/sampling.py,sha256=6dkmv4ul_eFGlXAX4pqkH7-PVofHUrQM3_RH36T1AMQ,1148
46
- tnfr/helpers/__init__.py,sha256=9pCBXPg-Iid4uttV9fuTaqNgcHIRnwsymKJ86vzNB_Y,1638
47
- tnfr/helpers/numeric.py,sha256=IdvF1RZzdBx1S_kGGDrBxTmrARfR0E03Vz62FhT5Xxw,2692
48
- tnfr/metrics/__init__.py,sha256=4gujlyn3aN95lkxCjQPPgKS_xJYm5ShcraeEkDYKR_E,885
49
- tnfr/metrics/coherence.py,sha256=DTf6oP1NWfX2ILvvC6I73kFDPXhypknLCZK9UcKoxXA,23273
50
- tnfr/metrics/common.py,sha256=mZCwtH_hkd2VbaF93TISFfeCLHNb-C9ajziZAAaLGzQ,4418
51
- tnfr/metrics/core.py,sha256=pHXO4R64vm1dsnvub3ymN0vvKEekgqAUn50kc6hsnHE,2641
52
- tnfr/metrics/diagnosis.py,sha256=np9AF_fbbxqxUsVS6TFfArIdeRTDBDq6KHAHBy2Ak6M,6603
53
- tnfr/metrics/export.py,sha256=bPSvXfAF9jTOomy61CZFlwqZVwqbea-L7nm7yGxuR4s,4214
54
- tnfr/metrics/glyph_timing.py,sha256=ROBEHp2GhQ6Cxawcw-7BskWZNLQdU0kcX_hW6RdGjKQ,5082
55
- tnfr/metrics/reporting.py,sha256=ajuKS0bL5T33VRsr31ZR0xHJvd5pWXurVDgH9EvBF3M,3806
56
- tnfr/metrics/sense_index.py,sha256=BLc99BjrcdztKr3Ftou88Y4orADBW4bEBUyCvQTs4mY,3299
57
- tnfr/metrics/trig.py,sha256=qdjqwjyJTuv0O5wlmkfugfi6twPvKASohaRQA2kmy5M,5306
58
- tnfr/metrics/trig_cache.py,sha256=WtgIqH8IkwzXuYk8SR06zRyPnZlCvyCnyRjmEzRqneY,3101
59
- tnfr/operators/__init__.py,sha256=MhOTKM50P4WrC5RjSH5qyBSHF6W4nxtddmiGR7Z0jnQ,12296
60
- tnfr/operators/jitter.py,sha256=CNZje2645qw64xxfLS9pWoOVEvabOdZAe9M8j0f9rpM,5930
61
- tnfr/operators/remesh.py,sha256=u1VhdN7-n3hlJGcDtMk4VG3CmrH8A7iVQOlsEXedZDY,15100
62
- tnfr-4.5.2.dist-info/licenses/LICENSE.md,sha256=SRvvhXLrKtseuK6DARbuJffuXOXqAyk3wvF2n0t1SWA,1109
63
- tnfr-4.5.2.dist-info/METADATA,sha256=ITBMg5NNN1zOVcTCV_NkvkccXt6jJt4FHoXhdEaQBKQ,17367
64
- tnfr-4.5.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
65
- tnfr-4.5.2.dist-info/entry_points.txt,sha256=j4-QRHqeT2WnchHe_mvK7npGTLjlyfLpvRONFe9Z4MU,39
66
- tnfr-4.5.2.dist-info/top_level.txt,sha256=Q2HJnvc5Rt2VHwVvyBTnNPT4SfmJWnCj7XUxxEvQa7c,5
67
- tnfr-4.5.2.dist-info/RECORD,,
File without changes