|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""Algorithm specs. |
|
|
|
The "spec" of each algorithm is a static set of `(stage, loc, type)`-tuples. |
|
|
|
- `stage`: One of either an `input`, `output` or `hint` |
|
- `location`: Each datum is associated with either the `node`, `edge` or `graph` |
|
- `type`: Either a `scalar`, `categorical`, `mask`, `mask_one` or `pointer` |
|
|
|
The dataflow for an algorithm is represented by `(stage, loc, type, data)` |
|
"probes" that are valid under that algorithm's spec. It contains a single |
|
snapshot for each `input` and `output` and a time-series of intermediate |
|
algorithmic states (`hint`). |
|
|
|
At minimum, each node contains a `pos` probe that serves as a unique index e.g. |
|
for representing sequential data where appropriate |
|
""" |
|
|
|
import types |
|
from typing import Dict, Tuple |
|
|
|
|
|
class Stage: |
|
INPUT = 'input' |
|
OUTPUT = 'output' |
|
HINT = 'hint' |
|
|
|
|
|
class Location: |
|
NODE = 'node' |
|
EDGE = 'edge' |
|
GRAPH = 'graph' |
|
|
|
|
|
class Type: |
|
SCALAR = 'scalar' |
|
CATEGORICAL = 'categorical' |
|
MASK = 'mask' |
|
MASK_ONE = 'mask_one' |
|
POINTER = 'pointer' |
|
SHOULD_BE_PERMUTATION = 'should_be_permutation' |
|
PERMUTATION_POINTER = 'permutation_pointer' |
|
SOFT_POINTER = 'soft_pointer' |
|
|
|
|
|
class OutputClass: |
|
POSITIVE = 1 |
|
NEGATIVE = 0 |
|
MASKED = -1 |
|
|
|
Spec = Dict[str, Tuple[str, str, str]] |
|
|
|
CLRS_30_ALGS = [ |
|
'articulation_points', |
|
'activity_selector', |
|
'bellman_ford', |
|
'bfs', |
|
'binary_search', |
|
'bridges', |
|
'bubble_sort', |
|
'dag_shortest_paths', |
|
'dfs', |
|
'dijkstra', |
|
'find_maximum_subarray_kadane', |
|
'floyd_warshall', |
|
'graham_scan', |
|
'heapsort', |
|
'insertion_sort', |
|
'jarvis_march', |
|
'kmp_matcher', |
|
'lcs_length', |
|
'matrix_chain_order', |
|
'minimum', |
|
'mst_kruskal', |
|
'mst_prim', |
|
'naive_string_matcher', |
|
'optimal_bst', |
|
'quickselect', |
|
'quicksort', |
|
'segments_intersect', |
|
'strongly_connected_components', |
|
'task_scheduling', |
|
'topological_sort', |
|
] |
|
|
|
|
|
ALGO_IDX_INPUT_NAME = 'algo_idx' |
|
|
|
|
|
|
|
|
|
CLRS_30_ALGS_SETTINGS = {alg: {'num_samples_multiplier': 1} |
|
for alg in CLRS_30_ALGS} |
|
CLRS_30_ALGS_SETTINGS['find_maximum_subarray_kadane'][ |
|
'num_samples_multiplier'] = 32 |
|
for alg in ['quickselect', 'minimum', 'binary_search', 'naive_string_matcher', |
|
'kmp_matcher', 'segments_intersect']: |
|
CLRS_30_ALGS_SETTINGS[alg]['num_samples_multiplier'] = 64 |
|
|
|
|
|
SPECS = types.MappingProxyType({ |
|
'insertion_sort': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'pred': (Stage.OUTPUT, Location.NODE, Type.SHOULD_BE_PERMUTATION), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'bubble_sort': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'pred': (Stage.OUTPUT, Location.NODE, Type.SHOULD_BE_PERMUTATION), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'heapsort': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'pred': (Stage.OUTPUT, Location.NODE, Type.SHOULD_BE_PERMUTATION), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'parent': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'largest': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'heap_size': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.CATEGORICAL) |
|
}, |
|
'quicksort': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'pred': (Stage.OUTPUT, Location.NODE, Type.SHOULD_BE_PERMUTATION), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'p': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'r': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'quickselect': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'median': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'p': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'r': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i_rank': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'target': (Stage.HINT, Location.GRAPH, Type.SCALAR) |
|
}, |
|
'minimum': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'min': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'min_h': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'binary_search': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'target': (Stage.INPUT, Location.GRAPH, Type.SCALAR), |
|
'return': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'low': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'high': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'mid': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'find_maximum_subarray': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'start': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'end': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'low': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'high': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'mid': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'left_low': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'left_high': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'left_sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'right_low': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'right_high': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'right_sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'cross_low': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'cross_high': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'cross_sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'ret_low': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'ret_high': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'ret_sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'left_x_sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'right_x_sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.CATEGORICAL) |
|
}, |
|
'find_maximum_subarray_kadane': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'start': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'end': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'best_low': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'best_high': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'best_sum': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'sum': (Stage.HINT, Location.GRAPH, Type.SCALAR) |
|
}, |
|
'matrix_chain_order': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'p': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
's': (Stage.OUTPUT, Location.EDGE, Type.POINTER), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'm': (Stage.HINT, Location.EDGE, Type.SCALAR), |
|
's_h': (Stage.HINT, Location.EDGE, Type.POINTER), |
|
'msk': (Stage.HINT, Location.EDGE, Type.MASK) |
|
}, |
|
'lcs_length': { |
|
'string': (Stage.INPUT, Location.NODE, Type.MASK), |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.CATEGORICAL), |
|
'b': (Stage.OUTPUT, Location.EDGE, Type.CATEGORICAL), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'b_h': (Stage.HINT, Location.EDGE, Type.CATEGORICAL), |
|
'c': (Stage.HINT, Location.EDGE, Type.SCALAR) |
|
}, |
|
'optimal_bst': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'p': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'q': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'root': (Stage.OUTPUT, Location.EDGE, Type.POINTER), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'root_h': (Stage.HINT, Location.EDGE, Type.POINTER), |
|
'e': (Stage.HINT, Location.EDGE, Type.SCALAR), |
|
'w': (Stage.HINT, Location.EDGE, Type.SCALAR), |
|
'msk': (Stage.HINT, Location.EDGE, Type.MASK) |
|
}, |
|
'activity_selector': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
's': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'f': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'selected': (Stage.OUTPUT, Location.NODE, Type.MASK), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'selected_h': (Stage.HINT, Location.NODE, Type.MASK), |
|
'm': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'k': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'task_scheduling': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'd': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'w': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'selected': (Stage.OUTPUT, Location.NODE, Type.MASK), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'selected_h': (Stage.HINT, Location.NODE, Type.MASK), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
't': (Stage.HINT, Location.GRAPH, Type.SCALAR) |
|
}, |
|
'dfs': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'pi': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'color': (Stage.HINT, Location.NODE, Type.CATEGORICAL), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'f': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
's_prev': (Stage.HINT, Location.NODE, Type.POINTER), |
|
's': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
's_last': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'time': (Stage.HINT, Location.GRAPH, Type.SCALAR) |
|
}, |
|
'topological_sort': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'topo': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'topo_head': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'topo_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'topo_head_h': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'color': (Stage.HINT, Location.NODE, Type.CATEGORICAL), |
|
's_prev': (Stage.HINT, Location.NODE, Type.POINTER), |
|
's': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
's_last': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'strongly_connected_components': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'scc_id': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'scc_id_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'A_t': (Stage.HINT, Location.EDGE, Type.MASK), |
|
'color': (Stage.HINT, Location.NODE, Type.CATEGORICAL), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'f': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
's_prev': (Stage.HINT, Location.NODE, Type.POINTER), |
|
's': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
's_last': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'time': (Stage.HINT, Location.GRAPH, Type.SCALAR), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.MASK) |
|
}, |
|
'articulation_points': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'is_cut': (Stage.OUTPUT, Location.NODE, Type.MASK), |
|
'is_cut_h': (Stage.HINT, Location.NODE, Type.MASK), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'color': (Stage.HINT, Location.NODE, Type.CATEGORICAL), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'f': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'low': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'child_cnt': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
's_prev': (Stage.HINT, Location.NODE, Type.POINTER), |
|
's': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
's_last': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'time': (Stage.HINT, Location.GRAPH, Type.SCALAR) |
|
}, |
|
'bridges': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'is_bridge': (Stage.OUTPUT, Location.EDGE, Type.MASK), |
|
'is_bridge_h': (Stage.HINT, Location.EDGE, Type.MASK), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'color': (Stage.HINT, Location.NODE, Type.CATEGORICAL), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'f': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'low': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
's_prev': (Stage.HINT, Location.NODE, Type.POINTER), |
|
's': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
's_last': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'time': (Stage.HINT, Location.GRAPH, Type.SCALAR) |
|
}, |
|
'bfs': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
's': (Stage.INPUT, Location.NODE, Type.MASK_ONE), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'pi': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'reach_h': (Stage.HINT, Location.NODE, Type.MASK), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER) |
|
}, |
|
'mst_kruskal': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'in_mst': (Stage.OUTPUT, Location.EDGE, Type.MASK), |
|
'in_mst_h': (Stage.HINT, Location.EDGE, Type.MASK), |
|
'pi': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'root_u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'root_v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'mask_u': (Stage.HINT, Location.NODE, Type.MASK), |
|
'mask_v': (Stage.HINT, Location.NODE, Type.MASK), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.CATEGORICAL) |
|
}, |
|
'mst_prim': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
's': (Stage.INPUT, Location.NODE, Type.MASK_ONE), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'pi': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'key': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'mark': (Stage.HINT, Location.NODE, Type.MASK), |
|
'in_queue': (Stage.HINT, Location.NODE, Type.MASK), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'bellman_ford': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
's': (Stage.INPUT, Location.NODE, Type.MASK_ONE), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'pi': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'msk': (Stage.HINT, Location.NODE, Type.MASK) |
|
}, |
|
'dag_shortest_paths': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
's': (Stage.INPUT, Location.NODE, Type.MASK_ONE), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'pi': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'mark': (Stage.HINT, Location.NODE, Type.MASK), |
|
'topo_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'topo_head_h': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'color': (Stage.HINT, Location.NODE, Type.CATEGORICAL), |
|
's_prev': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'v': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
's_last': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.MASK) |
|
}, |
|
'dijkstra': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
's': (Stage.INPUT, Location.NODE, Type.MASK_ONE), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'pi': (Stage.OUTPUT, Location.NODE, Type.POINTER), |
|
'pi_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'mark': (Stage.HINT, Location.NODE, Type.MASK), |
|
'in_queue': (Stage.HINT, Location.NODE, Type.MASK), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'floyd_warshall': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
'Pi': (Stage.OUTPUT, Location.EDGE, Type.POINTER), |
|
'Pi_h': (Stage.HINT, Location.EDGE, Type.POINTER), |
|
'D': (Stage.HINT, Location.EDGE, Type.SCALAR), |
|
'msk': (Stage.HINT, Location.EDGE, Type.MASK), |
|
'k': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'bipartite_matching': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'A': (Stage.INPUT, Location.EDGE, Type.SCALAR), |
|
'adj': (Stage.INPUT, Location.EDGE, Type.MASK), |
|
's': (Stage.INPUT, Location.NODE, Type.MASK_ONE), |
|
't': (Stage.INPUT, Location.NODE, Type.MASK_ONE), |
|
'in_matching': (Stage.OUTPUT, Location.EDGE, Type.MASK), |
|
'in_matching_h': (Stage.HINT, Location.EDGE, Type.MASK), |
|
'A_h': (Stage.HINT, Location.EDGE, Type.SCALAR), |
|
'adj_h': (Stage.HINT, Location.EDGE, Type.MASK), |
|
'd': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'msk': (Stage.HINT, Location.NODE, Type.MASK), |
|
'pi': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'u': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.MASK) |
|
}, |
|
'naive_string_matcher': { |
|
'string': (Stage.INPUT, Location.NODE, Type.MASK), |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.CATEGORICAL), |
|
'match': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
's': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE) |
|
}, |
|
'kmp_matcher': { |
|
'string': (Stage.INPUT, Location.NODE, Type.MASK), |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'key': (Stage.INPUT, Location.NODE, Type.CATEGORICAL), |
|
'match': (Stage.OUTPUT, Location.NODE, Type.MASK_ONE), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'pi': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'is_reset': (Stage.HINT, Location.NODE, Type.MASK), |
|
'k': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'k_reset': (Stage.HINT, Location.GRAPH, Type.MASK), |
|
'q': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'q_reset': (Stage.HINT, Location.GRAPH, Type.MASK), |
|
's': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.MASK) |
|
}, |
|
'segments_intersect': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'x': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'y': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'intersect': (Stage.OUTPUT, Location.GRAPH, Type.MASK), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'j': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'k': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'dir': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'on_seg': (Stage.HINT, Location.NODE, Type.MASK) |
|
}, |
|
'graham_scan': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'x': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'y': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'in_hull': (Stage.OUTPUT, Location.NODE, Type.MASK), |
|
'best': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'atans': (Stage.HINT, Location.NODE, Type.SCALAR), |
|
'in_hull_h': (Stage.HINT, Location.NODE, Type.MASK), |
|
'stack_prev': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'last_stack': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.CATEGORICAL) |
|
}, |
|
'jarvis_march': { |
|
'pos': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'x': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'y': (Stage.INPUT, Location.NODE, Type.SCALAR), |
|
'in_hull': (Stage.OUTPUT, Location.NODE, Type.MASK), |
|
'pred_h': (Stage.HINT, Location.NODE, Type.POINTER), |
|
'in_hull_h': (Stage.HINT, Location.NODE, Type.MASK), |
|
'best': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'last_point': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'endpoint': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'i': (Stage.HINT, Location.NODE, Type.MASK_ONE), |
|
'phase': (Stage.HINT, Location.GRAPH, Type.CATEGORICAL) |
|
} |
|
}) |
|
|