tnfr 6.0.0__py3-none-any.whl → 7.0.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.
- tnfr/__init__.py +50 -5
- tnfr/__init__.pyi +0 -7
- tnfr/_compat.py +0 -1
- tnfr/_generated_version.py +34 -0
- tnfr/_version.py +44 -2
- tnfr/alias.py +14 -13
- tnfr/alias.pyi +5 -37
- tnfr/cache.py +9 -729
- tnfr/cache.pyi +8 -224
- tnfr/callback_utils.py +16 -31
- tnfr/callback_utils.pyi +3 -29
- tnfr/cli/__init__.py +17 -11
- tnfr/cli/__init__.pyi +0 -21
- tnfr/cli/arguments.py +175 -14
- tnfr/cli/arguments.pyi +5 -11
- tnfr/cli/execution.py +434 -48
- tnfr/cli/execution.pyi +14 -24
- tnfr/cli/utils.py +20 -3
- tnfr/cli/utils.pyi +5 -5
- tnfr/config/__init__.py +2 -1
- tnfr/config/__init__.pyi +2 -0
- tnfr/config/feature_flags.py +83 -0
- tnfr/config/init.py +1 -1
- tnfr/config/operator_names.py +1 -14
- tnfr/config/presets.py +6 -26
- tnfr/constants/__init__.py +10 -13
- tnfr/constants/__init__.pyi +10 -22
- tnfr/constants/aliases.py +31 -0
- tnfr/constants/core.py +4 -3
- tnfr/constants/init.py +1 -1
- tnfr/constants/metric.py +3 -3
- tnfr/dynamics/__init__.py +64 -10
- tnfr/dynamics/__init__.pyi +3 -4
- tnfr/dynamics/adaptation.py +79 -13
- tnfr/dynamics/aliases.py +10 -9
- tnfr/dynamics/coordination.py +77 -35
- tnfr/dynamics/dnfr.py +575 -274
- tnfr/dynamics/dnfr.pyi +1 -10
- tnfr/dynamics/integrators.py +47 -33
- tnfr/dynamics/integrators.pyi +0 -1
- tnfr/dynamics/runtime.py +489 -129
- tnfr/dynamics/sampling.py +2 -0
- tnfr/dynamics/selectors.py +101 -62
- tnfr/execution.py +15 -8
- tnfr/execution.pyi +5 -25
- tnfr/flatten.py +7 -3
- tnfr/flatten.pyi +1 -8
- tnfr/gamma.py +22 -26
- tnfr/gamma.pyi +0 -6
- tnfr/glyph_history.py +37 -26
- tnfr/glyph_history.pyi +1 -19
- tnfr/glyph_runtime.py +16 -0
- tnfr/glyph_runtime.pyi +9 -0
- tnfr/immutable.py +20 -15
- tnfr/immutable.pyi +4 -7
- tnfr/initialization.py +5 -7
- tnfr/initialization.pyi +1 -9
- tnfr/io.py +6 -305
- tnfr/io.pyi +13 -8
- tnfr/mathematics/__init__.py +81 -0
- tnfr/mathematics/backend.py +426 -0
- tnfr/mathematics/dynamics.py +398 -0
- tnfr/mathematics/epi.py +254 -0
- tnfr/mathematics/generators.py +222 -0
- tnfr/mathematics/metrics.py +119 -0
- tnfr/mathematics/operators.py +233 -0
- tnfr/mathematics/operators_factory.py +71 -0
- tnfr/mathematics/projection.py +78 -0
- tnfr/mathematics/runtime.py +173 -0
- tnfr/mathematics/spaces.py +247 -0
- tnfr/mathematics/transforms.py +292 -0
- tnfr/metrics/__init__.py +10 -10
- tnfr/metrics/coherence.py +123 -94
- tnfr/metrics/common.py +22 -13
- tnfr/metrics/common.pyi +42 -11
- tnfr/metrics/core.py +72 -14
- tnfr/metrics/diagnosis.py +48 -57
- tnfr/metrics/diagnosis.pyi +3 -7
- tnfr/metrics/export.py +3 -5
- tnfr/metrics/glyph_timing.py +41 -31
- tnfr/metrics/reporting.py +13 -6
- tnfr/metrics/sense_index.py +884 -114
- tnfr/metrics/trig.py +167 -11
- tnfr/metrics/trig.pyi +1 -0
- tnfr/metrics/trig_cache.py +112 -15
- tnfr/node.py +400 -17
- tnfr/node.pyi +55 -38
- tnfr/observers.py +111 -8
- tnfr/observers.pyi +0 -15
- tnfr/ontosim.py +9 -6
- tnfr/ontosim.pyi +0 -5
- tnfr/operators/__init__.py +529 -42
- tnfr/operators/__init__.pyi +14 -0
- tnfr/operators/definitions.py +350 -18
- tnfr/operators/definitions.pyi +0 -14
- tnfr/operators/grammar.py +760 -0
- tnfr/operators/jitter.py +28 -22
- tnfr/operators/registry.py +7 -12
- tnfr/operators/registry.pyi +0 -2
- tnfr/operators/remesh.py +38 -61
- tnfr/rng.py +17 -300
- tnfr/schemas/__init__.py +8 -0
- tnfr/schemas/grammar.json +94 -0
- tnfr/selector.py +3 -4
- tnfr/selector.pyi +1 -1
- tnfr/sense.py +22 -24
- tnfr/sense.pyi +0 -7
- tnfr/structural.py +504 -21
- tnfr/structural.pyi +41 -18
- tnfr/telemetry/__init__.py +23 -1
- tnfr/telemetry/cache_metrics.py +226 -0
- tnfr/telemetry/nu_f.py +423 -0
- tnfr/telemetry/nu_f.pyi +123 -0
- tnfr/tokens.py +1 -4
- tnfr/tokens.pyi +1 -6
- tnfr/trace.py +20 -53
- tnfr/trace.pyi +9 -37
- tnfr/types.py +244 -15
- tnfr/types.pyi +200 -14
- tnfr/units.py +69 -0
- tnfr/units.pyi +16 -0
- tnfr/utils/__init__.py +107 -48
- tnfr/utils/__init__.pyi +80 -11
- tnfr/utils/cache.py +1705 -65
- tnfr/utils/cache.pyi +370 -58
- tnfr/utils/chunks.py +104 -0
- tnfr/utils/chunks.pyi +21 -0
- tnfr/utils/data.py +95 -5
- tnfr/utils/data.pyi +8 -17
- tnfr/utils/graph.py +2 -4
- tnfr/utils/init.py +31 -7
- tnfr/utils/init.pyi +4 -11
- tnfr/utils/io.py +313 -14
- tnfr/{helpers → utils}/numeric.py +50 -24
- tnfr/utils/numeric.pyi +21 -0
- tnfr/validation/__init__.py +92 -4
- tnfr/validation/__init__.pyi +77 -17
- tnfr/validation/compatibility.py +79 -43
- tnfr/validation/compatibility.pyi +4 -6
- tnfr/validation/grammar.py +55 -133
- tnfr/validation/grammar.pyi +37 -8
- tnfr/validation/graph.py +138 -0
- tnfr/validation/graph.pyi +17 -0
- tnfr/validation/rules.py +161 -74
- tnfr/validation/rules.pyi +55 -18
- tnfr/validation/runtime.py +263 -0
- tnfr/validation/runtime.pyi +31 -0
- tnfr/validation/soft_filters.py +170 -0
- tnfr/validation/soft_filters.pyi +37 -0
- tnfr/validation/spectral.py +159 -0
- tnfr/validation/spectral.pyi +46 -0
- tnfr/validation/syntax.py +28 -139
- tnfr/validation/syntax.pyi +7 -4
- tnfr/validation/window.py +39 -0
- tnfr/validation/window.pyi +1 -0
- tnfr/viz/__init__.py +9 -0
- tnfr/viz/matplotlib.py +246 -0
- {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/METADATA +63 -19
- tnfr-7.0.0.dist-info/RECORD +185 -0
- {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/licenses/LICENSE.md +1 -1
- tnfr/constants_glyphs.py +0 -16
- tnfr/constants_glyphs.pyi +0 -12
- tnfr/grammar.py +0 -25
- tnfr/grammar.pyi +0 -13
- tnfr/helpers/__init__.py +0 -151
- tnfr/helpers/__init__.pyi +0 -66
- tnfr/helpers/numeric.pyi +0 -12
- tnfr/presets.py +0 -15
- tnfr/presets.pyi +0 -7
- tnfr/utils/io.pyi +0 -10
- tnfr/utils/validators.py +0 -130
- tnfr/utils/validators.pyi +0 -19
- tnfr-6.0.0.dist-info/RECORD +0 -157
- {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/WHEEL +0 -0
- {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/entry_points.txt +0 -0
- {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/top_level.txt +0 -0
tnfr/helpers/__init__.py
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
"""Curated high-level helpers exposed by :mod:`tnfr.helpers`.
|
|
2
|
-
|
|
3
|
-
The module is intentionally small and surfaces utilities that are stable for
|
|
4
|
-
external use, covering data preparation, glyph history management, and graph
|
|
5
|
-
cache invalidation.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from __future__ import annotations
|
|
9
|
-
|
|
10
|
-
from collections import Counter
|
|
11
|
-
from typing import TYPE_CHECKING, Any, Callable, Mapping, MutableMapping, Protocol, cast
|
|
12
|
-
|
|
13
|
-
from ..types import TNFRGraph
|
|
14
|
-
|
|
15
|
-
if TYPE_CHECKING: # pragma: no cover - import-time only for typing
|
|
16
|
-
from ..utils import (
|
|
17
|
-
CacheManager,
|
|
18
|
-
EdgeCacheManager,
|
|
19
|
-
cached_node_list,
|
|
20
|
-
cached_nodes_and_A,
|
|
21
|
-
edge_version_cache,
|
|
22
|
-
edge_version_update,
|
|
23
|
-
ensure_node_index_map,
|
|
24
|
-
ensure_node_offset_map,
|
|
25
|
-
get_graph,
|
|
26
|
-
get_graph_mapping,
|
|
27
|
-
increment_edge_version,
|
|
28
|
-
mark_dnfr_prep_dirty,
|
|
29
|
-
node_set_checksum,
|
|
30
|
-
stable_json,
|
|
31
|
-
)
|
|
32
|
-
from ..glyph_history import HistoryDict
|
|
33
|
-
from .numeric import (
|
|
34
|
-
angle_diff,
|
|
35
|
-
clamp,
|
|
36
|
-
clamp01,
|
|
37
|
-
kahan_sum_nd,
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
__all__ = (
|
|
41
|
-
"CacheManager",
|
|
42
|
-
"EdgeCacheManager",
|
|
43
|
-
"angle_diff",
|
|
44
|
-
"cached_node_list",
|
|
45
|
-
"cached_nodes_and_A",
|
|
46
|
-
"clamp",
|
|
47
|
-
"clamp01",
|
|
48
|
-
"edge_version_cache",
|
|
49
|
-
"edge_version_update",
|
|
50
|
-
"ensure_node_index_map",
|
|
51
|
-
"ensure_node_offset_map",
|
|
52
|
-
"get_graph",
|
|
53
|
-
"get_graph_mapping",
|
|
54
|
-
"increment_edge_version",
|
|
55
|
-
"kahan_sum_nd",
|
|
56
|
-
"mark_dnfr_prep_dirty",
|
|
57
|
-
"node_set_checksum",
|
|
58
|
-
"stable_json",
|
|
59
|
-
"count_glyphs",
|
|
60
|
-
"ensure_history",
|
|
61
|
-
"last_glyph",
|
|
62
|
-
"push_glyph",
|
|
63
|
-
"recent_glyph",
|
|
64
|
-
"__getattr__",
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
_UTIL_EXPORTS = {
|
|
69
|
-
"CacheManager",
|
|
70
|
-
"EdgeCacheManager",
|
|
71
|
-
"cached_node_list",
|
|
72
|
-
"cached_nodes_and_A",
|
|
73
|
-
"edge_version_cache",
|
|
74
|
-
"edge_version_update",
|
|
75
|
-
"ensure_node_index_map",
|
|
76
|
-
"ensure_node_offset_map",
|
|
77
|
-
"get_graph",
|
|
78
|
-
"get_graph_mapping",
|
|
79
|
-
"increment_edge_version",
|
|
80
|
-
"mark_dnfr_prep_dirty",
|
|
81
|
-
"node_set_checksum",
|
|
82
|
-
"stable_json",
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
def __getattr__(name: str) -> Any: # pragma: no cover - simple delegation
|
|
87
|
-
if name in _UTIL_EXPORTS:
|
|
88
|
-
from .. import utils as _utils
|
|
89
|
-
|
|
90
|
-
value = getattr(_utils, name)
|
|
91
|
-
globals()[name] = value
|
|
92
|
-
return value
|
|
93
|
-
raise AttributeError(name)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
def __dir__() -> list[str]: # pragma: no cover - simple reflection
|
|
97
|
-
return sorted(set(__all__))
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
class _PushGlyphCallable(Protocol):
|
|
101
|
-
def __call__(self, nd: MutableMapping[str, Any], glyph: str, window: int) -> None:
|
|
102
|
-
...
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
class _RecentGlyphCallable(Protocol):
|
|
106
|
-
def __call__(self, nd: MutableMapping[str, Any], glyph: str, window: int) -> bool:
|
|
107
|
-
...
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
class _EnsureHistoryCallable(Protocol):
|
|
111
|
-
def __call__(self, G: TNFRGraph) -> "HistoryDict | dict[str, Any]":
|
|
112
|
-
...
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
class _LastGlyphCallable(Protocol):
|
|
116
|
-
def __call__(self, nd: Mapping[str, Any]) -> str | None:
|
|
117
|
-
...
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
class _CountGlyphsCallable(Protocol):
|
|
121
|
-
def __call__(
|
|
122
|
-
self, G: TNFRGraph, window: int | None = ..., *, last_only: bool = ...
|
|
123
|
-
) -> Counter[str]:
|
|
124
|
-
...
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def _glyph_history_proxy(name: str) -> Callable[..., Any]:
|
|
128
|
-
"""Return a wrapper that delegates to :mod:`tnfr.glyph_history` lazily."""
|
|
129
|
-
|
|
130
|
-
target: dict[str, Callable[..., Any] | None] = {"func": None}
|
|
131
|
-
|
|
132
|
-
def _call(*args: Any, **kwargs: Any) -> Any:
|
|
133
|
-
func = target["func"]
|
|
134
|
-
if func is None:
|
|
135
|
-
from .. import glyph_history as _glyph_history
|
|
136
|
-
|
|
137
|
-
func = getattr(_glyph_history, name)
|
|
138
|
-
target["func"] = func
|
|
139
|
-
return func(*args, **kwargs)
|
|
140
|
-
|
|
141
|
-
_call.__name__ = name
|
|
142
|
-
_call.__qualname__ = name
|
|
143
|
-
_call.__doc__ = f"Proxy for :func:`tnfr.glyph_history.{name}`."
|
|
144
|
-
return _call
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
count_glyphs = cast(_CountGlyphsCallable, _glyph_history_proxy("count_glyphs"))
|
|
148
|
-
ensure_history = cast(_EnsureHistoryCallable, _glyph_history_proxy("ensure_history"))
|
|
149
|
-
last_glyph = cast(_LastGlyphCallable, _glyph_history_proxy("last_glyph"))
|
|
150
|
-
push_glyph = cast(_PushGlyphCallable, _glyph_history_proxy("push_glyph"))
|
|
151
|
-
recent_glyph = cast(_RecentGlyphCallable, _glyph_history_proxy("recent_glyph"))
|
tnfr/helpers/__init__.pyi
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import Any
|
|
4
|
-
|
|
5
|
-
from ..cache import CacheManager as CacheManager
|
|
6
|
-
from ..glyph_history import (
|
|
7
|
-
HistoryDict,
|
|
8
|
-
count_glyphs as count_glyphs,
|
|
9
|
-
ensure_history as ensure_history,
|
|
10
|
-
last_glyph as last_glyph,
|
|
11
|
-
push_glyph as push_glyph,
|
|
12
|
-
recent_glyph as recent_glyph,
|
|
13
|
-
)
|
|
14
|
-
from ..utils.cache import (
|
|
15
|
-
EdgeCacheManager as EdgeCacheManager,
|
|
16
|
-
cached_node_list as cached_node_list,
|
|
17
|
-
cached_nodes_and_A as cached_nodes_and_A,
|
|
18
|
-
edge_version_cache as edge_version_cache,
|
|
19
|
-
edge_version_update as edge_version_update,
|
|
20
|
-
ensure_node_index_map as ensure_node_index_map,
|
|
21
|
-
ensure_node_offset_map as ensure_node_offset_map,
|
|
22
|
-
node_set_checksum as node_set_checksum,
|
|
23
|
-
stable_json as stable_json,
|
|
24
|
-
)
|
|
25
|
-
from ..utils.graph import (
|
|
26
|
-
get_graph as get_graph,
|
|
27
|
-
get_graph_mapping as get_graph_mapping,
|
|
28
|
-
increment_edge_version as increment_edge_version,
|
|
29
|
-
mark_dnfr_prep_dirty as mark_dnfr_prep_dirty,
|
|
30
|
-
)
|
|
31
|
-
from .numeric import (
|
|
32
|
-
angle_diff as angle_diff,
|
|
33
|
-
clamp as clamp,
|
|
34
|
-
clamp01 as clamp01,
|
|
35
|
-
kahan_sum_nd as kahan_sum_nd,
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
__all__ = (
|
|
39
|
-
"CacheManager",
|
|
40
|
-
"EdgeCacheManager",
|
|
41
|
-
"angle_diff",
|
|
42
|
-
"cached_node_list",
|
|
43
|
-
"cached_nodes_and_A",
|
|
44
|
-
"clamp",
|
|
45
|
-
"clamp01",
|
|
46
|
-
"edge_version_cache",
|
|
47
|
-
"edge_version_update",
|
|
48
|
-
"ensure_node_index_map",
|
|
49
|
-
"ensure_node_offset_map",
|
|
50
|
-
"get_graph",
|
|
51
|
-
"get_graph_mapping",
|
|
52
|
-
"increment_edge_version",
|
|
53
|
-
"kahan_sum_nd",
|
|
54
|
-
"mark_dnfr_prep_dirty",
|
|
55
|
-
"node_set_checksum",
|
|
56
|
-
"stable_json",
|
|
57
|
-
"count_glyphs",
|
|
58
|
-
"ensure_history",
|
|
59
|
-
"last_glyph",
|
|
60
|
-
"push_glyph",
|
|
61
|
-
"recent_glyph",
|
|
62
|
-
"__getattr__",
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
def __getattr__(name: str) -> Any: ...
|
tnfr/helpers/numeric.pyi
DELETED
tnfr/presets.py
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"""Backward compatibility shim for configuration presets."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import warnings
|
|
6
|
-
|
|
7
|
-
from .config.presets import get_preset
|
|
8
|
-
|
|
9
|
-
warnings.warn(
|
|
10
|
-
"'tnfr.presets' is deprecated; use 'tnfr.config.presets' instead",
|
|
11
|
-
DeprecationWarning,
|
|
12
|
-
stacklevel=2,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
__all__ = ("get_preset",)
|
tnfr/presets.pyi
DELETED
tnfr/utils/io.pyi
DELETED
tnfr/utils/validators.py
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"""Validation utilities for TNFR graph structures."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import numbers
|
|
6
|
-
import sys
|
|
7
|
-
|
|
8
|
-
from collections.abc import Mapping
|
|
9
|
-
from typing import Callable, Sequence
|
|
10
|
-
|
|
11
|
-
from .._compat import TypeAlias
|
|
12
|
-
|
|
13
|
-
from ..alias import get_attr
|
|
14
|
-
from ..config.constants import GLYPHS_CANONICAL_SET
|
|
15
|
-
from ..constants import get_aliases, get_param
|
|
16
|
-
from ..helpers.numeric import within_range
|
|
17
|
-
from ..types import (
|
|
18
|
-
EPIValue,
|
|
19
|
-
NodeId,
|
|
20
|
-
StructuralFrequency,
|
|
21
|
-
TNFRGraph,
|
|
22
|
-
)
|
|
23
|
-
ALIAS_EPI = get_aliases("EPI")
|
|
24
|
-
ALIAS_VF = get_aliases("VF")
|
|
25
|
-
|
|
26
|
-
ValidatorFunc: TypeAlias = Callable[[TNFRGraph], None]
|
|
27
|
-
"""Callable signature expected for validation routines."""
|
|
28
|
-
|
|
29
|
-
NodeData = Mapping[str, object]
|
|
30
|
-
"""Read-only node attribute mapping used by validators."""
|
|
31
|
-
|
|
32
|
-
AliasSequence = Sequence[str]
|
|
33
|
-
"""Sequence of accepted attribute aliases."""
|
|
34
|
-
|
|
35
|
-
__all__ = ("validate_window", "run_validators")
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def validate_window(window: int, *, positive: bool = False) -> int:
|
|
39
|
-
"""Validate ``window`` as an ``int`` and return it.
|
|
40
|
-
|
|
41
|
-
Non-integer values raise :class:`TypeError`. When ``positive`` is ``True``
|
|
42
|
-
the value must be strictly greater than zero; otherwise it may be zero.
|
|
43
|
-
Negative values always raise :class:`ValueError`.
|
|
44
|
-
"""
|
|
45
|
-
|
|
46
|
-
if isinstance(window, bool) or not isinstance(window, numbers.Integral):
|
|
47
|
-
raise TypeError("'window' must be an integer")
|
|
48
|
-
if window < 0 or (positive and window == 0):
|
|
49
|
-
kind = "positive" if positive else "non-negative"
|
|
50
|
-
raise ValueError(f"'window'={window} must be {kind}")
|
|
51
|
-
return int(window)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def _require_attr(data: NodeData, alias: AliasSequence, node: NodeId, name: str) -> float:
|
|
55
|
-
"""Return attribute value or raise if missing."""
|
|
56
|
-
|
|
57
|
-
mapping: dict[str, object]
|
|
58
|
-
if isinstance(data, dict):
|
|
59
|
-
mapping = data
|
|
60
|
-
else:
|
|
61
|
-
mapping = dict(data)
|
|
62
|
-
val = get_attr(mapping, alias, None)
|
|
63
|
-
if val is None:
|
|
64
|
-
raise ValueError(f"Missing {name} attribute in node {node}")
|
|
65
|
-
return float(val)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def _validate_sigma(graph: TNFRGraph) -> None:
|
|
69
|
-
from ..sense import sigma_vector_from_graph
|
|
70
|
-
|
|
71
|
-
sv = sigma_vector_from_graph(graph)
|
|
72
|
-
if sv.get("mag", 0.0) > 1.0 + sys.float_info.epsilon:
|
|
73
|
-
raise ValueError("σ norm exceeds 1")
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
GRAPH_VALIDATORS: tuple[ValidatorFunc, ...] = (_validate_sigma,)
|
|
77
|
-
"""Ordered collection of graph-level validators."""
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def _check_epi_vf(
|
|
81
|
-
epi: EPIValue,
|
|
82
|
-
vf: StructuralFrequency,
|
|
83
|
-
epi_min: float,
|
|
84
|
-
epi_max: float,
|
|
85
|
-
vf_min: float,
|
|
86
|
-
vf_max: float,
|
|
87
|
-
node: NodeId,
|
|
88
|
-
) -> None:
|
|
89
|
-
_check_range(epi, epi_min, epi_max, "EPI", node)
|
|
90
|
-
_check_range(vf, vf_min, vf_max, "VF", node)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def _out_of_range_msg(name: str, node: NodeId, val: float) -> str:
|
|
94
|
-
return f"{name} out of range in node {node}: {val}"
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def _check_range(
|
|
98
|
-
val: float,
|
|
99
|
-
lower: float,
|
|
100
|
-
upper: float,
|
|
101
|
-
name: str,
|
|
102
|
-
node: NodeId,
|
|
103
|
-
tol: float = 1e-9,
|
|
104
|
-
) -> None:
|
|
105
|
-
if not within_range(val, lower, upper, tol):
|
|
106
|
-
raise ValueError(_out_of_range_msg(name, node, val))
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
def _check_glyph(glyph: str | None, node: NodeId) -> None:
|
|
110
|
-
if glyph and glyph not in GLYPHS_CANONICAL_SET:
|
|
111
|
-
raise KeyError(f"Invalid glyph {glyph} in node {node}")
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
def run_validators(graph: TNFRGraph) -> None:
|
|
115
|
-
"""Run all invariant validators on ``G`` with a single node pass."""
|
|
116
|
-
from ..glyph_history import last_glyph
|
|
117
|
-
|
|
118
|
-
epi_min = float(get_param(graph, "EPI_MIN"))
|
|
119
|
-
epi_max = float(get_param(graph, "EPI_MAX"))
|
|
120
|
-
vf_min = float(get_param(graph, "VF_MIN"))
|
|
121
|
-
vf_max = float(get_param(graph, "VF_MAX"))
|
|
122
|
-
|
|
123
|
-
for node, data in graph.nodes(data=True):
|
|
124
|
-
epi = EPIValue(_require_attr(data, ALIAS_EPI, node, "EPI"))
|
|
125
|
-
vf = StructuralFrequency(_require_attr(data, ALIAS_VF, node, "VF"))
|
|
126
|
-
_check_epi_vf(epi, vf, epi_min, epi_max, vf_min, vf_max, node)
|
|
127
|
-
_check_glyph(last_glyph(data), node)
|
|
128
|
-
|
|
129
|
-
for validator in GRAPH_VALIDATORS:
|
|
130
|
-
validator(graph)
|
tnfr/utils/validators.pyi
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from collections.abc import Mapping
|
|
2
|
-
from typing import Callable, Sequence
|
|
3
|
-
|
|
4
|
-
from ..types import TNFRGraph
|
|
5
|
-
from .._compat import TypeAlias
|
|
6
|
-
|
|
7
|
-
ValidatorFunc: TypeAlias = Callable[[TNFRGraph], None]
|
|
8
|
-
NodeData: TypeAlias = Mapping[str, object]
|
|
9
|
-
AliasSequence: TypeAlias = Sequence[str]
|
|
10
|
-
|
|
11
|
-
__all__: tuple[str, ...]
|
|
12
|
-
|
|
13
|
-
def __getattr__(name: str) -> object: ...
|
|
14
|
-
|
|
15
|
-
def validate_window(window: int, *, positive: bool = ...) -> int: ...
|
|
16
|
-
|
|
17
|
-
def run_validators(graph: TNFRGraph) -> None: ...
|
|
18
|
-
|
|
19
|
-
GRAPH_VALIDATORS: tuple[ValidatorFunc, ...]
|
tnfr-6.0.0.dist-info/RECORD
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
tnfr/__init__.py,sha256=zgPWxn__aqj45uTXna_lzywQ-5-TuxBYYt-BkMLXPiY,8679
|
|
2
|
-
tnfr/__init__.pyi,sha256=SVeCTtSpwlP-gtTzhX8OINlfFFuO43pyWunsc2I021Y,978
|
|
3
|
-
tnfr/_compat.py,sha256=VuXrIrkfwCGk_KJjgubhh3JE3S49Q6zoNaKgMVgpXFE,414
|
|
4
|
-
tnfr/_version.py,sha256=QBM2cy3Ta0_p9NQaMtYXdirM5XzS5wVntliMx9BDMgM,125
|
|
5
|
-
tnfr/_version.pyi,sha256=DbyhsjJTujojo0nxFtOdH94bxGxzReRJNjZoHV-zG1s,95
|
|
6
|
-
tnfr/alias.py,sha256=WfddprBly1jwWz10ozYErCi5I2ONAXjf2dwpOBxyqF8,18127
|
|
7
|
-
tnfr/alias.pyi,sha256=x4sS9Rt_M-pzQF_tJitR-HRxoyKNrn1s1lIj8zcV9us,2926
|
|
8
|
-
tnfr/cache.py,sha256=D5EZ1yDBQoXYcGH89wsdlnaojU3eH-MUACX8VDXWhFI,24442
|
|
9
|
-
tnfr/cache.pyi,sha256=MIH_3rs5OE1xt2VYOziShL0hGRctHFx2i7PThT-X3qw,5872
|
|
10
|
-
tnfr/callback_utils.py,sha256=YjGq7viVC95wFpSBJIt2fFDCp7OUWwpv5FpiWsTuzYA,12181
|
|
11
|
-
tnfr/callback_utils.pyi,sha256=Osu0xb9opdU7KeWC4MleelthiJHVqhZ4ia8UrRxOtvs,2365
|
|
12
|
-
tnfr/constants_glyphs.py,sha256=o0uTYkuLXaj3yM4CGAcnNcqwv9VC0I6x-hJzCPbzq9Q,401
|
|
13
|
-
tnfr/constants_glyphs.pyi,sha256=Xtm8NhTukF_rpn4Y7hy9O7aT1IcWSuQLcDpFcUnZnbk,192
|
|
14
|
-
tnfr/execution.py,sha256=md_Mzpe6M7VsQBt8_brKQPFfhnoRWftxi7YZC-LzmYM,5813
|
|
15
|
-
tnfr/execution.pyi,sha256=iPskC4i_jBPwNtvCXVr5tH71WD9mQCqAvKq7QjKDi2w,1465
|
|
16
|
-
tnfr/flatten.py,sha256=QbrZODPL0qTu9D7RVn3YGvq8QEq6f0GR60X-1kLho3c,8226
|
|
17
|
-
tnfr/flatten.pyi,sha256=dI7sVL2BTvFYvN6bWoQVtIKybOXZSogeko3pCvtp9Vo,594
|
|
18
|
-
tnfr/gamma.py,sha256=nkbBcP3H0gBZV_vABphsaY-Ick1i4gDj_X9PFnRoSQM,10998
|
|
19
|
-
tnfr/gamma.pyi,sha256=b2KKWTBGQ4fAMYIBUTumIFgS73xixk9ekd01cGNyFV4,1005
|
|
20
|
-
tnfr/glyph_history.py,sha256=ajLN0PIZWEQkaIaF8pJonseqAsem0utDZCD-UXirrWo,11527
|
|
21
|
-
tnfr/glyph_history.pyi,sha256=rRAu_jVFfkE7o7l1VE9-CSWXCnbfRs2BG_4WjYPQF_s,1397
|
|
22
|
-
tnfr/grammar.py,sha256=70lUuMqoB3GVomKD4rbQy_M5icBjp0-4XKwyAT6Z_gE,651
|
|
23
|
-
tnfr/grammar.pyi,sha256=UM6ntYDCQ3hEfYnV6e2O9K9G21VTkpx-YJYnX5j-2Lw,236
|
|
24
|
-
tnfr/immutable.py,sha256=SeNqRmbomKJjU6wC_ITe9gBGn9xEZjV1z67UQioSg7g,6445
|
|
25
|
-
tnfr/immutable.pyi,sha256=DHx-gRaygFPX2G5zfDQUjLsRB-tW5sZhhBRc16woD9I,1283
|
|
26
|
-
tnfr/initialization.py,sha256=ds8NfUEBku6pzIwWHNPOO8y1Gubio5dK6fYS80IHUJo,5914
|
|
27
|
-
tnfr/initialization.pyi,sha256=hDr2PMQmpye4xoA7m5Fgbpr-p2FLg3_LVSXu6D-apj0,1345
|
|
28
|
-
tnfr/io.py,sha256=U6eMQNSGa2wkHC7tsUrAq19UuPntoWiuCwd-br14qws,8316
|
|
29
|
-
tnfr/io.pyi,sha256=_x06jeSFJVJsyksACDnq9S-4l5X01YXlxn44y9ACXCA,181
|
|
30
|
-
tnfr/locking.py,sha256=mOvaENBNSsWw6KiBG_UXv4xXfZ9uQZvWw5SN2cKFmSU,1168
|
|
31
|
-
tnfr/locking.pyi,sha256=GoQ-C3l87O78jCi38VmUDpXwMnocPe0eavJFEN4QdXU,92
|
|
32
|
-
tnfr/node.py,sha256=qyEJ3ogOZoO9lAlCW3uyDhpRKqF7BinKrRy35ZywHGQ,7869
|
|
33
|
-
tnfr/node.pyi,sha256=uLAM1iu10BW3s8O7BwJcc1PWYE0v9YIQxVT1ZxYG2SE,3450
|
|
34
|
-
tnfr/observers.py,sha256=34OWK8YcE2m4UyqJeQMxpQBOv_KjSO4JG80F3nVziVI,5118
|
|
35
|
-
tnfr/observers.pyi,sha256=_mLFNOwrJAZb894noHW9Y94xBd4Dap3LHV8vx-L8oNk,881
|
|
36
|
-
tnfr/ontosim.py,sha256=Oqrgjib5J6igPi2sVbFJMLHKgw005lCVHPoZuboo08o,4035
|
|
37
|
-
tnfr/ontosim.pyi,sha256=__X4twVj8Y7uirGqx5UDlzMIYOBoU8ZqRBKOf836e6Q,565
|
|
38
|
-
tnfr/presets.py,sha256=FL2Fvi2mazD4PvaOxIosrQOnZ7KvNia-fiCf-4sF80U,312
|
|
39
|
-
tnfr/presets.pyi,sha256=8oHCzjv8AOcfWWRZb4pgTJ40HJUXbbrDOyQoSb_XsD8,94
|
|
40
|
-
tnfr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
-
tnfr/rng.py,sha256=BzrmsBXHdKsS1pt4u4J6VFA8AaH8Qh4yOjN_vjGMsYU,14122
|
|
42
|
-
tnfr/rng.pyi,sha256=95PakrXx9OYVrEUIrwR9xxuuGxiYK1ZZXWNm0cLf1AA,232
|
|
43
|
-
tnfr/selector.py,sha256=CuiMRNJ_isi_mRVfhWeyhrY1DfdOhn8VSXddArn1zhg,6164
|
|
44
|
-
tnfr/selector.pyi,sha256=LWwkUQloGu7SZFi4aedJA7snFd16oA9yaPYQP2tzvTY,379
|
|
45
|
-
tnfr/sense.py,sha256=ZUiaFJsP8wz5AkCywLxJN3dz1V9huFfnlE6m5InyvWQ,10148
|
|
46
|
-
tnfr/sense.pyi,sha256=9u-nqIEPaFp2GSrJF9AyNJEbhPnw-IjoIDM8QMc_R5I,794
|
|
47
|
-
tnfr/structural.py,sha256=_o8Kqaue3o7ohyozwbCO0taTEn4nLVNfE7P4F37KJDw,2526
|
|
48
|
-
tnfr/structural.pyi,sha256=WYLGl2quXH3iSnDZu0-ZKwsdGZLDpBtaWo0K3GOMQeY,847
|
|
49
|
-
tnfr/tokens.py,sha256=IOLowDN6JuiEVAnGcYtclpF_S9Orlu5BnEug5O3aERA,1214
|
|
50
|
-
tnfr/tokens.pyi,sha256=qo_cfFE3vybigYl6Bx6pstRwn0ay2Sdf91S5o8YWce0,683
|
|
51
|
-
tnfr/trace.py,sha256=y8bDQ4Rpb5DEr5qfnmZLcNty3pDKBhujYO7U8F5jrc8,15043
|
|
52
|
-
tnfr/trace.pyi,sha256=anufYVC1K-5UyoGcEk12f1BtGAwPG1bOUfT6XjQZxHk,1882
|
|
53
|
-
tnfr/types.py,sha256=t6jd_Wb3V1OuWUAx3ycmCbFje2Sshj6B8TOJNrv7MtI,11351
|
|
54
|
-
tnfr/types.pyi,sha256=VyfkdeGuwJP_3RXbVV4SozINJm7jr3XMEU9clJw6Mrw,4022
|
|
55
|
-
tnfr/cli/__init__.py,sha256=FTblTvNLe0v2QIrsMgiWwcD0_JoRkNOVsIwGlyk_4sE,2127
|
|
56
|
-
tnfr/cli/__init__.pyi,sha256=XYq749MAzQHqV9Lj7QHjN6I2qMTZTEP07w8S-odcNS0,1040
|
|
57
|
-
tnfr/cli/arguments.py,sha256=pklvrCn2AjD5gmCjfJpNs9UQLFGA2NziBh7HjVbkL80,6336
|
|
58
|
-
tnfr/cli/arguments.pyi,sha256=KzXFsqSohTnvvTAkMWBgRykWv2Fuc-lfIjbKyibY84s,1031
|
|
59
|
-
tnfr/cli/execution.py,sha256=jP8NMwKBDQZ-KvC0pVZStEnIUaSh-K_meIBiQSbW0Nk,9897
|
|
60
|
-
tnfr/cli/execution.pyi,sha256=IStpTub_NLFdMxMej3v15s7NPfIJB8hkL0pW_YuVdJc,2212
|
|
61
|
-
tnfr/cli/utils.py,sha256=aTsWm1b5QRZp4ZZStA1kqHiYT_wboqEpyTVNXVXnOoQ,977
|
|
62
|
-
tnfr/cli/utils.pyi,sha256=3ODz7i3t2cm9qjXfxzdLQgnfZHBdXTewEVsbwZdQGgs,105
|
|
63
|
-
tnfr/config/__init__.py,sha256=hcAneY0S8dH9kjHDBH7rlGbPH6r0F_WpkZ8J-5c4Q0M,384
|
|
64
|
-
tnfr/config/__init__.pyi,sha256=m1D1GQIyCbwnllwXNoPriPkxzBYIJUZBik-jJXdW_CA,113
|
|
65
|
-
tnfr/config/constants.py,sha256=8d_nXHpuM7DBKMeKonT0Wwft-oZgKxljYdhhZOOzceg,2830
|
|
66
|
-
tnfr/config/constants.pyi,sha256=Xtm8NhTukF_rpn4Y7hy9O7aT1IcWSuQLcDpFcUnZnbk,192
|
|
67
|
-
tnfr/config/init.py,sha256=srfCPDT8ddj2N2B7i9raHQeYKv3m2yswCKM67o7cfFQ,1029
|
|
68
|
-
tnfr/config/init.pyi,sha256=m1D1GQIyCbwnllwXNoPriPkxzBYIJUZBik-jJXdW_CA,113
|
|
69
|
-
tnfr/config/operator_names.py,sha256=iSefOgf-qniQI5OQhgH7auhVRveoX_0n3mkP11xHOdo,2705
|
|
70
|
-
tnfr/config/operator_names.pyi,sha256=9GgUMxZXzoemlnIjkTmtruOJ2DkA__DfjQTeouRNVu4,532
|
|
71
|
-
tnfr/config/presets.py,sha256=XHGkFAjBQ6t34xgMeL_9O-S2jPaXhEfgysEFhXcMlmQ,2481
|
|
72
|
-
tnfr/config/presets.pyi,sha256=8oHCzjv8AOcfWWRZb4pgTJ40HJUXbbrDOyQoSb_XsD8,94
|
|
73
|
-
tnfr/constants/__init__.py,sha256=2aMheGK04vELJARf47xHxkNZThQcSJPSoOV8kb3VqtE,6479
|
|
74
|
-
tnfr/constants/__init__.pyi,sha256=ukJKlu9VkWHKlcKlv_pyXHBKjE6HMqYckAO4pF6LqGc,2270
|
|
75
|
-
tnfr/constants/core.py,sha256=F7kVXaP_-nVhZIDq4327Z2Kxp2AI8yab8WGHDePIgTw,4718
|
|
76
|
-
tnfr/constants/core.pyi,sha256=H9oY3Skdse9qPSFw2gF7mpyAUzFCPwo3RaYIVnxDfvo,279
|
|
77
|
-
tnfr/constants/init.py,sha256=WdMKkdPKO7vyQoJAuoFnhWbb3n1nBkmkzprwyYj_ZN8,805
|
|
78
|
-
tnfr/constants/init.pyi,sha256=jdf_jVgcRlVxzFzioOw_ANXUbtAc-0iHfLLAT1tLyaw,169
|
|
79
|
-
tnfr/constants/metric.py,sha256=P7Zrw-4p7Nd7QwCVLRMV7GWop3LoeAdlm9NgAQnnbJU,3290
|
|
80
|
-
tnfr/constants/metric.pyi,sha256=x0U5uD9fzgmSUz_EoUdBE2zrEdbgnaMgbMxUFyA7vB8,280
|
|
81
|
-
tnfr/dynamics/__init__.py,sha256=OBfdBpz52CTv_nlhFc8arfnACwwoRr9O1iJpGITzi2E,3296
|
|
82
|
-
tnfr/dynamics/__init__.pyi,sha256=cRvvBpMV7G_5YF_mDJkvEcN1wTGBmdeEs-PJIihiZ1Q,1843
|
|
83
|
-
tnfr/dynamics/adaptation.py,sha256=WkmuLYY5wTvOJbeGKLfYAk2jYdP5caPVBPpib9fqTq8,7072
|
|
84
|
-
tnfr/dynamics/aliases.py,sha256=8SeUcsJRieXrvl7-oJiEcvLUke1AQSZnz4-djVJdeHg,445
|
|
85
|
-
tnfr/dynamics/coordination.py,sha256=VKlgqS7DA-2tWklwJUlD8DICJdiFGZX1gYMIElMeC_w,10814
|
|
86
|
-
tnfr/dynamics/dnfr.py,sha256=YXEpE-b5EWc1EFSBCneAf_GwK3JCUALw2JM3pGwmnzk,75723
|
|
87
|
-
tnfr/dynamics/dnfr.pyi,sha256=-hiGDoEEFtLb9Ggox1jhE_-ehkiaBL1kh7ClV-8913M,655
|
|
88
|
-
tnfr/dynamics/integrators.py,sha256=9zYrV4kr_s8L5CKPoXKwath0UIw_3r52jqce3jy95ks,16495
|
|
89
|
-
tnfr/dynamics/integrators.pyi,sha256=6bJaNKzZ5b1s5u4gktB1eACRH4oxVQNJTil-f1O02vI,843
|
|
90
|
-
tnfr/dynamics/runtime.py,sha256=ymP5BXZq5S7GtvfePUObMuMHMIhbUy6d6ZQbjcTYFU4,14762
|
|
91
|
-
tnfr/dynamics/sampling.py,sha256=FR2VAgcHc0eiUAK7YdAn6Ad1Vq2VtZTMceyOQzlqEno,1247
|
|
92
|
-
tnfr/dynamics/sampling.pyi,sha256=edfyDqgtvmK4w6zlBNG9nmGpZDVe3pdnNZYOLFbwIG8,102
|
|
93
|
-
tnfr/dynamics/selectors.py,sha256=a8M26H3K5ywJm4u5vTNt4yzrjR2FG5m-e6BMRE0v4YU,22447
|
|
94
|
-
tnfr/helpers/__init__.py,sha256=DrT3dtkR6oJ2-uv3XE_fbd7Pq69_tbyninrGMAtEAVQ,4042
|
|
95
|
-
tnfr/helpers/__init__.pyi,sha256=dae6lQfR-iXR1FJF9kSUKgqlzlH6dju7803AqsSbRco,1688
|
|
96
|
-
tnfr/helpers/numeric.py,sha256=ritFewhW1VNxCOHxBC71aNLSZUuJ23-MUsVn_IV7V8E,2693
|
|
97
|
-
tnfr/helpers/numeric.pyi,sha256=m6Tf_k9ZH2sro6z6g0wxariWSip6rVMct288zMDDcvo,174
|
|
98
|
-
tnfr/metrics/__init__.py,sha256=4gujlyn3aN95lkxCjQPPgKS_xJYm5ShcraeEkDYKR_E,885
|
|
99
|
-
tnfr/metrics/__init__.pyi,sha256=W5fUkKR9FeEcdHg4OVW2JPzxIRlQ71qtiYqoaEoAM3w,412
|
|
100
|
-
tnfr/metrics/coherence.py,sha256=BVzoJSLCt--eDaFTmTEYfRObZkRXjQgn_KzAcYcXQK0,46109
|
|
101
|
-
tnfr/metrics/common.py,sha256=R7jOzuxpenNkv-Y0iURMQOA9vtLTxr5Hdmna1OXohKA,4361
|
|
102
|
-
tnfr/metrics/common.pyi,sha256=QSOfl14yyDpQ0B6VvI3ecvpAH99mkrFXU35rJg_lXjU,289
|
|
103
|
-
tnfr/metrics/core.py,sha256=1L1shli3RxlGn4Y8xuYrsNfaE-9I3Qx7kHMXLwdfq7A,7208
|
|
104
|
-
tnfr/metrics/core.pyi,sha256=8s1j3oeTyzU5xyUIsuP_Q5DkXY6hja_j2xL7ghKcu-U,218
|
|
105
|
-
tnfr/metrics/diagnosis.py,sha256=P42FWqhOs955UB1cPm0rf1lFVB7wyz_0HLLoUFSeYII,26509
|
|
106
|
-
tnfr/metrics/diagnosis.pyi,sha256=I2PzErqAVEvYt8saFs8fF7ADFUXEwzPwiKuzRmR8XGs,2134
|
|
107
|
-
tnfr/metrics/export.py,sha256=F-gEES5RZopTRE45ISzYPRF_4ZF5HDa3qF_XNvurVE0,4735
|
|
108
|
-
tnfr/metrics/glyph_timing.py,sha256=0gdxDu-aMd6mlau_VCWpZxCxSZ6Iau53sCFDFpF7Wug,10851
|
|
109
|
-
tnfr/metrics/reporting.py,sha256=XcBwZl1-kwYLqxZELLR9oPsTVN--Z_thWqzVIANlVC4,4121
|
|
110
|
-
tnfr/metrics/reporting.pyi,sha256=uA7DP9bM7351dcq4qBooZDXJUSLXyWR3AE2_r9H29YI,194
|
|
111
|
-
tnfr/metrics/sense_index.py,sha256=qAUt1zbmSvvFGRusmQ5ssUaScuLCdNLnVO6BCS4hPNQ,9314
|
|
112
|
-
tnfr/metrics/sense_index.pyi,sha256=YK5rIvhGGN6KyZHVIirCrgBF3eDeJ2zPyfa7x19sqXM,135
|
|
113
|
-
tnfr/metrics/trig.py,sha256=Jyg9uwqNjSVRYFnYtyjrqnWSsFPKnrB6qcLof_tTD4Y,6548
|
|
114
|
-
tnfr/metrics/trig.pyi,sha256=nSssWGsGS7k4jvKWAYxICzoB13laM8PKTpPstWgIJNQ,249
|
|
115
|
-
tnfr/metrics/trig_cache.py,sha256=IPPIopGf5za8filSUGeymNHXEwfMZSRp0SNYgMdkHkc,3009
|
|
116
|
-
tnfr/metrics/trig_cache.pyi,sha256=wqxVFp27iiUBB9Uep8rEIU_MIh1PjtsaK_d2RpLGnfE,163
|
|
117
|
-
tnfr/operators/__init__.py,sha256=ea7doh9GgKIHpFOxkI4-ladMQcnIkWD1rvjurxx_ffA,13394
|
|
118
|
-
tnfr/operators/__init__.pyi,sha256=5xE25x2yK-o0JuqxbUmlP62dRXW4uWFDYcHfR5SifKg,588
|
|
119
|
-
tnfr/operators/definitions.py,sha256=4KG8BtIQ2sXKzyylqSoeJFnECdKVCujoVfFLHU4-iTY,3985
|
|
120
|
-
tnfr/operators/definitions.pyi,sha256=9Zj4-HjCy8kX3havevz5EPL5q3TtMuyabxfHRw95bak,1528
|
|
121
|
-
tnfr/operators/jitter.py,sha256=nO7gY2466UcKOYlpaVDEi4d5wvvNJRJWsbLU5xmcp0E,7833
|
|
122
|
-
tnfr/operators/jitter.pyi,sha256=FSrSKP51D5N7AdekOH9H-sVzBBaqnnmM2IQKfWlnQN0,188
|
|
123
|
-
tnfr/operators/registry.py,sha256=b7dO6n3gpUXgnYPhJhAQd0oElYNol43jkeQCP8iZn3U,2433
|
|
124
|
-
tnfr/operators/registry.pyi,sha256=CHuuHsvKsSo7mWSXMQJdJoXD0AHO6jrCjv8lVGuoEkY,314
|
|
125
|
-
tnfr/operators/remesh.py,sha256=VKqIucYJkQWUc1Ux0RlEpa8wOSjtN3u8MZWMt-0WdxQ,17869
|
|
126
|
-
tnfr/telemetry/__init__.py,sha256=Ugqk4Qiv4dIYTVpxGXdKnEBORDdmw19A7Ni2TBPsp7o,286
|
|
127
|
-
tnfr/telemetry/verbosity.py,sha256=6fN7IMhwtLKVQbch-PIN_vLxn3dw178SownD8-xlhKM,1048
|
|
128
|
-
tnfr/utils/__init__.py,sha256=UOUnzZVN-WGqyCHVGYiM9xkwwb83Mm4N6AqXySV_Da0,4375
|
|
129
|
-
tnfr/utils/__init__.pyi,sha256=EC12WoblgdRd4q_49XinqXklju2hyN9lvGUXbKRtCcw,2946
|
|
130
|
-
tnfr/utils/cache.py,sha256=brzDTG_cFBy8ENZs2je3GbFRgGKGl2t8bI8QsiIGd4c,22602
|
|
131
|
-
tnfr/utils/cache.pyi,sha256=sZnm7KKTvpM9CwI2y5v2G9L1NW3Gbo4MNMtC-_zZhOE,3782
|
|
132
|
-
tnfr/utils/data.py,sha256=nQFN0aWYHTX36UkniGXzBrqNYxCabBLVL2Rh99-y8ts,7805
|
|
133
|
-
tnfr/utils/data.pyi,sha256=O3Iy37c8KUE6kFozWTAU2FyaWuUGIrIM3sxdaBgpap4,1595
|
|
134
|
-
tnfr/utils/graph.py,sha256=wnkkAB-yS2KlGRWcwfLwdHjJLcenaa8S2xEzzsVHcRE,2780
|
|
135
|
-
tnfr/utils/graph.pyi,sha256=mrMVWDkJQhu8K3l2eUvOSgKCWlWij7e8pANzJjOFXKA,165
|
|
136
|
-
tnfr/utils/init.py,sha256=4tP7frGVtapI_TLWFW8k83AIzXL3FaGGjDPSmSrcJsU,22561
|
|
137
|
-
tnfr/utils/init.pyi,sha256=26t_q-CeJ5BDyXu80QsYojBknKlKQl7AoRTVgrbQNVw,2446
|
|
138
|
-
tnfr/utils/io.py,sha256=W3-aZ3axvLx0gmYR2zUmUvs9yMH2UPRIbp9Y-Z__rws,4730
|
|
139
|
-
tnfr/utils/io.pyi,sha256=l2_9a0mYrsnM4Frpi7jCxeueUD3-e6fYyKpZVya6ARY,168
|
|
140
|
-
tnfr/utils/validators.py,sha256=R0bvCZO0qXP1OqiVEKLMBX4P5nsy-tyuWKVf6mteg3E,3892
|
|
141
|
-
tnfr/utils/validators.pyi,sha256=6nPYp8N_vLAA8FNyQM_5iR41W8-OZS9oEdZwAz219uw,513
|
|
142
|
-
tnfr/validation/__init__.py,sha256=tVsCpQKc4SoBoQdKktI2pFDsaxzoeZXExSiW-ulXh5o,617
|
|
143
|
-
tnfr/validation/__init__.pyi,sha256=nSObG9II_9WCpYvvw3bOjIjw0iXHw8Sr0bazmXwR94k,315
|
|
144
|
-
tnfr/validation/compatibility.py,sha256=FNNU8VotjVv7eRFMDolixZC7vlsSZRqWLriqkH_gjLk,1788
|
|
145
|
-
tnfr/validation/compatibility.pyi,sha256=ELqyFWaYRgJzcuO-930v0eKxYxJFNCn2-P_AlOvSA-s,116
|
|
146
|
-
tnfr/validation/grammar.py,sha256=XmdRjtkvVWsC4qclG66vR37srO2vtohQgSGDTXIRpz8,4387
|
|
147
|
-
tnfr/validation/grammar.pyi,sha256=uavU-at-x10RBpFw_YcUC7yLepx1uo1B1sJYPGRWH0E,198
|
|
148
|
-
tnfr/validation/rules.py,sha256=fVJ5gX4bUkJQJsA4gBc0IMzirSUUHiGs_fj3sS5yIbM,5814
|
|
149
|
-
tnfr/validation/rules.pyi,sha256=WuHUQDS2o4Wrj7BRovHvwbQ6DiQSomJVgYWB0eyDL5M,305
|
|
150
|
-
tnfr/validation/syntax.py,sha256=O2cpQHv2FABfH7CCIcvg_Kw8zyHMzrwSF5VwjBNCrLg,4573
|
|
151
|
-
tnfr/validation/syntax.pyi,sha256=c8seASIj0bdS0Wof6AhupuTqkvC1x9FdmeEFk8SbETg,101
|
|
152
|
-
tnfr-6.0.0.dist-info/licenses/LICENSE.md,sha256=SRvvhXLrKtseuK6DARbuJffuXOXqAyk3wvF2n0t1SWA,1109
|
|
153
|
-
tnfr-6.0.0.dist-info/METADATA,sha256=61t5DnOqYNsIzIMnNDK8t50Bm3iKIfOwKqhN-_dSeP0,6226
|
|
154
|
-
tnfr-6.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
155
|
-
tnfr-6.0.0.dist-info/entry_points.txt,sha256=j4-QRHqeT2WnchHe_mvK7npGTLjlyfLpvRONFe9Z4MU,39
|
|
156
|
-
tnfr-6.0.0.dist-info/top_level.txt,sha256=Q2HJnvc5Rt2VHwVvyBTnNPT4SfmJWnCj7XUxxEvQa7c,5
|
|
157
|
-
tnfr-6.0.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|