@@ -54,22 +54,20 @@ def __init__(
5454 affinities : Optional [np .ndarray ] = None ,
5555 areas : Optional [np .ndarray ] = None ,
5656 ):
57- self .node_ids1 = np .array (node_ids1 , dtype = basetypes .NODE_ID , copy = False )
58- self .node_ids2 = np .array (node_ids2 , dtype = basetypes .NODE_ID , copy = False )
57+ self .node_ids1 = np .array (node_ids1 , dtype = basetypes .NODE_ID )
58+ self .node_ids2 = np .array (node_ids2 , dtype = basetypes .NODE_ID )
5959 assert self .node_ids1 .size == self .node_ids2 .size
6060
6161 self ._as_pairs = None
6262
6363 if affinities is not None and len (affinities ) > 0 :
64- self ._affinities = np .array (
65- affinities , dtype = basetypes .EDGE_AFFINITY , copy = False
66- )
64+ self ._affinities = np .array (affinities , dtype = basetypes .EDGE_AFFINITY )
6765 assert self .node_ids1 .size == self ._affinities .size
6866 else :
6967 self ._affinities = np .full (len (self .node_ids1 ), DEFAULT_AFFINITY )
7068
7169 if areas is not None and len (areas ) > 0 :
72- self ._areas = np .array (areas , dtype = basetypes .EDGE_AREA , copy = False )
70+ self ._areas = np .array (areas , dtype = basetypes .EDGE_AREA )
7371 assert self .node_ids1 .size == self ._areas .size
7472 else :
7573 self ._areas = np .full (len (self .node_ids1 ), DEFAULT_AREA )
@@ -430,7 +428,7 @@ def _check_hierarchy_a_from_b(nodes_a, hierarchy_a, layer, parent_ts):
430428 _children = _children [_children_layers > 2 ]
431429
432430 _hierarchy_a_from_b = np .concatenate (_hierarchy_a_from_b )
433- return np .isin (_hierarchy_a_from_b , hierarchy_a )
431+ return np .any ( np . isin (_hierarchy_a_from_b , hierarchy_a ) )
434432
435433 def _get_parents_b (edges , parent_ts , layer , fallback : bool = False ):
436434 """
@@ -451,7 +449,7 @@ def _get_parents_b(edges, parent_ts, layer, fallback: bool = False):
451449 _parents_b_missed = np .unique (cg .get_parents (missing , time_stamp = parent_ts ))
452450 parents_b = np .concatenate ([_parents_b , _parents_b_missed ])
453451
454- parents_a = edges [:, 0 ]
452+ parents_a = np . unique ( edges [:, 0 ])
455453 stale_a = get_stale_nodes (cg , parents_a , parent_ts = parent_ts )
456454 if stale_a .size == parents_a .size or fallback :
457455 # this is applicable only for v2 to v3 migration
@@ -510,6 +508,18 @@ def _get_cx_edges(l2ids_a, max_node_ts, raw_only: bool = True):
510508 _edges .append (v [edge_layer ])
511509 return np .concatenate (_edges )
512510
511+ def _get_dilated_edges (edges ):
512+ layers_b = cg .get_chunk_layers (edges [:, 1 ])
513+ _mask = layers_b == 2
514+ _l2_edges = [edges [_mask ]]
515+ for _edge in edges [~ _mask ]:
516+ _node_a , _node_b = _edge
517+ _nodes_b = cg .get_l2children ([_node_b ])
518+ _l2_edges .append (
519+ np .array ([[_node_a , _b ] for _b in _nodes_b ], dtype = basetypes .NODE_ID )
520+ )
521+ return np .unique (np .concatenate (_l2_edges ), axis = 0 )
522+
513523 def _get_new_edge (edge , edge_layer , parent_ts , padding , fallback : bool = False ):
514524 """
515525 Attempts to find new edge(s) for the stale `edge`.
@@ -534,16 +544,22 @@ def _get_new_edge(edge, edge_layer, parent_ts, padding, fallback: bool = False):
534544 if np .any (mask ):
535545 parents_b = _get_parents_b (_edges [mask ], parent_ts , edge_layer )
536546 else :
537- # if none of `l2ids_b` were found in edges, `l2ids_a` already have new edges
538- # so get the new identities of `l2ids_b` by using chunk mask
539- try :
540- parents_b = _get_parents_b_with_chunk_mask (
541- l2ids_b , _edges [:, 1 ], max_node_ts , edge
542- )
543- except AssertionError :
544- parents_b = []
545- if fallback :
546- parents_b = _get_parents_b (_edges , parent_ts , edge_layer , True )
547+ # partner edges likely lifted, dilate and retry
548+ _edges = _get_dilated_edges (_edges )
549+ mask = np .isin (_edges [:, 1 ], l2ids_b )
550+ if np .any (mask ):
551+ parents_b = _get_parents_b (_edges [mask ], parent_ts , edge_layer )
552+ else :
553+ # if none of `l2ids_b` were found in edges, `l2ids_a` already have new edges
554+ # so get the new identities of `l2ids_b` by using chunk mask
555+ try :
556+ parents_b = _get_parents_b_with_chunk_mask (
557+ l2ids_b , _edges [:, 1 ], max_node_ts , edge
558+ )
559+ except AssertionError :
560+ parents_b = []
561+ if fallback :
562+ parents_b = _get_parents_b (_edges , parent_ts , edge_layer , True )
547563
548564 parents_b = np .unique (
549565 cg .get_roots (parents_b , stop_layer = mlayer , ceil = False , time_stamp = parent_ts )
0 commit comments