MCPcopy Index your code
hub / github.com/DeepLabCut/DeepLabCut / _fill_assembly

Method _fill_assembly

deeplabcut/core/inferenceutils.py:490–539  ·  view source on GitHub ↗
(self, assembly, lookup, assembled, safe_edge, nan_policy)

Source from the content-addressed store, hash-verified

488 return links
489
490 def _fill_assembly(self, assembly, lookup, assembled, safe_edge, nan_policy):
491 stack = []
492 visited = set()
493 tabu = []
494 counter = itertools.count()
495
496 def push_to_stack(i):
497 for j, link in lookup[i].items():
498 if j in assembly._idx:
499 continue
500 if link.idx in visited:
501 continue
502 heapq.heappush(stack, (-link.affinity, next(counter), link))
503 visited.add(link.idx)
504
505 for idx in assembly._idx:
506 push_to_stack(idx)
507
508 while stack and len(assembly) < self.n_multibodyparts:
509 _, _, best = heapq.heappop(stack)
510 i, j = best.idx
511 if i in assembly._idx:
512 new_ind = j
513 elif j in assembly._idx:
514 new_ind = i
515 else:
516 continue
517 if new_ind in assembled:
518 continue
519 if safe_edge:
520 d_old = self.calc_assembly_mahalanobis_dist(assembly, nan_policy=nan_policy)
521 success = assembly.add_link(best, store_dict=True)
522 if not success:
523 assembly._dict = dict()
524 continue
525 d = self.calc_assembly_mahalanobis_dist(assembly, nan_policy=nan_policy)
526 if d < d_old:
527 push_to_stack(new_ind)
528 try:
529 _, _, link = heapq.heappop(tabu)
530 heapq.heappush(stack, (-link.affinity, next(counter), link))
531 except IndexError:
532 pass
533 else:
534 heapq.heappush(tabu, (d - d_old, next(counter), best))
535 assembly.__dict__.update(assembly._dict)
536 assembly._dict = dict()
537 else:
538 assembly.add_link(best)
539 push_to_stack(new_ind)
540
541 def build_assemblies(self, links):
542 lookup = defaultdict(dict)

Callers 1

build_assembliesMethod · 0.95

Calls 3

add_linkMethod · 0.80
updateMethod · 0.45

Tested by

no test coverage detected