def current_failure_contributors(binding): # Alternatively, find unsuccessful streams in cluster and add ancestors assert (1 <= binding.visits) or binding.is_dominated() failed_result = binding.skeleton.stream_plan[binding.index] failed_indices = compute_failed_indices( binding.skeleton) # Use last index? partial_orders = get_partial_orders(binding.skeleton.stream_plan) incoming = incoming_from_edges(partial_orders) failed_ancestors = grow_component([failed_result], incoming) for index in reversed(failed_indices): if index == binding.index: continue result = binding.skeleton.stream_plan[index] ancestors = grow_component([result], incoming) if ancestors & failed_ancestors: failed_ancestors.update(ancestors) return [failed_ancestors]
def current_failed_cluster(binding): assert 1 <= binding.visits failed_result = binding.skeleton.stream_plan[binding.index] successful_results = [ result for i, result in enumerate(binding.skeleton.stream_plan) if i not in binding.stream_indices ] stream_plan = successful_results + [failed_result] partial_orders = get_partial_orders(stream_plan) # All connected components #return get_connected_components(stream_plan, partial_orders) # Only the failed connected component return [ grow_component([failed_result], adjacent_from_edges(partial_orders)) ]