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.
- {tnfr-4.5.2 → tnfr-7.0.0}/LICENSE.md +1 -1
- tnfr-7.0.0/PKG-INFO +179 -0
- tnfr-7.0.0/README.md +106 -0
- tnfr-7.0.0/pyproject.toml +181 -0
- tnfr-7.0.0/src/tnfr/__init__.py +315 -0
- tnfr-7.0.0/src/tnfr/__init__.pyi +33 -0
- tnfr-7.0.0/src/tnfr/_compat.py +10 -0
- tnfr-7.0.0/src/tnfr/_generated_version.py +34 -0
- tnfr-7.0.0/src/tnfr/_version.py +49 -0
- tnfr-7.0.0/src/tnfr/_version.pyi +7 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/alias.py +117 -31
- tnfr-7.0.0/src/tnfr/alias.pyi +108 -0
- tnfr-7.0.0/src/tnfr/cache.py +12 -0
- tnfr-7.0.0/src/tnfr/cache.pyi +16 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/callback_utils.py +16 -38
- tnfr-7.0.0/src/tnfr/callback_utils.pyi +79 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/cli/__init__.py +34 -14
- tnfr-7.0.0/src/tnfr/cli/__init__.pyi +26 -0
- tnfr-7.0.0/src/tnfr/cli/arguments.py +360 -0
- tnfr-7.0.0/src/tnfr/cli/arguments.pyi +27 -0
- tnfr-7.0.0/src/tnfr/cli/execution.py +708 -0
- tnfr-7.0.0/src/tnfr/cli/execution.pyi +70 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/cli/utils.py +18 -3
- tnfr-7.0.0/src/tnfr/cli/utils.pyi +8 -0
- tnfr-7.0.0/src/tnfr/config/__init__.py +13 -0
- tnfr-7.0.0/src/tnfr/config/__init__.pyi +10 -0
- tnfr-4.5.2/src/tnfr/constants_glyphs.py → tnfr-7.0.0/src/tnfr/config/constants.py +26 -20
- tnfr-7.0.0/src/tnfr/config/constants.pyi +12 -0
- tnfr-7.0.0/src/tnfr/config/feature_flags.py +83 -0
- tnfr-4.5.2/src/tnfr/config.py → tnfr-7.0.0/src/tnfr/config/init.py +11 -7
- tnfr-7.0.0/src/tnfr/config/init.pyi +8 -0
- tnfr-7.0.0/src/tnfr/config/operator_names.py +93 -0
- tnfr-7.0.0/src/tnfr/config/operator_names.pyi +28 -0
- tnfr-7.0.0/src/tnfr/config/presets.py +84 -0
- tnfr-7.0.0/src/tnfr/config/presets.pyi +7 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/__init__.py +80 -29
- tnfr-7.0.0/src/tnfr/constants/__init__.pyi +92 -0
- tnfr-7.0.0/src/tnfr/constants/aliases.py +31 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/core.py +4 -4
- tnfr-7.0.0/src/tnfr/constants/core.pyi +17 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/init.py +1 -1
- tnfr-7.0.0/src/tnfr/constants/init.pyi +12 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/constants/metric.py +7 -15
- tnfr-7.0.0/src/tnfr/constants/metric.pyi +19 -0
- tnfr-7.0.0/src/tnfr/dynamics/__init__.py +190 -0
- tnfr-7.0.0/src/tnfr/dynamics/__init__.pyi +82 -0
- tnfr-7.0.0/src/tnfr/dynamics/adaptation.py +267 -0
- tnfr-7.0.0/src/tnfr/dynamics/aliases.py +23 -0
- tnfr-7.0.0/src/tnfr/dynamics/coordination.py +385 -0
- tnfr-7.0.0/src/tnfr/dynamics/dnfr.py +2616 -0
- tnfr-7.0.0/src/tnfr/dynamics/dnfr.pyi +24 -0
- tnfr-7.0.0/src/tnfr/dynamics/integrators.py +575 -0
- tnfr-7.0.0/src/tnfr/dynamics/integrators.pyi +34 -0
- tnfr-7.0.0/src/tnfr/dynamics/runtime.py +881 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/dynamics/sampling.py +10 -5
- tnfr-7.0.0/src/tnfr/dynamics/sampling.pyi +7 -0
- tnfr-7.0.0/src/tnfr/dynamics/selectors.py +719 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/execution.py +70 -48
- tnfr-7.0.0/src/tnfr/execution.pyi +45 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/flatten.py +13 -9
- tnfr-7.0.0/src/tnfr/flatten.pyi +21 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/gamma.py +66 -53
- tnfr-7.0.0/src/tnfr/gamma.pyi +34 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/glyph_history.py +110 -52
- tnfr-7.0.0/src/tnfr/glyph_history.pyi +35 -0
- tnfr-7.0.0/src/tnfr/glyph_runtime.py +16 -0
- tnfr-7.0.0/src/tnfr/glyph_runtime.pyi +9 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/immutable.py +69 -28
- tnfr-7.0.0/src/tnfr/immutable.pyi +34 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/initialization.py +16 -16
- tnfr-7.0.0/src/tnfr/initialization.pyi +65 -0
- tnfr-7.0.0/src/tnfr/io.py +12 -0
- tnfr-7.0.0/src/tnfr/io.pyi +16 -0
- tnfr-7.0.0/src/tnfr/locking.pyi +7 -0
- tnfr-7.0.0/src/tnfr/mathematics/__init__.py +81 -0
- tnfr-7.0.0/src/tnfr/mathematics/backend.py +426 -0
- tnfr-7.0.0/src/tnfr/mathematics/dynamics.py +398 -0
- tnfr-7.0.0/src/tnfr/mathematics/epi.py +254 -0
- tnfr-7.0.0/src/tnfr/mathematics/generators.py +222 -0
- tnfr-7.0.0/src/tnfr/mathematics/metrics.py +119 -0
- tnfr-7.0.0/src/tnfr/mathematics/operators.py +233 -0
- tnfr-7.0.0/src/tnfr/mathematics/operators_factory.py +71 -0
- tnfr-7.0.0/src/tnfr/mathematics/projection.py +78 -0
- tnfr-7.0.0/src/tnfr/mathematics/runtime.py +173 -0
- tnfr-7.0.0/src/tnfr/mathematics/spaces.py +247 -0
- tnfr-7.0.0/src/tnfr/mathematics/transforms.py +292 -0
- tnfr-7.0.0/src/tnfr/metrics/__init__.pyi +20 -0
- tnfr-7.0.0/src/tnfr/metrics/coherence.py +1498 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/common.py +23 -16
- tnfr-7.0.0/src/tnfr/metrics/common.pyi +46 -0
- tnfr-7.0.0/src/tnfr/metrics/core.py +317 -0
- tnfr-7.0.0/src/tnfr/metrics/core.pyi +13 -0
- tnfr-7.0.0/src/tnfr/metrics/diagnosis.py +831 -0
- tnfr-7.0.0/src/tnfr/metrics/diagnosis.pyi +85 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/export.py +27 -15
- tnfr-7.0.0/src/tnfr/metrics/glyph_timing.py +379 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/reporting.py +33 -22
- tnfr-7.0.0/src/tnfr/metrics/reporting.pyi +12 -0
- tnfr-7.0.0/src/tnfr/metrics/sense_index.py +1064 -0
- tnfr-7.0.0/src/tnfr/metrics/sense_index.pyi +9 -0
- tnfr-7.0.0/src/tnfr/metrics/trig.py +372 -0
- tnfr-7.0.0/src/tnfr/metrics/trig.pyi +13 -0
- tnfr-7.0.0/src/tnfr/metrics/trig_cache.py +202 -0
- tnfr-7.0.0/src/tnfr/metrics/trig_cache.pyi +10 -0
- tnfr-7.0.0/src/tnfr/node.py +663 -0
- tnfr-7.0.0/src/tnfr/node.pyi +178 -0
- tnfr-7.0.0/src/tnfr/observers.py +276 -0
- tnfr-7.0.0/src/tnfr/observers.pyi +31 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/ontosim.py +23 -19
- tnfr-7.0.0/src/tnfr/ontosim.pyi +28 -0
- tnfr-7.0.0/src/tnfr/operators/__init__.py +939 -0
- tnfr-7.0.0/src/tnfr/operators/__init__.pyi +45 -0
- tnfr-7.0.0/src/tnfr/operators/definitions.py +513 -0
- tnfr-7.0.0/src/tnfr/operators/definitions.pyi +78 -0
- tnfr-7.0.0/src/tnfr/operators/grammar.py +760 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/operators/jitter.py +107 -38
- tnfr-7.0.0/src/tnfr/operators/jitter.pyi +11 -0
- tnfr-7.0.0/src/tnfr/operators/registry.py +75 -0
- tnfr-7.0.0/src/tnfr/operators/registry.pyi +13 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/operators/remesh.py +149 -88
- tnfr-7.0.0/src/tnfr/py.typed +0 -0
- tnfr-7.0.0/src/tnfr/rng.py +157 -0
- tnfr-7.0.0/src/tnfr/rng.pyi +14 -0
- tnfr-7.0.0/src/tnfr/schemas/__init__.py +8 -0
- tnfr-7.0.0/src/tnfr/schemas/grammar.json +94 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/selector.py +25 -19
- tnfr-7.0.0/src/tnfr/selector.pyi +19 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/sense.py +72 -62
- tnfr-7.0.0/src/tnfr/sense.pyi +23 -0
- tnfr-7.0.0/src/tnfr/structural.py +589 -0
- tnfr-7.0.0/src/tnfr/structural.pyi +69 -0
- tnfr-7.0.0/src/tnfr/telemetry/__init__.py +35 -0
- tnfr-7.0.0/src/tnfr/telemetry/cache_metrics.py +226 -0
- tnfr-7.0.0/src/tnfr/telemetry/nu_f.py +423 -0
- tnfr-7.0.0/src/tnfr/telemetry/nu_f.pyi +123 -0
- tnfr-7.0.0/src/tnfr/telemetry/verbosity.py +37 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/tokens.py +1 -3
- tnfr-7.0.0/src/tnfr/tokens.pyi +36 -0
- tnfr-7.0.0/src/tnfr/trace.py +526 -0
- tnfr-7.0.0/src/tnfr/trace.pyi +40 -0
- tnfr-7.0.0/src/tnfr/types.py +612 -0
- tnfr-7.0.0/src/tnfr/types.pyi +331 -0
- tnfr-7.0.0/src/tnfr/units.py +69 -0
- tnfr-7.0.0/src/tnfr/units.pyi +16 -0
- tnfr-7.0.0/src/tnfr/utils/__init__.py +217 -0
- tnfr-7.0.0/src/tnfr/utils/__init__.pyi +202 -0
- tnfr-7.0.0/src/tnfr/utils/cache.py +2395 -0
- tnfr-7.0.0/src/tnfr/utils/cache.pyi +468 -0
- tnfr-7.0.0/src/tnfr/utils/chunks.py +104 -0
- tnfr-7.0.0/src/tnfr/utils/chunks.pyi +21 -0
- tnfr-4.5.2/src/tnfr/collections_utils.py → tnfr-7.0.0/src/tnfr/utils/data.py +147 -90
- tnfr-7.0.0/src/tnfr/utils/data.pyi +64 -0
- tnfr-7.0.0/src/tnfr/utils/graph.py +85 -0
- tnfr-7.0.0/src/tnfr/utils/graph.pyi +10 -0
- tnfr-7.0.0/src/tnfr/utils/init.py +770 -0
- tnfr-7.0.0/src/tnfr/utils/init.pyi +78 -0
- tnfr-7.0.0/src/tnfr/utils/io.py +456 -0
- {tnfr-4.5.2/src/tnfr/helpers → tnfr-7.0.0/src/tnfr/utils}/numeric.py +51 -24
- tnfr-7.0.0/src/tnfr/utils/numeric.pyi +21 -0
- tnfr-7.0.0/src/tnfr/validation/__init__.py +113 -0
- tnfr-7.0.0/src/tnfr/validation/__init__.pyi +77 -0
- tnfr-7.0.0/src/tnfr/validation/compatibility.py +95 -0
- tnfr-7.0.0/src/tnfr/validation/compatibility.pyi +6 -0
- tnfr-7.0.0/src/tnfr/validation/grammar.py +71 -0
- tnfr-7.0.0/src/tnfr/validation/grammar.pyi +40 -0
- tnfr-7.0.0/src/tnfr/validation/graph.py +138 -0
- tnfr-7.0.0/src/tnfr/validation/graph.pyi +17 -0
- tnfr-7.0.0/src/tnfr/validation/rules.py +281 -0
- tnfr-7.0.0/src/tnfr/validation/rules.pyi +55 -0
- tnfr-7.0.0/src/tnfr/validation/runtime.py +263 -0
- tnfr-7.0.0/src/tnfr/validation/runtime.pyi +31 -0
- tnfr-7.0.0/src/tnfr/validation/soft_filters.py +170 -0
- tnfr-7.0.0/src/tnfr/validation/soft_filters.pyi +37 -0
- tnfr-7.0.0/src/tnfr/validation/spectral.py +159 -0
- tnfr-7.0.0/src/tnfr/validation/spectral.pyi +46 -0
- tnfr-7.0.0/src/tnfr/validation/syntax.py +40 -0
- tnfr-7.0.0/src/tnfr/validation/syntax.pyi +10 -0
- tnfr-7.0.0/src/tnfr/validation/window.py +39 -0
- tnfr-7.0.0/src/tnfr/validation/window.pyi +1 -0
- tnfr-7.0.0/src/tnfr/viz/__init__.py +9 -0
- tnfr-7.0.0/src/tnfr/viz/matplotlib.py +246 -0
- tnfr-7.0.0/src/tnfr.egg-info/PKG-INFO +179 -0
- tnfr-7.0.0/src/tnfr.egg-info/SOURCES.txt +188 -0
- tnfr-7.0.0/src/tnfr.egg-info/requires.txt +58 -0
- tnfr-4.5.2/PKG-INFO +0 -379
- tnfr-4.5.2/README.md +0 -344
- tnfr-4.5.2/pyproject.toml +0 -46
- tnfr-4.5.2/src/tnfr/__init__.py +0 -91
- tnfr-4.5.2/src/tnfr/cache.py +0 -578
- tnfr-4.5.2/src/tnfr/cli/arguments.py +0 -177
- tnfr-4.5.2/src/tnfr/cli/execution.py +0 -288
- tnfr-4.5.2/src/tnfr/dynamics/__init__.py +0 -658
- tnfr-4.5.2/src/tnfr/dynamics/dnfr.py +0 -733
- tnfr-4.5.2/src/tnfr/dynamics/integrators.py +0 -267
- tnfr-4.5.2/src/tnfr/grammar.py +0 -344
- tnfr-4.5.2/src/tnfr/graph_utils.py +0 -84
- tnfr-4.5.2/src/tnfr/helpers/__init__.py +0 -71
- tnfr-4.5.2/src/tnfr/import_utils.py +0 -228
- tnfr-4.5.2/src/tnfr/io.py +0 -246
- tnfr-4.5.2/src/tnfr/json_utils.py +0 -162
- tnfr-4.5.2/src/tnfr/logging_utils.py +0 -116
- tnfr-4.5.2/src/tnfr/metrics/coherence.py +0 -829
- tnfr-4.5.2/src/tnfr/metrics/core.py +0 -101
- tnfr-4.5.2/src/tnfr/metrics/diagnosis.py +0 -234
- tnfr-4.5.2/src/tnfr/metrics/glyph_timing.py +0 -189
- tnfr-4.5.2/src/tnfr/metrics/sense_index.py +0 -120
- tnfr-4.5.2/src/tnfr/metrics/trig.py +0 -181
- tnfr-4.5.2/src/tnfr/metrics/trig_cache.py +0 -109
- tnfr-4.5.2/src/tnfr/node.py +0 -257
- tnfr-4.5.2/src/tnfr/observers.py +0 -159
- tnfr-4.5.2/src/tnfr/operators/__init__.py +0 -420
- tnfr-4.5.2/src/tnfr/presets.py +0 -60
- tnfr-4.5.2/src/tnfr/rng.py +0 -254
- tnfr-4.5.2/src/tnfr/structural.py +0 -329
- tnfr-4.5.2/src/tnfr/trace.py +0 -369
- tnfr-4.5.2/src/tnfr/types.py +0 -44
- tnfr-4.5.2/src/tnfr/validators.py +0 -84
- tnfr-4.5.2/src/tnfr/value_utils.py +0 -59
- tnfr-4.5.2/src/tnfr.egg-info/PKG-INFO +0 -379
- tnfr-4.5.2/src/tnfr.egg-info/SOURCES.txt +0 -204
- tnfr-4.5.2/src/tnfr.egg-info/requires.txt +0 -15
- tnfr-4.5.2/tests/test_accumulate_cos_sin.py +0 -27
- tnfr-4.5.2/tests/test_add_edge_callbacks.py +0 -11
- tnfr-4.5.2/tests/test_add_edge_errors.py +0 -26
- tnfr-4.5.2/tests/test_add_edge_networkx.py +0 -55
- tnfr-4.5.2/tests/test_add_edge_versions.py +0 -28
- tnfr-4.5.2/tests/test_alias_accessor_usage.py +0 -143
- tnfr-4.5.2/tests/test_alias_get_default.py +0 -10
- tnfr-4.5.2/tests/test_alias_get_strict.py +0 -26
- tnfr-4.5.2/tests/test_alias_helpers_threadsafe.py +0 -19
- tnfr-4.5.2/tests/test_alias_iterable.py +0 -43
- tnfr-4.5.2/tests/test_alias_sequence.py +0 -22
- tnfr-4.5.2/tests/test_alias_set_error.py +0 -10
- tnfr-4.5.2/tests/test_cache_helpers.py +0 -46
- tnfr-4.5.2/tests/test_callback_errors_limit.py +0 -32
- tnfr-4.5.2/tests/test_canon.py +0 -38
- tnfr-4.5.2/tests/test_cli.py +0 -418
- tnfr-4.5.2/tests/test_cli_flatten_tokens.py +0 -6
- tnfr-4.5.2/tests/test_cli_history.py +0 -100
- tnfr-4.5.2/tests/test_cli_sanity.py +0 -100
- tnfr-4.5.2/tests/test_coherence_cache.py +0 -65
- tnfr-4.5.2/tests/test_collect_attr_generators.py +0 -18
- tnfr-4.5.2/tests/test_compute_Si_numpy_usage.py +0 -54
- tnfr-4.5.2/tests/test_compute_coherence.py +0 -73
- tnfr-4.5.2/tests/test_compute_theta_trig.py +0 -22
- tnfr-4.5.2/tests/test_config_apply.py +0 -88
- tnfr-4.5.2/tests/test_count_glyphs.py +0 -28
- tnfr-4.5.2/tests/test_defaults_integrity.py +0 -22
- tnfr-4.5.2/tests/test_diagnosis_state.py +0 -13
- tnfr-4.5.2/tests/test_dnfr_cache.py +0 -233
- tnfr-4.5.2/tests/test_dnfr_hooks.py +0 -41
- tnfr-4.5.2/tests/test_dnfr_precompute.py +0 -74
- tnfr-4.5.2/tests/test_dynamics_benchmark.py +0 -23
- tnfr-4.5.2/tests/test_dynamics_helpers.py +0 -129
- tnfr-4.5.2/tests/test_dynamics_run.py +0 -74
- tnfr-4.5.2/tests/test_dynamics_vectorized.py +0 -39
- tnfr-4.5.2/tests/test_edge_cases.py +0 -74
- tnfr-4.5.2/tests/test_edge_version_cache.py +0 -122
- tnfr-4.5.2/tests/test_edge_version_cache_limit.py +0 -13
- tnfr-4.5.2/tests/test_ensure_callbacks.py +0 -94
- tnfr-4.5.2/tests/test_ensure_collection.py +0 -100
- tnfr-4.5.2/tests/test_ensure_history_trim_performance.py +0 -28
- tnfr-4.5.2/tests/test_export_metrics.py +0 -93
- tnfr-4.5.2/tests/test_flatten_structure.py +0 -52
- tnfr-4.5.2/tests/test_freeze.py +0 -55
- tnfr-4.5.2/tests/test_gamma.py +0 -360
- tnfr-4.5.2/tests/test_get_attr_default.py +0 -62
- tnfr-4.5.2/tests/test_get_attr_strict.py +0 -41
- tnfr-4.5.2/tests/test_get_rng.py +0 -31
- tnfr-4.5.2/tests/test_get_rng_threadsafe.py +0 -27
- tnfr-4.5.2/tests/test_glyph_helpers.py +0 -25
- tnfr-4.5.2/tests/test_glyph_history_dict.py +0 -114
- tnfr-4.5.2/tests/test_glyph_history_windowing.py +0 -277
- tnfr-4.5.2/tests/test_grammar.py +0 -196
- tnfr-4.5.2/tests/test_history.py +0 -23
- tnfr-4.5.2/tests/test_history_counter.py +0 -54
- tnfr-4.5.2/tests/test_history_heap_cleanup.py +0 -58
- tnfr-4.5.2/tests/test_history_maxlen.py +0 -119
- tnfr-4.5.2/tests/test_history_methods.py +0 -31
- tnfr-4.5.2/tests/test_history_series.py +0 -54
- tnfr-4.5.2/tests/test_import_utils.py +0 -149
- tnfr-4.5.2/tests/test_initialization.py +0 -81
- tnfr-4.5.2/tests/test_inject_defaults_tuple.py +0 -16
- tnfr-4.5.2/tests/test_integrators.py +0 -102
- tnfr-4.5.2/tests/test_invariants.py +0 -105
- tnfr-4.5.2/tests/test_invoke_callbacks.py +0 -40
- tnfr-4.5.2/tests/test_is_immutable.py +0 -156
- tnfr-4.5.2/tests/test_json_utils.py +0 -161
- tnfr-4.5.2/tests/test_kahan_sum.py +0 -26
- tnfr-4.5.2/tests/test_knn_edges.py +0 -32
- tnfr-4.5.2/tests/test_list_mean.py +0 -18
- tnfr-4.5.2/tests/test_local_phase_sync.py +0 -29
- tnfr-4.5.2/tests/test_locking.py +0 -25
- tnfr-4.5.2/tests/test_logging_module.py +0 -71
- tnfr-4.5.2/tests/test_logging_threadsafe.py +0 -58
- tnfr-4.5.2/tests/test_make_rng.py +0 -52
- tnfr-4.5.2/tests/test_make_rng_threadsafe.py +0 -45
- tnfr-4.5.2/tests/test_merge_and_normalize_weights.py +0 -23
- tnfr-4.5.2/tests/test_metrics.py +0 -310
- tnfr-4.5.2/tests/test_min_max_range.py +0 -14
- tnfr-4.5.2/tests/test_missing_dependency_error_cache.py +0 -13
- tnfr-4.5.2/tests/test_nav.py +0 -33
- tnfr-4.5.2/tests/test_neighbor_phase_mean_missing_trig.py +0 -89
- tnfr-4.5.2/tests/test_neighbor_phase_mean_no_graph.py +0 -45
- tnfr-4.5.2/tests/test_neighbor_phase_mean_performance.py +0 -47
- tnfr-4.5.2/tests/test_neighbors_map_cache.py +0 -17
- tnfr-4.5.2/tests/test_node_all_nodes.py +0 -24
- tnfr-4.5.2/tests/test_node_from_graph_threadsafe.py +0 -29
- tnfr-4.5.2/tests/test_node_offset.py +0 -24
- tnfr-4.5.2/tests/test_node_sample.py +0 -137
- tnfr-4.5.2/tests/test_node_set_checksum.py +0 -111
- tnfr-4.5.2/tests/test_node_state_extra.py +0 -8
- tnfr-4.5.2/tests/test_node_weights.py +0 -56
- tnfr-4.5.2/tests/test_normalize_callback_entry.py +0 -30
- tnfr-4.5.2/tests/test_normalize_weights.py +0 -118
- tnfr-4.5.2/tests/test_numeric_helpers.py +0 -39
- tnfr-4.5.2/tests/test_observers.py +0 -240
- tnfr-4.5.2/tests/test_operator_factors.py +0 -117
- tnfr-4.5.2/tests/test_operators.py +0 -217
- tnfr-4.5.2/tests/test_optional_import.py +0 -23
- tnfr-4.5.2/tests/test_parse_tokens_errors.py +0 -35
- tnfr-4.5.2/tests/test_parse_toml.py +0 -27
- tnfr-4.5.2/tests/test_preparar_red.py +0 -15
- tnfr-4.5.2/tests/test_prepare_dnfr_data_performance.py +0 -37
- tnfr-4.5.2/tests/test_program.py +0 -313
- tnfr-4.5.2/tests/test_public_api.py +0 -28
- tnfr-4.5.2/tests/test_push_glyph.py +0 -34
- tnfr-4.5.2/tests/test_read_structured_file_errors.py +0 -192
- tnfr-4.5.2/tests/test_recent_glyph.py +0 -49
- tnfr-4.5.2/tests/test_register_callback.py +0 -115
- tnfr-4.5.2/tests/test_remesh.py +0 -106
- tnfr-4.5.2/tests/test_remesh_community.py +0 -32
- tnfr-4.5.2/tests/test_rng_base_seed.py +0 -126
- tnfr-4.5.2/tests/test_rng_for_step.py +0 -44
- tnfr-4.5.2/tests/test_safe_write.py +0 -79
- tnfr-4.5.2/tests/test_scenarios.py +0 -40
- tnfr-4.5.2/tests/test_selector_norms.py +0 -36
- tnfr-4.5.2/tests/test_selector_utils.py +0 -136
- tnfr-4.5.2/tests/test_sense.py +0 -140
- tnfr-4.5.2/tests/test_set_attr_error.py +0 -10
- tnfr-4.5.2/tests/test_si_helpers.py +0 -110
- tnfr-4.5.2/tests/test_stable_json.py +0 -26
- tnfr-4.5.2/tests/test_structural.py +0 -89
- tnfr-4.5.2/tests/test_topological_remesh.py +0 -141
- tnfr-4.5.2/tests/test_trace.py +0 -149
- tnfr-4.5.2/tests/test_trig_cache_reuse.py +0 -74
- tnfr-4.5.2/tests/test_update_tg_node.py +0 -39
- tnfr-4.5.2/tests/test_update_tg_performance.py +0 -88
- tnfr-4.5.2/tests/test_validate_aliases.py +0 -30
- tnfr-4.5.2/tests/test_validate_window.py +0 -17
- tnfr-4.5.2/tests/test_validators.py +0 -120
- tnfr-4.5.2/tests/test_value_utils.py +0 -31
- tnfr-4.5.2/tests/test_vf_coherencia.py +0 -33
- tnfr-4.5.2/tests/test_vf_dnfr_max_update.py +0 -73
- tnfr-4.5.2/tests/test_warn_failure_emit.py +0 -62
- {tnfr-4.5.2 → tnfr-7.0.0}/setup.cfg +0 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/locking.py +0 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr/metrics/__init__.py +10 -10
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr.egg-info/dependency_links.txt +0 -0
- {tnfr-4.5.2 → tnfr-7.0.0}/src/tnfr.egg-info/entry_points.txt +0 -0
- {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
|
|
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"
|