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.

Files changed (176) hide show
  1. tnfr/__init__.py +50 -5
  2. tnfr/__init__.pyi +0 -7
  3. tnfr/_compat.py +0 -1
  4. tnfr/_generated_version.py +34 -0
  5. tnfr/_version.py +44 -2
  6. tnfr/alias.py +14 -13
  7. tnfr/alias.pyi +5 -37
  8. tnfr/cache.py +9 -729
  9. tnfr/cache.pyi +8 -224
  10. tnfr/callback_utils.py +16 -31
  11. tnfr/callback_utils.pyi +3 -29
  12. tnfr/cli/__init__.py +17 -11
  13. tnfr/cli/__init__.pyi +0 -21
  14. tnfr/cli/arguments.py +175 -14
  15. tnfr/cli/arguments.pyi +5 -11
  16. tnfr/cli/execution.py +434 -48
  17. tnfr/cli/execution.pyi +14 -24
  18. tnfr/cli/utils.py +20 -3
  19. tnfr/cli/utils.pyi +5 -5
  20. tnfr/config/__init__.py +2 -1
  21. tnfr/config/__init__.pyi +2 -0
  22. tnfr/config/feature_flags.py +83 -0
  23. tnfr/config/init.py +1 -1
  24. tnfr/config/operator_names.py +1 -14
  25. tnfr/config/presets.py +6 -26
  26. tnfr/constants/__init__.py +10 -13
  27. tnfr/constants/__init__.pyi +10 -22
  28. tnfr/constants/aliases.py +31 -0
  29. tnfr/constants/core.py +4 -3
  30. tnfr/constants/init.py +1 -1
  31. tnfr/constants/metric.py +3 -3
  32. tnfr/dynamics/__init__.py +64 -10
  33. tnfr/dynamics/__init__.pyi +3 -4
  34. tnfr/dynamics/adaptation.py +79 -13
  35. tnfr/dynamics/aliases.py +10 -9
  36. tnfr/dynamics/coordination.py +77 -35
  37. tnfr/dynamics/dnfr.py +575 -274
  38. tnfr/dynamics/dnfr.pyi +1 -10
  39. tnfr/dynamics/integrators.py +47 -33
  40. tnfr/dynamics/integrators.pyi +0 -1
  41. tnfr/dynamics/runtime.py +489 -129
  42. tnfr/dynamics/sampling.py +2 -0
  43. tnfr/dynamics/selectors.py +101 -62
  44. tnfr/execution.py +15 -8
  45. tnfr/execution.pyi +5 -25
  46. tnfr/flatten.py +7 -3
  47. tnfr/flatten.pyi +1 -8
  48. tnfr/gamma.py +22 -26
  49. tnfr/gamma.pyi +0 -6
  50. tnfr/glyph_history.py +37 -26
  51. tnfr/glyph_history.pyi +1 -19
  52. tnfr/glyph_runtime.py +16 -0
  53. tnfr/glyph_runtime.pyi +9 -0
  54. tnfr/immutable.py +20 -15
  55. tnfr/immutable.pyi +4 -7
  56. tnfr/initialization.py +5 -7
  57. tnfr/initialization.pyi +1 -9
  58. tnfr/io.py +6 -305
  59. tnfr/io.pyi +13 -8
  60. tnfr/mathematics/__init__.py +81 -0
  61. tnfr/mathematics/backend.py +426 -0
  62. tnfr/mathematics/dynamics.py +398 -0
  63. tnfr/mathematics/epi.py +254 -0
  64. tnfr/mathematics/generators.py +222 -0
  65. tnfr/mathematics/metrics.py +119 -0
  66. tnfr/mathematics/operators.py +233 -0
  67. tnfr/mathematics/operators_factory.py +71 -0
  68. tnfr/mathematics/projection.py +78 -0
  69. tnfr/mathematics/runtime.py +173 -0
  70. tnfr/mathematics/spaces.py +247 -0
  71. tnfr/mathematics/transforms.py +292 -0
  72. tnfr/metrics/__init__.py +10 -10
  73. tnfr/metrics/coherence.py +123 -94
  74. tnfr/metrics/common.py +22 -13
  75. tnfr/metrics/common.pyi +42 -11
  76. tnfr/metrics/core.py +72 -14
  77. tnfr/metrics/diagnosis.py +48 -57
  78. tnfr/metrics/diagnosis.pyi +3 -7
  79. tnfr/metrics/export.py +3 -5
  80. tnfr/metrics/glyph_timing.py +41 -31
  81. tnfr/metrics/reporting.py +13 -6
  82. tnfr/metrics/sense_index.py +884 -114
  83. tnfr/metrics/trig.py +167 -11
  84. tnfr/metrics/trig.pyi +1 -0
  85. tnfr/metrics/trig_cache.py +112 -15
  86. tnfr/node.py +400 -17
  87. tnfr/node.pyi +55 -38
  88. tnfr/observers.py +111 -8
  89. tnfr/observers.pyi +0 -15
  90. tnfr/ontosim.py +9 -6
  91. tnfr/ontosim.pyi +0 -5
  92. tnfr/operators/__init__.py +529 -42
  93. tnfr/operators/__init__.pyi +14 -0
  94. tnfr/operators/definitions.py +350 -18
  95. tnfr/operators/definitions.pyi +0 -14
  96. tnfr/operators/grammar.py +760 -0
  97. tnfr/operators/jitter.py +28 -22
  98. tnfr/operators/registry.py +7 -12
  99. tnfr/operators/registry.pyi +0 -2
  100. tnfr/operators/remesh.py +38 -61
  101. tnfr/rng.py +17 -300
  102. tnfr/schemas/__init__.py +8 -0
  103. tnfr/schemas/grammar.json +94 -0
  104. tnfr/selector.py +3 -4
  105. tnfr/selector.pyi +1 -1
  106. tnfr/sense.py +22 -24
  107. tnfr/sense.pyi +0 -7
  108. tnfr/structural.py +504 -21
  109. tnfr/structural.pyi +41 -18
  110. tnfr/telemetry/__init__.py +23 -1
  111. tnfr/telemetry/cache_metrics.py +226 -0
  112. tnfr/telemetry/nu_f.py +423 -0
  113. tnfr/telemetry/nu_f.pyi +123 -0
  114. tnfr/tokens.py +1 -4
  115. tnfr/tokens.pyi +1 -6
  116. tnfr/trace.py +20 -53
  117. tnfr/trace.pyi +9 -37
  118. tnfr/types.py +244 -15
  119. tnfr/types.pyi +200 -14
  120. tnfr/units.py +69 -0
  121. tnfr/units.pyi +16 -0
  122. tnfr/utils/__init__.py +107 -48
  123. tnfr/utils/__init__.pyi +80 -11
  124. tnfr/utils/cache.py +1705 -65
  125. tnfr/utils/cache.pyi +370 -58
  126. tnfr/utils/chunks.py +104 -0
  127. tnfr/utils/chunks.pyi +21 -0
  128. tnfr/utils/data.py +95 -5
  129. tnfr/utils/data.pyi +8 -17
  130. tnfr/utils/graph.py +2 -4
  131. tnfr/utils/init.py +31 -7
  132. tnfr/utils/init.pyi +4 -11
  133. tnfr/utils/io.py +313 -14
  134. tnfr/{helpers → utils}/numeric.py +50 -24
  135. tnfr/utils/numeric.pyi +21 -0
  136. tnfr/validation/__init__.py +92 -4
  137. tnfr/validation/__init__.pyi +77 -17
  138. tnfr/validation/compatibility.py +79 -43
  139. tnfr/validation/compatibility.pyi +4 -6
  140. tnfr/validation/grammar.py +55 -133
  141. tnfr/validation/grammar.pyi +37 -8
  142. tnfr/validation/graph.py +138 -0
  143. tnfr/validation/graph.pyi +17 -0
  144. tnfr/validation/rules.py +161 -74
  145. tnfr/validation/rules.pyi +55 -18
  146. tnfr/validation/runtime.py +263 -0
  147. tnfr/validation/runtime.pyi +31 -0
  148. tnfr/validation/soft_filters.py +170 -0
  149. tnfr/validation/soft_filters.pyi +37 -0
  150. tnfr/validation/spectral.py +159 -0
  151. tnfr/validation/spectral.pyi +46 -0
  152. tnfr/validation/syntax.py +28 -139
  153. tnfr/validation/syntax.pyi +7 -4
  154. tnfr/validation/window.py +39 -0
  155. tnfr/validation/window.pyi +1 -0
  156. tnfr/viz/__init__.py +9 -0
  157. tnfr/viz/matplotlib.py +246 -0
  158. {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/METADATA +63 -19
  159. tnfr-7.0.0.dist-info/RECORD +185 -0
  160. {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/licenses/LICENSE.md +1 -1
  161. tnfr/constants_glyphs.py +0 -16
  162. tnfr/constants_glyphs.pyi +0 -12
  163. tnfr/grammar.py +0 -25
  164. tnfr/grammar.pyi +0 -13
  165. tnfr/helpers/__init__.py +0 -151
  166. tnfr/helpers/__init__.pyi +0 -66
  167. tnfr/helpers/numeric.pyi +0 -12
  168. tnfr/presets.py +0 -15
  169. tnfr/presets.pyi +0 -7
  170. tnfr/utils/io.pyi +0 -10
  171. tnfr/utils/validators.py +0 -130
  172. tnfr/utils/validators.pyi +0 -19
  173. tnfr-6.0.0.dist-info/RECORD +0 -157
  174. {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/WHEEL +0 -0
  175. {tnfr-6.0.0.dist-info → tnfr-7.0.0.dist-info}/entry_points.txt +0 -0
  176. {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
@@ -1,12 +0,0 @@
1
- from typing import Any
2
-
3
- __all__: Any
4
-
5
- def __getattr__(name: str) -> Any: ...
6
-
7
- angle_diff: Any
8
- clamp: Any
9
- clamp01: Any
10
- kahan_sum_nd: Any
11
- similarity_abs: Any
12
- within_range: Any
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
@@ -1,7 +0,0 @@
1
- from typing import Any
2
-
3
- __all__: Any
4
-
5
- def __getattr__(name: str) -> Any: ...
6
-
7
- get_preset: Any
tnfr/utils/io.pyi DELETED
@@ -1,10 +0,0 @@
1
- from typing import Any
2
-
3
- __all__: Any
4
-
5
- def __getattr__(name: str) -> Any: ...
6
-
7
- DEFAULT_PARAMS: Any
8
- JsonDumpsParams: Any
9
- clear_orjson_param_warnings: Any
10
- json_dumps: Any
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, ...]
@@ -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