tnfr 4.5.2__tar.gz → 7.0.0__tar.gz

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 (361) hide show
  1. {tnfr-4.5.2 → tnfr-7.0.0}/LICENSE.md +1 -1
  2. tnfr-7.0.0/PKG-INFO +179 -0
  3. tnfr-7.0.0/README.md +106 -0
  4. tnfr-7.0.0/pyproject.toml +181 -0
  5. tnfr-7.0.0/src/tnfr/__init__.py +315 -0
  6. tnfr-7.0.0/src/tnfr/__init__.pyi +33 -0
  7. tnfr-7.0.0/src/tnfr/_compat.py +10 -0
  8. tnfr-7.0.0/src/tnfr/_generated_version.py +34 -0
  9. tnfr-7.0.0/src/tnfr/_version.py +49 -0
  10. tnfr-7.0.0/src/tnfr/_version.pyi +7 -0
  11. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/alias.py +117 -31
  12. tnfr-7.0.0/src/tnfr/alias.pyi +108 -0
  13. tnfr-7.0.0/src/tnfr/cache.py +12 -0
  14. tnfr-7.0.0/src/tnfr/cache.pyi +16 -0
  15. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/callback_utils.py +16 -38
  16. tnfr-7.0.0/src/tnfr/callback_utils.pyi +79 -0
  17. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/cli/__init__.py +34 -14
  18. tnfr-7.0.0/src/tnfr/cli/__init__.pyi +26 -0
  19. tnfr-7.0.0/src/tnfr/cli/arguments.py +360 -0
  20. tnfr-7.0.0/src/tnfr/cli/arguments.pyi +27 -0
  21. tnfr-7.0.0/src/tnfr/cli/execution.py +708 -0
  22. tnfr-7.0.0/src/tnfr/cli/execution.pyi +70 -0
  23. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/cli/utils.py +18 -3
  24. tnfr-7.0.0/src/tnfr/cli/utils.pyi +8 -0
  25. tnfr-7.0.0/src/tnfr/config/__init__.py +13 -0
  26. tnfr-7.0.0/src/tnfr/config/__init__.pyi +10 -0
  27. tnfr-4.5.2/src/tnfr/constants_glyphs.py → tnfr-7.0.0/src/tnfr/config/constants.py +26 -20
  28. tnfr-7.0.0/src/tnfr/config/constants.pyi +12 -0
  29. tnfr-7.0.0/src/tnfr/config/feature_flags.py +83 -0
  30. tnfr-4.5.2/src/tnfr/config.py → tnfr-7.0.0/src/tnfr/config/init.py +11 -7
  31. tnfr-7.0.0/src/tnfr/config/init.pyi +8 -0
  32. tnfr-7.0.0/src/tnfr/config/operator_names.py +93 -0
  33. tnfr-7.0.0/src/tnfr/config/operator_names.pyi +28 -0
  34. tnfr-7.0.0/src/tnfr/config/presets.py +84 -0
  35. tnfr-7.0.0/src/tnfr/config/presets.pyi +7 -0
  36. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/__init__.py +80 -29
  37. tnfr-7.0.0/src/tnfr/constants/__init__.pyi +92 -0
  38. tnfr-7.0.0/src/tnfr/constants/aliases.py +31 -0
  39. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/core.py +4 -4
  40. tnfr-7.0.0/src/tnfr/constants/core.pyi +17 -0
  41. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/init.py +1 -1
  42. tnfr-7.0.0/src/tnfr/constants/init.pyi +12 -0
  43. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/metric.py +7 -15
  44. tnfr-7.0.0/src/tnfr/constants/metric.pyi +19 -0
  45. tnfr-7.0.0/src/tnfr/dynamics/__init__.py +190 -0
  46. tnfr-7.0.0/src/tnfr/dynamics/__init__.pyi +82 -0
  47. tnfr-7.0.0/src/tnfr/dynamics/adaptation.py +267 -0
  48. tnfr-7.0.0/src/tnfr/dynamics/aliases.py +23 -0
  49. tnfr-7.0.0/src/tnfr/dynamics/coordination.py +385 -0
  50. tnfr-7.0.0/src/tnfr/dynamics/dnfr.py +2616 -0
  51. tnfr-7.0.0/src/tnfr/dynamics/dnfr.pyi +24 -0
  52. tnfr-7.0.0/src/tnfr/dynamics/integrators.py +575 -0
  53. tnfr-7.0.0/src/tnfr/dynamics/integrators.pyi +34 -0
  54. tnfr-7.0.0/src/tnfr/dynamics/runtime.py +881 -0
  55. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/dynamics/sampling.py +10 -5
  56. tnfr-7.0.0/src/tnfr/dynamics/sampling.pyi +7 -0
  57. tnfr-7.0.0/src/tnfr/dynamics/selectors.py +719 -0
  58. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/execution.py +70 -48
  59. tnfr-7.0.0/src/tnfr/execution.pyi +45 -0
  60. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/flatten.py +13 -9
  61. tnfr-7.0.0/src/tnfr/flatten.pyi +21 -0
  62. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/gamma.py +66 -53
  63. tnfr-7.0.0/src/tnfr/gamma.pyi +34 -0
  64. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/glyph_history.py +110 -52
  65. tnfr-7.0.0/src/tnfr/glyph_history.pyi +35 -0
  66. tnfr-7.0.0/src/tnfr/glyph_runtime.py +16 -0
  67. tnfr-7.0.0/src/tnfr/glyph_runtime.pyi +9 -0
  68. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/immutable.py +69 -28
  69. tnfr-7.0.0/src/tnfr/immutable.pyi +34 -0
  70. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/initialization.py +16 -16
  71. tnfr-7.0.0/src/tnfr/initialization.pyi +65 -0
  72. tnfr-7.0.0/src/tnfr/io.py +12 -0
  73. tnfr-7.0.0/src/tnfr/io.pyi +16 -0
  74. tnfr-7.0.0/src/tnfr/locking.pyi +7 -0
  75. tnfr-7.0.0/src/tnfr/mathematics/__init__.py +81 -0
  76. tnfr-7.0.0/src/tnfr/mathematics/backend.py +426 -0
  77. tnfr-7.0.0/src/tnfr/mathematics/dynamics.py +398 -0
  78. tnfr-7.0.0/src/tnfr/mathematics/epi.py +254 -0
  79. tnfr-7.0.0/src/tnfr/mathematics/generators.py +222 -0
  80. tnfr-7.0.0/src/tnfr/mathematics/metrics.py +119 -0
  81. tnfr-7.0.0/src/tnfr/mathematics/operators.py +233 -0
  82. tnfr-7.0.0/src/tnfr/mathematics/operators_factory.py +71 -0
  83. tnfr-7.0.0/src/tnfr/mathematics/projection.py +78 -0
  84. tnfr-7.0.0/src/tnfr/mathematics/runtime.py +173 -0
  85. tnfr-7.0.0/src/tnfr/mathematics/spaces.py +247 -0
  86. tnfr-7.0.0/src/tnfr/mathematics/transforms.py +292 -0
  87. tnfr-7.0.0/src/tnfr/metrics/__init__.pyi +20 -0
  88. tnfr-7.0.0/src/tnfr/metrics/coherence.py +1498 -0
  89. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/common.py +23 -16
  90. tnfr-7.0.0/src/tnfr/metrics/common.pyi +46 -0
  91. tnfr-7.0.0/src/tnfr/metrics/core.py +317 -0
  92. tnfr-7.0.0/src/tnfr/metrics/core.pyi +13 -0
  93. tnfr-7.0.0/src/tnfr/metrics/diagnosis.py +831 -0
  94. tnfr-7.0.0/src/tnfr/metrics/diagnosis.pyi +85 -0
  95. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/export.py +27 -15
  96. tnfr-7.0.0/src/tnfr/metrics/glyph_timing.py +379 -0
  97. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/reporting.py +33 -22
  98. tnfr-7.0.0/src/tnfr/metrics/reporting.pyi +12 -0
  99. tnfr-7.0.0/src/tnfr/metrics/sense_index.py +1064 -0
  100. tnfr-7.0.0/src/tnfr/metrics/sense_index.pyi +9 -0
  101. tnfr-7.0.0/src/tnfr/metrics/trig.py +372 -0
  102. tnfr-7.0.0/src/tnfr/metrics/trig.pyi +13 -0
  103. tnfr-7.0.0/src/tnfr/metrics/trig_cache.py +202 -0
  104. tnfr-7.0.0/src/tnfr/metrics/trig_cache.pyi +10 -0
  105. tnfr-7.0.0/src/tnfr/node.py +663 -0
  106. tnfr-7.0.0/src/tnfr/node.pyi +178 -0
  107. tnfr-7.0.0/src/tnfr/observers.py +276 -0
  108. tnfr-7.0.0/src/tnfr/observers.pyi +31 -0
  109. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/ontosim.py +23 -19
  110. tnfr-7.0.0/src/tnfr/ontosim.pyi +28 -0
  111. tnfr-7.0.0/src/tnfr/operators/__init__.py +939 -0
  112. tnfr-7.0.0/src/tnfr/operators/__init__.pyi +45 -0
  113. tnfr-7.0.0/src/tnfr/operators/definitions.py +513 -0
  114. tnfr-7.0.0/src/tnfr/operators/definitions.pyi +78 -0
  115. tnfr-7.0.0/src/tnfr/operators/grammar.py +760 -0
  116. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/operators/jitter.py +107 -38
  117. tnfr-7.0.0/src/tnfr/operators/jitter.pyi +11 -0
  118. tnfr-7.0.0/src/tnfr/operators/registry.py +75 -0
  119. tnfr-7.0.0/src/tnfr/operators/registry.pyi +13 -0
  120. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/operators/remesh.py +149 -88
  121. tnfr-7.0.0/src/tnfr/py.typed +0 -0
  122. tnfr-7.0.0/src/tnfr/rng.py +157 -0
  123. tnfr-7.0.0/src/tnfr/rng.pyi +14 -0
  124. tnfr-7.0.0/src/tnfr/schemas/__init__.py +8 -0
  125. tnfr-7.0.0/src/tnfr/schemas/grammar.json +94 -0
  126. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/selector.py +25 -19
  127. tnfr-7.0.0/src/tnfr/selector.pyi +19 -0
  128. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/sense.py +72 -62
  129. tnfr-7.0.0/src/tnfr/sense.pyi +23 -0
  130. tnfr-7.0.0/src/tnfr/structural.py +589 -0
  131. tnfr-7.0.0/src/tnfr/structural.pyi +69 -0
  132. tnfr-7.0.0/src/tnfr/telemetry/__init__.py +35 -0
  133. tnfr-7.0.0/src/tnfr/telemetry/cache_metrics.py +226 -0
  134. tnfr-7.0.0/src/tnfr/telemetry/nu_f.py +423 -0
  135. tnfr-7.0.0/src/tnfr/telemetry/nu_f.pyi +123 -0
  136. tnfr-7.0.0/src/tnfr/telemetry/verbosity.py +37 -0
  137. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/tokens.py +1 -3
  138. tnfr-7.0.0/src/tnfr/tokens.pyi +36 -0
  139. tnfr-7.0.0/src/tnfr/trace.py +526 -0
  140. tnfr-7.0.0/src/tnfr/trace.pyi +40 -0
  141. tnfr-7.0.0/src/tnfr/types.py +612 -0
  142. tnfr-7.0.0/src/tnfr/types.pyi +331 -0
  143. tnfr-7.0.0/src/tnfr/units.py +69 -0
  144. tnfr-7.0.0/src/tnfr/units.pyi +16 -0
  145. tnfr-7.0.0/src/tnfr/utils/__init__.py +217 -0
  146. tnfr-7.0.0/src/tnfr/utils/__init__.pyi +202 -0
  147. tnfr-7.0.0/src/tnfr/utils/cache.py +2395 -0
  148. tnfr-7.0.0/src/tnfr/utils/cache.pyi +468 -0
  149. tnfr-7.0.0/src/tnfr/utils/chunks.py +104 -0
  150. tnfr-7.0.0/src/tnfr/utils/chunks.pyi +21 -0
  151. tnfr-4.5.2/src/tnfr/collections_utils.py → tnfr-7.0.0/src/tnfr/utils/data.py +147 -90
  152. tnfr-7.0.0/src/tnfr/utils/data.pyi +64 -0
  153. tnfr-7.0.0/src/tnfr/utils/graph.py +85 -0
  154. tnfr-7.0.0/src/tnfr/utils/graph.pyi +10 -0
  155. tnfr-7.0.0/src/tnfr/utils/init.py +770 -0
  156. tnfr-7.0.0/src/tnfr/utils/init.pyi +78 -0
  157. tnfr-7.0.0/src/tnfr/utils/io.py +456 -0
  158. {tnfr-4.5.2/src/tnfr/helpers → tnfr-7.0.0/src/tnfr/utils}/numeric.py +51 -24
  159. tnfr-7.0.0/src/tnfr/utils/numeric.pyi +21 -0
  160. tnfr-7.0.0/src/tnfr/validation/__init__.py +113 -0
  161. tnfr-7.0.0/src/tnfr/validation/__init__.pyi +77 -0
  162. tnfr-7.0.0/src/tnfr/validation/compatibility.py +95 -0
  163. tnfr-7.0.0/src/tnfr/validation/compatibility.pyi +6 -0
  164. tnfr-7.0.0/src/tnfr/validation/grammar.py +71 -0
  165. tnfr-7.0.0/src/tnfr/validation/grammar.pyi +40 -0
  166. tnfr-7.0.0/src/tnfr/validation/graph.py +138 -0
  167. tnfr-7.0.0/src/tnfr/validation/graph.pyi +17 -0
  168. tnfr-7.0.0/src/tnfr/validation/rules.py +281 -0
  169. tnfr-7.0.0/src/tnfr/validation/rules.pyi +55 -0
  170. tnfr-7.0.0/src/tnfr/validation/runtime.py +263 -0
  171. tnfr-7.0.0/src/tnfr/validation/runtime.pyi +31 -0
  172. tnfr-7.0.0/src/tnfr/validation/soft_filters.py +170 -0
  173. tnfr-7.0.0/src/tnfr/validation/soft_filters.pyi +37 -0
  174. tnfr-7.0.0/src/tnfr/validation/spectral.py +159 -0
  175. tnfr-7.0.0/src/tnfr/validation/spectral.pyi +46 -0
  176. tnfr-7.0.0/src/tnfr/validation/syntax.py +40 -0
  177. tnfr-7.0.0/src/tnfr/validation/syntax.pyi +10 -0
  178. tnfr-7.0.0/src/tnfr/validation/window.py +39 -0
  179. tnfr-7.0.0/src/tnfr/validation/window.pyi +1 -0
  180. tnfr-7.0.0/src/tnfr/viz/__init__.py +9 -0
  181. tnfr-7.0.0/src/tnfr/viz/matplotlib.py +246 -0
  182. tnfr-7.0.0/src/tnfr.egg-info/PKG-INFO +179 -0
  183. tnfr-7.0.0/src/tnfr.egg-info/SOURCES.txt +188 -0
  184. tnfr-7.0.0/src/tnfr.egg-info/requires.txt +58 -0
  185. tnfr-4.5.2/PKG-INFO +0 -379
  186. tnfr-4.5.2/README.md +0 -344
  187. tnfr-4.5.2/pyproject.toml +0 -46
  188. tnfr-4.5.2/src/tnfr/__init__.py +0 -91
  189. tnfr-4.5.2/src/tnfr/cache.py +0 -578
  190. tnfr-4.5.2/src/tnfr/cli/arguments.py +0 -177
  191. tnfr-4.5.2/src/tnfr/cli/execution.py +0 -288
  192. tnfr-4.5.2/src/tnfr/dynamics/__init__.py +0 -658
  193. tnfr-4.5.2/src/tnfr/dynamics/dnfr.py +0 -733
  194. tnfr-4.5.2/src/tnfr/dynamics/integrators.py +0 -267
  195. tnfr-4.5.2/src/tnfr/grammar.py +0 -344
  196. tnfr-4.5.2/src/tnfr/graph_utils.py +0 -84
  197. tnfr-4.5.2/src/tnfr/helpers/__init__.py +0 -71
  198. tnfr-4.5.2/src/tnfr/import_utils.py +0 -228
  199. tnfr-4.5.2/src/tnfr/io.py +0 -246
  200. tnfr-4.5.2/src/tnfr/json_utils.py +0 -162
  201. tnfr-4.5.2/src/tnfr/logging_utils.py +0 -116
  202. tnfr-4.5.2/src/tnfr/metrics/coherence.py +0 -829
  203. tnfr-4.5.2/src/tnfr/metrics/core.py +0 -101
  204. tnfr-4.5.2/src/tnfr/metrics/diagnosis.py +0 -234
  205. tnfr-4.5.2/src/tnfr/metrics/glyph_timing.py +0 -189
  206. tnfr-4.5.2/src/tnfr/metrics/sense_index.py +0 -120
  207. tnfr-4.5.2/src/tnfr/metrics/trig.py +0 -181
  208. tnfr-4.5.2/src/tnfr/metrics/trig_cache.py +0 -109
  209. tnfr-4.5.2/src/tnfr/node.py +0 -257
  210. tnfr-4.5.2/src/tnfr/observers.py +0 -159
  211. tnfr-4.5.2/src/tnfr/operators/__init__.py +0 -420
  212. tnfr-4.5.2/src/tnfr/presets.py +0 -60
  213. tnfr-4.5.2/src/tnfr/rng.py +0 -254
  214. tnfr-4.5.2/src/tnfr/structural.py +0 -329
  215. tnfr-4.5.2/src/tnfr/trace.py +0 -369
  216. tnfr-4.5.2/src/tnfr/types.py +0 -44
  217. tnfr-4.5.2/src/tnfr/validators.py +0 -84
  218. tnfr-4.5.2/src/tnfr/value_utils.py +0 -59
  219. tnfr-4.5.2/src/tnfr.egg-info/PKG-INFO +0 -379
  220. tnfr-4.5.2/src/tnfr.egg-info/SOURCES.txt +0 -204
  221. tnfr-4.5.2/src/tnfr.egg-info/requires.txt +0 -15
  222. tnfr-4.5.2/tests/test_accumulate_cos_sin.py +0 -27
  223. tnfr-4.5.2/tests/test_add_edge_callbacks.py +0 -11
  224. tnfr-4.5.2/tests/test_add_edge_errors.py +0 -26
  225. tnfr-4.5.2/tests/test_add_edge_networkx.py +0 -55
  226. tnfr-4.5.2/tests/test_add_edge_versions.py +0 -28
  227. tnfr-4.5.2/tests/test_alias_accessor_usage.py +0 -143
  228. tnfr-4.5.2/tests/test_alias_get_default.py +0 -10
  229. tnfr-4.5.2/tests/test_alias_get_strict.py +0 -26
  230. tnfr-4.5.2/tests/test_alias_helpers_threadsafe.py +0 -19
  231. tnfr-4.5.2/tests/test_alias_iterable.py +0 -43
  232. tnfr-4.5.2/tests/test_alias_sequence.py +0 -22
  233. tnfr-4.5.2/tests/test_alias_set_error.py +0 -10
  234. tnfr-4.5.2/tests/test_cache_helpers.py +0 -46
  235. tnfr-4.5.2/tests/test_callback_errors_limit.py +0 -32
  236. tnfr-4.5.2/tests/test_canon.py +0 -38
  237. tnfr-4.5.2/tests/test_cli.py +0 -418
  238. tnfr-4.5.2/tests/test_cli_flatten_tokens.py +0 -6
  239. tnfr-4.5.2/tests/test_cli_history.py +0 -100
  240. tnfr-4.5.2/tests/test_cli_sanity.py +0 -100
  241. tnfr-4.5.2/tests/test_coherence_cache.py +0 -65
  242. tnfr-4.5.2/tests/test_collect_attr_generators.py +0 -18
  243. tnfr-4.5.2/tests/test_compute_Si_numpy_usage.py +0 -54
  244. tnfr-4.5.2/tests/test_compute_coherence.py +0 -73
  245. tnfr-4.5.2/tests/test_compute_theta_trig.py +0 -22
  246. tnfr-4.5.2/tests/test_config_apply.py +0 -88
  247. tnfr-4.5.2/tests/test_count_glyphs.py +0 -28
  248. tnfr-4.5.2/tests/test_defaults_integrity.py +0 -22
  249. tnfr-4.5.2/tests/test_diagnosis_state.py +0 -13
  250. tnfr-4.5.2/tests/test_dnfr_cache.py +0 -233
  251. tnfr-4.5.2/tests/test_dnfr_hooks.py +0 -41
  252. tnfr-4.5.2/tests/test_dnfr_precompute.py +0 -74
  253. tnfr-4.5.2/tests/test_dynamics_benchmark.py +0 -23
  254. tnfr-4.5.2/tests/test_dynamics_helpers.py +0 -129
  255. tnfr-4.5.2/tests/test_dynamics_run.py +0 -74
  256. tnfr-4.5.2/tests/test_dynamics_vectorized.py +0 -39
  257. tnfr-4.5.2/tests/test_edge_cases.py +0 -74
  258. tnfr-4.5.2/tests/test_edge_version_cache.py +0 -122
  259. tnfr-4.5.2/tests/test_edge_version_cache_limit.py +0 -13
  260. tnfr-4.5.2/tests/test_ensure_callbacks.py +0 -94
  261. tnfr-4.5.2/tests/test_ensure_collection.py +0 -100
  262. tnfr-4.5.2/tests/test_ensure_history_trim_performance.py +0 -28
  263. tnfr-4.5.2/tests/test_export_metrics.py +0 -93
  264. tnfr-4.5.2/tests/test_flatten_structure.py +0 -52
  265. tnfr-4.5.2/tests/test_freeze.py +0 -55
  266. tnfr-4.5.2/tests/test_gamma.py +0 -360
  267. tnfr-4.5.2/tests/test_get_attr_default.py +0 -62
  268. tnfr-4.5.2/tests/test_get_attr_strict.py +0 -41
  269. tnfr-4.5.2/tests/test_get_rng.py +0 -31
  270. tnfr-4.5.2/tests/test_get_rng_threadsafe.py +0 -27
  271. tnfr-4.5.2/tests/test_glyph_helpers.py +0 -25
  272. tnfr-4.5.2/tests/test_glyph_history_dict.py +0 -114
  273. tnfr-4.5.2/tests/test_glyph_history_windowing.py +0 -277
  274. tnfr-4.5.2/tests/test_grammar.py +0 -196
  275. tnfr-4.5.2/tests/test_history.py +0 -23
  276. tnfr-4.5.2/tests/test_history_counter.py +0 -54
  277. tnfr-4.5.2/tests/test_history_heap_cleanup.py +0 -58
  278. tnfr-4.5.2/tests/test_history_maxlen.py +0 -119
  279. tnfr-4.5.2/tests/test_history_methods.py +0 -31
  280. tnfr-4.5.2/tests/test_history_series.py +0 -54
  281. tnfr-4.5.2/tests/test_import_utils.py +0 -149
  282. tnfr-4.5.2/tests/test_initialization.py +0 -81
  283. tnfr-4.5.2/tests/test_inject_defaults_tuple.py +0 -16
  284. tnfr-4.5.2/tests/test_integrators.py +0 -102
  285. tnfr-4.5.2/tests/test_invariants.py +0 -105
  286. tnfr-4.5.2/tests/test_invoke_callbacks.py +0 -40
  287. tnfr-4.5.2/tests/test_is_immutable.py +0 -156
  288. tnfr-4.5.2/tests/test_json_utils.py +0 -161
  289. tnfr-4.5.2/tests/test_kahan_sum.py +0 -26
  290. tnfr-4.5.2/tests/test_knn_edges.py +0 -32
  291. tnfr-4.5.2/tests/test_list_mean.py +0 -18
  292. tnfr-4.5.2/tests/test_local_phase_sync.py +0 -29
  293. tnfr-4.5.2/tests/test_locking.py +0 -25
  294. tnfr-4.5.2/tests/test_logging_module.py +0 -71
  295. tnfr-4.5.2/tests/test_logging_threadsafe.py +0 -58
  296. tnfr-4.5.2/tests/test_make_rng.py +0 -52
  297. tnfr-4.5.2/tests/test_make_rng_threadsafe.py +0 -45
  298. tnfr-4.5.2/tests/test_merge_and_normalize_weights.py +0 -23
  299. tnfr-4.5.2/tests/test_metrics.py +0 -310
  300. tnfr-4.5.2/tests/test_min_max_range.py +0 -14
  301. tnfr-4.5.2/tests/test_missing_dependency_error_cache.py +0 -13
  302. tnfr-4.5.2/tests/test_nav.py +0 -33
  303. tnfr-4.5.2/tests/test_neighbor_phase_mean_missing_trig.py +0 -89
  304. tnfr-4.5.2/tests/test_neighbor_phase_mean_no_graph.py +0 -45
  305. tnfr-4.5.2/tests/test_neighbor_phase_mean_performance.py +0 -47
  306. tnfr-4.5.2/tests/test_neighbors_map_cache.py +0 -17
  307. tnfr-4.5.2/tests/test_node_all_nodes.py +0 -24
  308. tnfr-4.5.2/tests/test_node_from_graph_threadsafe.py +0 -29
  309. tnfr-4.5.2/tests/test_node_offset.py +0 -24
  310. tnfr-4.5.2/tests/test_node_sample.py +0 -137
  311. tnfr-4.5.2/tests/test_node_set_checksum.py +0 -111
  312. tnfr-4.5.2/tests/test_node_state_extra.py +0 -8
  313. tnfr-4.5.2/tests/test_node_weights.py +0 -56
  314. tnfr-4.5.2/tests/test_normalize_callback_entry.py +0 -30
  315. tnfr-4.5.2/tests/test_normalize_weights.py +0 -118
  316. tnfr-4.5.2/tests/test_numeric_helpers.py +0 -39
  317. tnfr-4.5.2/tests/test_observers.py +0 -240
  318. tnfr-4.5.2/tests/test_operator_factors.py +0 -117
  319. tnfr-4.5.2/tests/test_operators.py +0 -217
  320. tnfr-4.5.2/tests/test_optional_import.py +0 -23
  321. tnfr-4.5.2/tests/test_parse_tokens_errors.py +0 -35
  322. tnfr-4.5.2/tests/test_parse_toml.py +0 -27
  323. tnfr-4.5.2/tests/test_preparar_red.py +0 -15
  324. tnfr-4.5.2/tests/test_prepare_dnfr_data_performance.py +0 -37
  325. tnfr-4.5.2/tests/test_program.py +0 -313
  326. tnfr-4.5.2/tests/test_public_api.py +0 -28
  327. tnfr-4.5.2/tests/test_push_glyph.py +0 -34
  328. tnfr-4.5.2/tests/test_read_structured_file_errors.py +0 -192
  329. tnfr-4.5.2/tests/test_recent_glyph.py +0 -49
  330. tnfr-4.5.2/tests/test_register_callback.py +0 -115
  331. tnfr-4.5.2/tests/test_remesh.py +0 -106
  332. tnfr-4.5.2/tests/test_remesh_community.py +0 -32
  333. tnfr-4.5.2/tests/test_rng_base_seed.py +0 -126
  334. tnfr-4.5.2/tests/test_rng_for_step.py +0 -44
  335. tnfr-4.5.2/tests/test_safe_write.py +0 -79
  336. tnfr-4.5.2/tests/test_scenarios.py +0 -40
  337. tnfr-4.5.2/tests/test_selector_norms.py +0 -36
  338. tnfr-4.5.2/tests/test_selector_utils.py +0 -136
  339. tnfr-4.5.2/tests/test_sense.py +0 -140
  340. tnfr-4.5.2/tests/test_set_attr_error.py +0 -10
  341. tnfr-4.5.2/tests/test_si_helpers.py +0 -110
  342. tnfr-4.5.2/tests/test_stable_json.py +0 -26
  343. tnfr-4.5.2/tests/test_structural.py +0 -89
  344. tnfr-4.5.2/tests/test_topological_remesh.py +0 -141
  345. tnfr-4.5.2/tests/test_trace.py +0 -149
  346. tnfr-4.5.2/tests/test_trig_cache_reuse.py +0 -74
  347. tnfr-4.5.2/tests/test_update_tg_node.py +0 -39
  348. tnfr-4.5.2/tests/test_update_tg_performance.py +0 -88
  349. tnfr-4.5.2/tests/test_validate_aliases.py +0 -30
  350. tnfr-4.5.2/tests/test_validate_window.py +0 -17
  351. tnfr-4.5.2/tests/test_validators.py +0 -120
  352. tnfr-4.5.2/tests/test_value_utils.py +0 -31
  353. tnfr-4.5.2/tests/test_vf_coherencia.py +0 -33
  354. tnfr-4.5.2/tests/test_vf_dnfr_max_update.py +0 -73
  355. tnfr-4.5.2/tests/test_warn_failure_emit.py +0 -62
  356. {tnfr-4.5.2 → tnfr-7.0.0}/setup.cfg +0 -0
  357. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/locking.py +0 -0
  358. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/__init__.py +10 -10
  359. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr.egg-info/dependency_links.txt +0 -0
  360. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr.egg-info/entry_points.txt +0 -0
  361. {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright (c) 2025 TNFR - Teoría de la naturaleza fractral resonante
3
+ Copyright (c) 2025 TNFR Resonant Fractal Nature Theory
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
tnfr-7.0.0/PKG-INFO ADDED
@@ -0,0 +1,179 @@
1
+ Metadata-Version: 2.4
2
+ Name: tnfr
3
+ Version: 7.0.0
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/TNFR-Python-Engine
9
+ Project-URL: GPT, https://chatgpt.com/g/g-67abc78885a88191b2d67f94fd60dc97-tnfr-resonant-fractal-nature-theory
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
+ Classifier: Topic :: Scientific/Engineering
21
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
22
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
23
+ Requires-Python: >=3.9
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE.md
26
+ Requires-Dist: networkx>=2.6
27
+ Requires-Dist: cachetools>=5
28
+ Requires-Dist: typing-extensions>=4.4; python_version < "3.10"
29
+ Provides-Extra: numpy
30
+ Requires-Dist: numpy>=1.24; extra == "numpy"
31
+ Provides-Extra: jax
32
+ Requires-Dist: jax>=0.4; extra == "jax"
33
+ Provides-Extra: torch
34
+ Requires-Dist: torch>=2.1; extra == "torch"
35
+ Provides-Extra: yaml
36
+ Requires-Dist: pyyaml>=6.0; extra == "yaml"
37
+ Provides-Extra: orjson
38
+ Requires-Dist: orjson>=3; extra == "orjson"
39
+ Provides-Extra: viz
40
+ Requires-Dist: matplotlib>=3.7; extra == "viz"
41
+ Provides-Extra: docs
42
+ Requires-Dist: sphinx>=7.2; extra == "docs"
43
+ Requires-Dist: sphinx-autodoc-typehints>=1.25; extra == "docs"
44
+ Requires-Dist: myst-parser>=2.0; extra == "docs"
45
+ Requires-Dist: nbsphinx>=0.9; extra == "docs"
46
+ Requires-Dist: sphinx-rtd-theme>=1.3; extra == "docs"
47
+ Requires-Dist: sphinxcontrib-mermaid>=0.9; extra == "docs"
48
+ Requires-Dist: ipykernel>=6; extra == "docs"
49
+ Requires-Dist: nbconvert>=7.16; extra == "docs"
50
+ Requires-Dist: pypandoc-binary>=1.14; extra == "docs"
51
+ Provides-Extra: test
52
+ Requires-Dist: pytest>=7; extra == "test"
53
+ Requires-Dist: pytest-benchmark>=4; extra == "test"
54
+ Requires-Dist: pydocstyle>=6; extra == "test"
55
+ Requires-Dist: coverage>=7; extra == "test"
56
+ Requires-Dist: hypothesis>=6; extra == "test"
57
+ Requires-Dist: hypothesis-networkx>=0.3; extra == "test"
58
+ Requires-Dist: flake8>=5; extra == "test"
59
+ Requires-Dist: flake8-pyproject>=1.2; extra == "test"
60
+ Requires-Dist: vulture>=2; extra == "test"
61
+ Requires-Dist: matplotlib>=3.7; extra == "test"
62
+ Provides-Extra: typecheck
63
+ Requires-Dist: mypy>=1.8; extra == "typecheck"
64
+ Requires-Dist: networkx-stubs>=0.0.1; extra == "typecheck"
65
+ Requires-Dist: types-cachetools>=6.0.0.0; extra == "typecheck"
66
+ Requires-Dist: numpy>=1.24; extra == "typecheck"
67
+ Provides-Extra: release
68
+ Requires-Dist: python-semantic-release<11,>=10.4; extra == "release"
69
+ Requires-Dist: setuptools-scm<9,>=8; extra == "release"
70
+ Requires-Dist: build>=1; extra == "release"
71
+ Requires-Dist: towncrier>=23; extra == "release"
72
+ Dynamic: license-file
73
+
74
+ # TNFR Python Engine
75
+
76
+ Canonical implementation of the Resonant Fractal Nature Theory (TNFR) for modelling structural
77
+ coherence. The engine seeds resonant nodes, applies structural operators, coordinates
78
+ ΔNFR/phase dynamics, and measures coherence metrics (C(t), Si, νf) without breaking the nodal
79
+ equation $\partial EPI/\partial t = \nu_f \cdot \Delta NFR(t)$.
80
+
81
+ ## Snapshot
82
+
83
+ - **Operate:** build nodes with `tnfr.create_nfr`, execute trajectories via
84
+ `tnfr.structural.run_sequence`, and evolve dynamics with `tnfr.dynamics.run`.
85
+ - **Observe:** register metrics/trace callbacks to capture ΔNFR, C(t), Si, and structural
86
+ histories
87
+ for every run.
88
+ - **Extend:** rely on the canonical operator grammar and invariants before introducing new
89
+ utilities or telemetry.
90
+
91
+ ## Quickstart
92
+
93
+ Install from PyPI (Python ≥ 3.9):
94
+
95
+ ```bash
96
+ pip install tnfr
97
+ ```
98
+
99
+ Then follow the [quickstart guide](docs/source/getting-started/quickstart.md) for Python and CLI
100
+ walkthroughs plus optional dependency caching helpers.
101
+
102
+ ## CLI profiling helpers
103
+
104
+ Generate Sense Index and ΔNFR profiling artefacts directly from the CLI with the
105
+ ``profile-pipeline`` subcommand. The helper reproduces the performance benchmark that
106
+ captures vectorised and fallback execution traces for the full pipeline:
107
+
108
+ ```bash
109
+ tnfr profile-pipeline \
110
+ --nodes 120 --edge-probability 0.28 --loops 3 \
111
+ --si-chunk-sizes auto 48 --dnfr-chunk-sizes auto \
112
+ --si-workers auto --dnfr-workers auto \
113
+ --output-dir profiles/pipeline
114
+ ```
115
+
116
+ The command writes ``.pstats`` and JSON summaries for each configuration/mode pair, making
117
+ it easy to inspect hot paths with :mod:`pstats`, Snakeviz, or downstream tooling.
118
+
119
+ ## Documentation map
120
+
121
+ - [Documentation index](docs/source/home.md) — navigation hub for API chapters and examples.
122
+ - [API overview](docs/source/api/overview.md) — package map, invariants, and structural data flow.
123
+ - [Structural operators](docs/source/api/operators.md) — canonical grammar, key concepts, and typical
124
+ workflows.
125
+ - [Telemetry & utilities](docs/source/api/telemetry.md) — coherence metrics, trace capture, locking,
126
+ and helper facades.
127
+ - [Examples](docs/source/examples/README.md) — runnable scenarios, CLI artefacts, and token legend.
128
+
129
+ ## Documentation build workflow
130
+
131
+ Netlify now renders the documentation with [Sphinx](https://www.sphinx-doc.org/) so MyST Markdown,
132
+ doctests, and notebooks share a single pipeline. Reproduce the hosted site locally as follows:
133
+
134
+ 1. Create and activate a virtual environment (e.g. `python -m venv .venv && source .venv/bin/activate`).
135
+ 2. Install the documentation toolchain and project extras:
136
+ `python -m pip install -r docs/requirements.txt && python -m pip install -e .[docs]`.
137
+ 3. Execute the doctest suite with `sphinx-build -b doctest docs/source docs/_build/doctest` to ensure
138
+ structural snippets remain coherent.
139
+ 4. Generate the HTML site with `make docs`, which wraps `sphinx-build -b html docs/source docs/_build/html`.
140
+
141
+ The Netlify build (`netlify.toml`) runs `python -m pip install -r docs/requirements.txt && make docs`
142
+ and publishes the resulting `docs/_build/html` directory, keeping the hosted documentation aligned with
143
+ local verification runs.
144
+
145
+ ## Local development
146
+
147
+ Use the helper scripts to keep formatting aligned with the canonical configuration and to reproduce
148
+ the quality gate locally:
149
+
150
+ ```bash
151
+ ./scripts/format.sh # Apply Black and isort across src/, tests/, scripts/, and benchmarks/
152
+ ./scripts/format.sh --check # Validate formatting without modifying files
153
+ ./scripts/run_tests.sh # Execute the full QA battery (type checks, tests, coverage, linting)
154
+ ```
155
+
156
+ The formatting helper automatically prefers `poetry run` when a Poetry environment is available and
157
+ falls back to `python -m` invocations so local runs mirror the tooling invoked in continuous
158
+ integration.
159
+
160
+ ## Additional resources
161
+
162
+ - [ARCHITECTURE.md](ARCHITECTURE.md) — orchestration layers and invariant enforcement.
163
+ - [CONTRIBUTING.md](CONTRIBUTING.md) — QA battery (`scripts/run_tests.sh`) and review
164
+ expectations.
165
+ - [TNFR.pdf](TNFR.pdf) — theoretical background, structural operators, and paradigm glossary.
166
+
167
+ ## Migration notes
168
+
169
+ - **Si dispersion keys:** Ensure graph payloads and configuration files use the canonical
170
+ ``dSi_dphase_disp`` attribute for Si dispersion sensitivity before upgrading. The runtime now
171
+ raises :class:`ValueError` listing any unexpected sensitivity keys, and
172
+ :func:`tnfr.metrics.sense_index.compute_Si_node` rejects unknown keyword arguments.
173
+ - Refer to the [release notes](docs/source/releases.md#1100-si-dispersion-legacy-keys-removed) for
174
+ a migration snippet that rewrites stored graphs in place prior to running the new version.
175
+
176
+ ## Licensing
177
+
178
+ Released under the [MIT License](LICENSE.md). Cite the TNFR paradigm when publishing research
179
+ or derived artefacts based on this engine.
tnfr-7.0.0/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # TNFR Python Engine
2
+
3
+ Canonical implementation of the Resonant Fractal Nature Theory (TNFR) for modelling structural
4
+ coherence. The engine seeds resonant nodes, applies structural operators, coordinates
5
+ ΔNFR/phase dynamics, and measures coherence metrics (C(t), Si, νf) without breaking the nodal
6
+ equation $\partial EPI/\partial t = \nu_f \cdot \Delta NFR(t)$.
7
+
8
+ ## Snapshot
9
+
10
+ - **Operate:** build nodes with `tnfr.create_nfr`, execute trajectories via
11
+ `tnfr.structural.run_sequence`, and evolve dynamics with `tnfr.dynamics.run`.
12
+ - **Observe:** register metrics/trace callbacks to capture ΔNFR, C(t), Si, and structural
13
+ histories
14
+ for every run.
15
+ - **Extend:** rely on the canonical operator grammar and invariants before introducing new
16
+ utilities or telemetry.
17
+
18
+ ## Quickstart
19
+
20
+ Install from PyPI (Python ≥ 3.9):
21
+
22
+ ```bash
23
+ pip install tnfr
24
+ ```
25
+
26
+ Then follow the [quickstart guide](docs/source/getting-started/quickstart.md) for Python and CLI
27
+ walkthroughs plus optional dependency caching helpers.
28
+
29
+ ## CLI profiling helpers
30
+
31
+ Generate Sense Index and ΔNFR profiling artefacts directly from the CLI with the
32
+ ``profile-pipeline`` subcommand. The helper reproduces the performance benchmark that
33
+ captures vectorised and fallback execution traces for the full pipeline:
34
+
35
+ ```bash
36
+ tnfr profile-pipeline \
37
+ --nodes 120 --edge-probability 0.28 --loops 3 \
38
+ --si-chunk-sizes auto 48 --dnfr-chunk-sizes auto \
39
+ --si-workers auto --dnfr-workers auto \
40
+ --output-dir profiles/pipeline
41
+ ```
42
+
43
+ The command writes ``.pstats`` and JSON summaries for each configuration/mode pair, making
44
+ it easy to inspect hot paths with :mod:`pstats`, Snakeviz, or downstream tooling.
45
+
46
+ ## Documentation map
47
+
48
+ - [Documentation index](docs/source/home.md) — navigation hub for API chapters and examples.
49
+ - [API overview](docs/source/api/overview.md) — package map, invariants, and structural data flow.
50
+ - [Structural operators](docs/source/api/operators.md) — canonical grammar, key concepts, and typical
51
+ workflows.
52
+ - [Telemetry & utilities](docs/source/api/telemetry.md) — coherence metrics, trace capture, locking,
53
+ and helper facades.
54
+ - [Examples](docs/source/examples/README.md) — runnable scenarios, CLI artefacts, and token legend.
55
+
56
+ ## Documentation build workflow
57
+
58
+ Netlify now renders the documentation with [Sphinx](https://www.sphinx-doc.org/) so MyST Markdown,
59
+ doctests, and notebooks share a single pipeline. Reproduce the hosted site locally as follows:
60
+
61
+ 1. Create and activate a virtual environment (e.g. `python -m venv .venv && source .venv/bin/activate`).
62
+ 2. Install the documentation toolchain and project extras:
63
+ `python -m pip install -r docs/requirements.txt && python -m pip install -e .[docs]`.
64
+ 3. Execute the doctest suite with `sphinx-build -b doctest docs/source docs/_build/doctest` to ensure
65
+ structural snippets remain coherent.
66
+ 4. Generate the HTML site with `make docs`, which wraps `sphinx-build -b html docs/source docs/_build/html`.
67
+
68
+ The Netlify build (`netlify.toml`) runs `python -m pip install -r docs/requirements.txt && make docs`
69
+ and publishes the resulting `docs/_build/html` directory, keeping the hosted documentation aligned with
70
+ local verification runs.
71
+
72
+ ## Local development
73
+
74
+ Use the helper scripts to keep formatting aligned with the canonical configuration and to reproduce
75
+ the quality gate locally:
76
+
77
+ ```bash
78
+ ./scripts/format.sh # Apply Black and isort across src/, tests/, scripts/, and benchmarks/
79
+ ./scripts/format.sh --check # Validate formatting without modifying files
80
+ ./scripts/run_tests.sh # Execute the full QA battery (type checks, tests, coverage, linting)
81
+ ```
82
+
83
+ The formatting helper automatically prefers `poetry run` when a Poetry environment is available and
84
+ falls back to `python -m` invocations so local runs mirror the tooling invoked in continuous
85
+ integration.
86
+
87
+ ## Additional resources
88
+
89
+ - [ARCHITECTURE.md](ARCHITECTURE.md) — orchestration layers and invariant enforcement.
90
+ - [CONTRIBUTING.md](CONTRIBUTING.md) — QA battery (`scripts/run_tests.sh`) and review
91
+ expectations.
92
+ - [TNFR.pdf](TNFR.pdf) — theoretical background, structural operators, and paradigm glossary.
93
+
94
+ ## Migration notes
95
+
96
+ - **Si dispersion keys:** Ensure graph payloads and configuration files use the canonical
97
+ ``dSi_dphase_disp`` attribute for Si dispersion sensitivity before upgrading. The runtime now
98
+ raises :class:`ValueError` listing any unexpected sensitivity keys, and
99
+ :func:`tnfr.metrics.sense_index.compute_Si_node` rejects unknown keyword arguments.
100
+ - Refer to the [release notes](docs/source/releases.md#1100-si-dispersion-legacy-keys-removed) for
101
+ a migration snippet that rewrites stored graphs in place prior to running the new version.
102
+
103
+ ## Licensing
104
+
105
+ Released under the [MIT License](LICENSE.md). Cite the TNFR paradigm when publishing research
106
+ or derived artefacts based on this engine.
@@ -0,0 +1,181 @@
1
+ [project]
2
+ name = "tnfr"
3
+ dynamic = ["version"]
4
+ description = "Modular structural-based dynamics on networks."
5
+ readme = "README.md"
6
+ requires-python = ">=3.9"
7
+ license = { text = "MIT" }
8
+ authors = [{ name = "fmg" }]
9
+ keywords = [
10
+ "TNFR", "complex systems", "fractals", "resonance",
11
+ "networks", "structural dynamics",
12
+ "structural analysis"
13
+ ]
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3 :: Only",
17
+ "Programming Language :: Python :: 3.9",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "License :: OSI Approved :: MIT License",
22
+ "Operating System :: OS Independent",
23
+ "Intended Audience :: Science/Research",
24
+ "Topic :: Scientific/Engineering",
25
+ "Topic :: Scientific/Engineering :: Information Analysis",
26
+ "Topic :: Scientific/Engineering :: Mathematics"
27
+ ]
28
+ dependencies = [
29
+ "networkx>=2.6",
30
+ "cachetools>=5",
31
+ "typing-extensions>=4.4; python_version < \"3.10\"",
32
+ ]
33
+
34
+ [project.optional-dependencies]
35
+ numpy = ["numpy>=1.24"]
36
+ jax = ["jax>=0.4"]
37
+ torch = ["torch>=2.1"]
38
+ yaml = ["pyyaml>=6.0"]
39
+ orjson = ["orjson>=3"]
40
+ viz = ["matplotlib>=3.7"]
41
+ docs = [
42
+ "sphinx>=7.2",
43
+ "sphinx-autodoc-typehints>=1.25",
44
+ "myst-parser>=2.0",
45
+ "nbsphinx>=0.9",
46
+ "sphinx-rtd-theme>=1.3",
47
+ "sphinxcontrib-mermaid>=0.9",
48
+ "ipykernel>=6",
49
+ "nbconvert>=7.16",
50
+ "pypandoc-binary>=1.14",
51
+ ]
52
+ test = [
53
+ "pytest>=7",
54
+ "pytest-benchmark>=4",
55
+ "pydocstyle>=6",
56
+ "coverage>=7",
57
+ "hypothesis>=6",
58
+ "hypothesis-networkx>=0.3",
59
+ "flake8>=5",
60
+ "flake8-pyproject>=1.2",
61
+ "vulture>=2",
62
+ "matplotlib>=3.7",
63
+ ]
64
+ typecheck = [
65
+ "mypy>=1.8",
66
+ "networkx-stubs>=0.0.1",
67
+ "types-cachetools>=6.0.0.0",
68
+ "numpy>=1.24",
69
+ ]
70
+ release = [
71
+ "python-semantic-release>=10.4,<11",
72
+ "setuptools-scm>=8,<9",
73
+ "build>=1",
74
+ "towncrier>=23",
75
+ ]
76
+
77
+ [project.scripts]
78
+ tnfr = "tnfr.cli:main"
79
+
80
+ [project.urls]
81
+ Homepage = "https://pypi.org/project/tnfr/"
82
+ Repository = "https://github.com/fermga/TNFR-Python-Engine"
83
+ GPT = "https://chatgpt.com/g/g-67abc78885a88191b2d67f94fd60dc97-tnfr-resonant-fractal-nature-theory"
84
+
85
+ [tool.setuptools.package-data]
86
+ tnfr = ["py.typed", "schemas/*.json"]
87
+
88
+ [tool.setuptools_scm]
89
+ tag_regex = '^v(?P<version>[0-9]+\.[0-9]+\.[0-9]+)$'
90
+ local_scheme = "no-local-version"
91
+ write_to = "src/tnfr/_generated_version.py"
92
+
93
+ [tool.semantic_release]
94
+ version_source = "tag"
95
+ commit_parser = "conventional"
96
+ allow_zero_version = false
97
+ major_on_zero = false
98
+ tag_format = "v{version}"
99
+
100
+ [tool.semantic_release.branches.main]
101
+ match = "^main$"
102
+ prerelease = false
103
+
104
+ [tool.semantic_release.changelog]
105
+ template_dir = "meta/semantic_release/templates"
106
+ mode = "update"
107
+ changelog_file = ""
108
+
109
+ [tool.semantic_release.changelog.default_templates]
110
+ mask_initial_release = true
111
+
112
+ [tool.semantic_release.commit_parser_options]
113
+ minor_tags = ["feat", "structure"]
114
+ patch_tags = ["fix", "perf", "refactor", "docs", "test", "build", "ci", "style", "chore"]
115
+ other_allowed_tags = ["revert", "docs", "test", "build", "ci", "style", "refactor", "perf", "chore"]
116
+ allowed_tags = ["feat", "fix", "perf", "refactor", "docs", "test", "build", "ci", "style", "chore", "structure", "revert"]
117
+ default_bump_level = 0
118
+ parse_squash_commits = true
119
+ ignore_merge_commits = true
120
+
121
+ [tool.black]
122
+ line-length = 88
123
+ target-version = ["py39", "py310", "py311", "py312"]
124
+
125
+ [tool.isort]
126
+ profile = "black"
127
+ line_length = 88
128
+ skip = ["benchmarks"]
129
+
130
+ [tool.flake8]
131
+ max-line-length = 88
132
+ ignore = ["E501", "W503"]
133
+ exclude = ["benchmarks/"]
134
+
135
+ [tool.pydocstyle]
136
+ convention = "numpy"
137
+ add-ignore = [
138
+ "D202", # Allow blank line after docstring where needed for readability.
139
+ ]
140
+
141
+ [tool.tnfr.language_check]
142
+ exclude = [
143
+ "TNFR.pdf",
144
+ "benchmarks/**/*.pdf",
145
+ ]
146
+
147
+ [tool.pytest.ini_options]
148
+ pythonpath = ["src"]
149
+ addopts = "-m 'not slow' --benchmark-skip"
150
+ markers = [
151
+ "slow: marks tests as slow (deselect with '-m \"not slow\"')",
152
+ "benchmarks: run with 'pytest benchmarks --benchmark-only' to execute the benchmark suite",
153
+ "stress: high-load deterministic stress coverage (select with '-m \"stress\"')",
154
+ ]
155
+
156
+ [tool.mypy]
157
+ python_version = "3.10"
158
+ warn_unused_configs = true
159
+ warn_return_any = false
160
+ no_implicit_optional = false
161
+ strict_equality = false
162
+ disallow_any_unimported = false
163
+ show_error_codes = true
164
+ follow_imports = "skip"
165
+ allow_redefinition = true
166
+ allow_untyped_defs = false
167
+ allow_untyped_calls = false
168
+ allow_untyped_globals = false
169
+
170
+ [[tool.mypy.overrides]]
171
+ module = ["networkx", "networkx.*"]
172
+ ignore_missing_imports = true
173
+
174
+ [[tool.mypy.overrides]]
175
+ module = ["yaml", "yaml.*"]
176
+ ignore_missing_imports = true
177
+
178
+
179
+ [build-system]
180
+ requires = ["setuptools>=78.1.1", "wheel", "setuptools-scm>=8"]
181
+ build-backend = "setuptools.build_meta"