Source code for pyreason.scripts.utils.reorder_clauses

import numba
import pyreason.scripts.numba_wrapper.numba_types.label_type as label
import pyreason.scripts.numba_wrapper.numba_types.interval_type as interval


[docs] def reorder_clauses(rule): # Go through all clauses in the rule and re-order them if necessary # It is faster for grounding to have node clauses first and then edge clauses # Move all the node clauses to the front of the list reordered_clauses = numba.typed.List.empty_list(numba.types.Tuple((numba.types.string, label.label_type, numba.types.ListType(numba.types.string), interval.interval_type, numba.types.string))) reordered_thresholds = numba.typed.List.empty_list(numba.types.Tuple((numba.types.string, numba.types.UniTuple(numba.types.string, 2), numba.types.float64))) node_clauses = [] edge_clauses = [] reordered_clauses_map = {} for index, clause in enumerate(rule.get_clauses()): if clause[0] == 'node': node_clauses.append((index, clause)) else: edge_clauses.append((index, clause)) thresholds = rule.get_thresholds() for new_index, (original_index, clause) in enumerate(node_clauses + edge_clauses): reordered_clauses.append(clause) reordered_thresholds.append(thresholds[original_index]) reordered_clauses_map[new_index] = original_index rule.set_clauses(reordered_clauses) rule.set_thresholds(reordered_thresholds) return rule, reordered_clauses_map