tnfr 4.3.0__py3-none-any.whl → 4.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of tnfr might be problematic. Click here for more details.
- tnfr/__init__.py +40 -12
- tnfr/cli.py +53 -1
- tnfr/config.py +41 -0
- tnfr/constants.py +82 -25
- tnfr/dynamics.py +191 -42
- tnfr/gamma.py +17 -0
- tnfr/helpers.py +33 -21
- tnfr/metrics.py +368 -5
- tnfr/node.py +202 -0
- tnfr/operators.py +298 -125
- tnfr/structural.py +201 -0
- tnfr/types.py +2 -1
- tnfr/validators.py +38 -0
- {tnfr-4.3.0.dist-info → tnfr-4.5.0.dist-info}/METADATA +2 -2
- tnfr-4.5.0.dist-info/RECORD +28 -0
- tnfr-4.3.0.dist-info/RECORD +0 -24
- {tnfr-4.3.0.dist-info → tnfr-4.5.0.dist-info}/WHEEL +0 -0
- {tnfr-4.3.0.dist-info → tnfr-4.5.0.dist-info}/entry_points.txt +0 -0
- {tnfr-4.3.0.dist-info → tnfr-4.5.0.dist-info}/licenses/LICENSE.md +0 -0
- {tnfr-4.3.0.dist-info → tnfr-4.5.0.dist-info}/top_level.txt +0 -0
tnfr/types.py
CHANGED
|
@@ -9,9 +9,10 @@ class NodeState:
|
|
|
9
9
|
vf: float = 1.0 # νf
|
|
10
10
|
theta: float = 0.0 # θ
|
|
11
11
|
Si: float = 0.5
|
|
12
|
+
epi_kind: str = ""
|
|
12
13
|
extra: Dict[str, Any] = field(default_factory=dict)
|
|
13
14
|
|
|
14
15
|
def to_attrs(self) -> Dict[str, Any]:
|
|
15
|
-
d = {"EPI": self.EPI, "νf": self.vf, "θ": self.theta, "Si": self.Si}
|
|
16
|
+
d = {"EPI": self.EPI, "νf": self.vf, "θ": self.theta, "Si": self.Si, "EPI_kind": self.epi_kind}
|
|
16
17
|
d.update(self.extra)
|
|
17
18
|
return d
|
tnfr/validators.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Validadores de invariantes TNFR."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from typing import Iterable
|
|
5
|
+
|
|
6
|
+
from .constants import ALIAS_EPI, DEFAULTS
|
|
7
|
+
from .helpers import _get_attr
|
|
8
|
+
from .sense import sigma_vector_global, GLYPHS_CANONICAL
|
|
9
|
+
from .helpers import last_glifo
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _validate_epi(G) -> None:
|
|
13
|
+
emin = float(G.graph.get("EPI_MIN", DEFAULTS.get("EPI_MIN", -1.0)))
|
|
14
|
+
emax = float(G.graph.get("EPI_MAX", DEFAULTS.get("EPI_MAX", 1.0)))
|
|
15
|
+
for n in G.nodes():
|
|
16
|
+
x = float(_get_attr(G.nodes[n], ALIAS_EPI, 0.0))
|
|
17
|
+
if not (emin - 1e-9 <= x <= emax + 1e-9):
|
|
18
|
+
raise ValueError(f"EPI fuera de rango en nodo {n}: {x}")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _validate_sigma(G) -> None:
|
|
22
|
+
sv = sigma_vector_global(G)
|
|
23
|
+
if sv.get("mag", 0.0) > 1.0 + 1e-9:
|
|
24
|
+
raise ValueError("Norma de σ excede 1")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _validate_glifos(G) -> None:
|
|
28
|
+
for n in G.nodes():
|
|
29
|
+
g = last_glifo(G.nodes[n])
|
|
30
|
+
if g and g not in GLYPHS_CANONICAL:
|
|
31
|
+
raise ValueError(f"Glifo inválido {g} en nodo {n}")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def run_validators(G) -> None:
|
|
35
|
+
"""Ejecuta todos los validadores de invariantes sobre ``G``."""
|
|
36
|
+
_validate_epi(G)
|
|
37
|
+
_validate_sigma(G)
|
|
38
|
+
_validate_glifos(G)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tnfr
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.5.0
|
|
4
4
|
Summary: Canonical TNFR: modular glyph-based dynamics on networks.
|
|
5
5
|
Author: fmg
|
|
6
6
|
License: MIT
|
|
@@ -25,7 +25,7 @@ License-File: LICENSE.md
|
|
|
25
25
|
Requires-Dist: networkx>=2.6
|
|
26
26
|
Dynamic: license-file
|
|
27
27
|
|
|
28
|
-
# TNFR
|
|
28
|
+
# TNFR Python Project
|
|
29
29
|
|
|
30
30
|
Reference implementation of the Resonant Fractal Nature Theory (TNFR).
|
|
31
31
|
It models glyph-driven dynamics on NetworkX graphs, providing a modular
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
tnfr/__init__.py,sha256=c3fypVJdVZeV-AEZEPsr4NZZRwH9reGEBwoNnT9dP88,2788
|
|
2
|
+
tnfr/cli.py,sha256=7OR3dlWUVjEKVH_itH-zYq8WQculXwSdCDDvmQH15kY,14372
|
|
3
|
+
tnfr/config.py,sha256=bFc5AnLVoF0oUrSedAi5WpD6oCvn4hhLHO7WGgslg2M,1303
|
|
4
|
+
tnfr/constants.py,sha256=XoUlTuUaQgQ6BbHzKSIHijqRMf9Gb3Avjo7_CLicgps,11570
|
|
5
|
+
tnfr/dynamics.py,sha256=An0MlAJVhCy5uCQsl3c_PZKdAKBZojgRCnTAQzfaahg,32799
|
|
6
|
+
tnfr/gamma.py,sha256=U1yXbv4ef9VSwXirjRlcwdNr78Ah5LstAsg5WIkRQxY,4083
|
|
7
|
+
tnfr/grammar.py,sha256=vz5F0P3IfvA6HassRcoD327hBP5vCUw-xPSTsPmqwhQ,5363
|
|
8
|
+
tnfr/helpers.py,sha256=KT9_CAz3Z-WRKdARyGnsQ16m-p2z-l1-Y6UhVyY8tcU,8323
|
|
9
|
+
tnfr/main.py,sha256=XqjI1YEdF-OqRzTMa5dYIxCig4qyAR-l1FPcyxpC8WY,1926
|
|
10
|
+
tnfr/metrics.py,sha256=MTp0YifWdycW-jUFWhvxbJx-labWUR0thTnS0sxifrg,20259
|
|
11
|
+
tnfr/node.py,sha256=A3nlaW_lwG0Q1dj6HPmyjfccWfZt4rwnzqPxTglu-Sk,6184
|
|
12
|
+
tnfr/observers.py,sha256=PTw3hxk7KD-Yx_CvCIU09icuhyYD6uNU6SvF80UvP-Y,5354
|
|
13
|
+
tnfr/ontosim.py,sha256=9GfEtiLIdJOPJUTufcq_MssAA9J8AfChHU6HKb3DIJY,5628
|
|
14
|
+
tnfr/operators.py,sha256=TSY2LNIC-um3iSwniYiyu6oumnDwiES2zwb2B7ZbEZE,20536
|
|
15
|
+
tnfr/presets.py,sha256=qFuDxlexc_kw--3VRaOx3cfyL6vPEOX_UVsJd2DNWAE,998
|
|
16
|
+
tnfr/program.py,sha256=eim7D8zsbbkGDWbODag-0VKG44jEYioX4Sl6KRwgVtw,6038
|
|
17
|
+
tnfr/scenarios.py,sha256=QkUdCHp5R5T44fgfGppJ8dHzZa6avdNTNsYJbya_7XM,1165
|
|
18
|
+
tnfr/sense.py,sha256=9ABkqHjwu5pxoakddZwANpp9xy_NNo4frm9NGTg1GXQ,6482
|
|
19
|
+
tnfr/structural.py,sha256=hE5_l7cuiPad9AuFVrFtnkJ8A8eL_e69gUN5VknkQiI,5155
|
|
20
|
+
tnfr/trace.py,sha256=e_xdOOMZ5rqXOcdw99h8X1RnVuf_s9AeTzncqS551hE,4735
|
|
21
|
+
tnfr/types.py,sha256=CnSwzzh9d0WgqB128y71iNWiiAA7Sf-eJ_v1xHMAwLo,507
|
|
22
|
+
tnfr/validators.py,sha256=tCsz9A8OvEKiBZX9wvvri_C894XXdWfkbEZ6qqpcdNg,1169
|
|
23
|
+
tnfr-4.5.0.dist-info/licenses/LICENSE.md,sha256=SRvvhXLrKtseuK6DARbuJffuXOXqAyk3wvF2n0t1SWA,1109
|
|
24
|
+
tnfr-4.5.0.dist-info/METADATA,sha256=k7dlvh_IujIeTJfUfQXvCV9h6RbbtQvIbsJ3ylKUHTo,6301
|
|
25
|
+
tnfr-4.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
26
|
+
tnfr-4.5.0.dist-info/entry_points.txt,sha256=j4-QRHqeT2WnchHe_mvK7npGTLjlyfLpvRONFe9Z4MU,39
|
|
27
|
+
tnfr-4.5.0.dist-info/top_level.txt,sha256=Q2HJnvc5Rt2VHwVvyBTnNPT4SfmJWnCj7XUxxEvQa7c,5
|
|
28
|
+
tnfr-4.5.0.dist-info/RECORD,,
|
tnfr-4.3.0.dist-info/RECORD
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
tnfr/__init__.py,sha256=g3v2NoMYZuOvxALTpNMyj-bddJDyQWaZ5poV6vFYqCg,2051
|
|
2
|
-
tnfr/cli.py,sha256=DyJlawWo-mC44RZz4UR4WseqZymcc_zfo49ivZjtkxY,11744
|
|
3
|
-
tnfr/constants.py,sha256=PTAX5ZGCiU2lmBNSIsmS402BWS-oTKhQV6wBGL_-SxM,9549
|
|
4
|
-
tnfr/dynamics.py,sha256=913qUr-Jv495ocPBzd6vxkhKIKrKXXkqnBNzrUlnj7A,27556
|
|
5
|
-
tnfr/gamma.py,sha256=7ZOYoa0dMyxapu_ok8syWa6fIIdgR5XGgNhVIf1Np44,3466
|
|
6
|
-
tnfr/grammar.py,sha256=vz5F0P3IfvA6HassRcoD327hBP5vCUw-xPSTsPmqwhQ,5363
|
|
7
|
-
tnfr/helpers.py,sha256=2Y6hEShM3EHxRIYCir2GvxZWtRVAUTw9ERKITf_BcIw,7873
|
|
8
|
-
tnfr/main.py,sha256=XqjI1YEdF-OqRzTMa5dYIxCig4qyAR-l1FPcyxpC8WY,1926
|
|
9
|
-
tnfr/metrics.py,sha256=z85robiGF9CDVPen98fN00Qih7xknqvrkGOW_BIkGUs,7769
|
|
10
|
-
tnfr/observers.py,sha256=PTw3hxk7KD-Yx_CvCIU09icuhyYD6uNU6SvF80UvP-Y,5354
|
|
11
|
-
tnfr/ontosim.py,sha256=9GfEtiLIdJOPJUTufcq_MssAA9J8AfChHU6HKb3DIJY,5628
|
|
12
|
-
tnfr/operators.py,sha256=aEiWF_9XLTsREe56urEH6aU_Hpu5tGxPbg4cWcGBLvs,15139
|
|
13
|
-
tnfr/presets.py,sha256=qFuDxlexc_kw--3VRaOx3cfyL6vPEOX_UVsJd2DNWAE,998
|
|
14
|
-
tnfr/program.py,sha256=eim7D8zsbbkGDWbODag-0VKG44jEYioX4Sl6KRwgVtw,6038
|
|
15
|
-
tnfr/scenarios.py,sha256=QkUdCHp5R5T44fgfGppJ8dHzZa6avdNTNsYJbya_7XM,1165
|
|
16
|
-
tnfr/sense.py,sha256=9ABkqHjwu5pxoakddZwANpp9xy_NNo4frm9NGTg1GXQ,6482
|
|
17
|
-
tnfr/trace.py,sha256=e_xdOOMZ5rqXOcdw99h8X1RnVuf_s9AeTzncqS551hE,4735
|
|
18
|
-
tnfr/types.py,sha256=xyFHp0PptEqPNUekAFH6DcAnyMx4bCQutMyFUXMd2sA,457
|
|
19
|
-
tnfr-4.3.0.dist-info/licenses/LICENSE.md,sha256=SRvvhXLrKtseuK6DARbuJffuXOXqAyk3wvF2n0t1SWA,1109
|
|
20
|
-
tnfr-4.3.0.dist-info/METADATA,sha256=L25IajD448ZSlOLJikBDahMQzl8LQCSKdMfOUVJEx3g,6321
|
|
21
|
-
tnfr-4.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
22
|
-
tnfr-4.3.0.dist-info/entry_points.txt,sha256=j4-QRHqeT2WnchHe_mvK7npGTLjlyfLpvRONFe9Z4MU,39
|
|
23
|
-
tnfr-4.3.0.dist-info/top_level.txt,sha256=Q2HJnvc5Rt2VHwVvyBTnNPT4SfmJWnCj7XUxxEvQa7c,5
|
|
24
|
-
tnfr-4.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|