@@ -112,6 +112,10 @@ class TestRecursiveBifurcation:
112112
113113 def test_subepi_can_bifurcate (self ):
114114 """Sub-node should be able to apply THOL and create its own sub-nodes."""
115+ from tnfr .operators .definitions import Coherence
116+ from tnfr .alias import get_attr
117+ from tnfr .constants .aliases import ALIAS_EPI
118+
115119 # Create parent and trigger first bifurcation
116120 G , parent = create_nfr ("parent" , epi = 0.70 , vf = 1.5 )
117121 G .nodes [parent ]["epi_history" ] = [0.20 , 0.50 , 0.70 ] # d²EPI = 0.10 > tau
@@ -122,13 +126,16 @@ def test_subepi_can_bifurcate(self):
122126 child = G .nodes [parent ]["sub_nodes" ][0 ]
123127
124128 # Build up child's EPI history to trigger bifurcation
125- # Use direct operator calls to avoid validation issues
126- from tnfr .operators .definitions import Coherence
127- for _ in range (4 ):
129+ # Apply operators to evolve child, then manually set accelerating history
130+ for _ in range (3 ):
128131 Emission ()(G , child )
129- Coherence ()(G , child ) # Stabilize after each emission
130- current_epi = G .nodes [child ][EPI_PRIMARY ]
131- G .nodes [child ]["epi_history" ].append (current_epi )
132+ Coherence ()(G , child )
133+
134+ # Set an accelerating EPI history for the child
135+ # d²EPI = abs(0.45 - 2*0.30 + 0.10) = abs(0.45 - 0.60 + 0.10) = 0.05 (borderline)
136+ # Use more acceleration: d²EPI = abs(0.50 - 2*0.30 + 0.10) = 0.10
137+ current_epi = float (get_attr (G .nodes [child ], ALIAS_EPI , 0.0 ))
138+ G .nodes [child ]["epi_history" ] = [0.10 , 0.30 , 0.60 ] # Accelerating pattern
132139
133140 # Trigger bifurcation on child
134141 SelfOrganization ()(G , child , tau = 0.05 )
@@ -139,6 +146,10 @@ def test_subepi_can_bifurcate(self):
139146
140147 def test_recursive_hierarchy_levels (self ):
141148 """Multi-level bifurcation should create increasing hierarchy levels."""
149+ from tnfr .operators .definitions import Coherence
150+ from tnfr .alias import get_attr
151+ from tnfr .constants .aliases import ALIAS_EPI
152+
142153 # Parent at level 0
143154 G , parent = create_nfr ("parent" , epi = 0.70 , vf = 1.5 )
144155 G .nodes [parent ]["hierarchy_level" ] = 0
@@ -148,11 +159,12 @@ def test_recursive_hierarchy_levels(self):
148159 child = G .nodes [parent ]["sub_nodes" ][0 ]
149160
150161 # Build child history and bifurcate
151- from tnfr .operators .definitions import Coherence
152- for _ in range (4 ):
162+ for _ in range (3 ):
153163 Emission ()(G , child )
154164 Coherence ()(G , child )
155- G .nodes [child ]["epi_history" ].append (G .nodes [child ][EPI_PRIMARY ])
165+
166+ # Set accelerating history for child
167+ G .nodes [child ]["epi_history" ] = [0.10 , 0.30 , 0.60 ]
156168
157169 SelfOrganization ()(G , child , tau = 0.05 )
158170
@@ -167,6 +179,10 @@ def test_recursive_hierarchy_levels(self):
167179
168180 def test_cascade_depth_recursive (self ):
169181 """Cascade depth should correctly measure multi-level bifurcation."""
182+ from tnfr .operators .definitions import Coherence
183+ from tnfr .alias import get_attr
184+ from tnfr .constants .aliases import ALIAS_EPI
185+
170186 # Parent bifurcates
171187 G , parent = create_nfr ("parent" , epi = 0.70 , vf = 1.5 )
172188 G .nodes [parent ]["hierarchy_level" ] = 0
@@ -180,11 +196,12 @@ def test_cascade_depth_recursive(self):
180196
181197 # Child bifurcates
182198 child = G .nodes [parent ]["sub_nodes" ][0 ]
183- from tnfr .operators .definitions import Coherence
184- for _ in range (4 ):
199+ for _ in range (3 ):
185200 Emission ()(G , child )
186201 Coherence ()(G , child )
187- G .nodes [child ]["epi_history" ].append (G .nodes [child ][EPI_PRIMARY ])
202+
203+ # Set accelerating history for child
204+ G .nodes [child ]["epi_history" ] = [0.10 , 0.30 , 0.60 ]
188205
189206 SelfOrganization ()(G , child , tau = 0.05 )
190207
0 commit comments