# Implementation of module {move_hp} # Last edited on 2021-05-22 10:28:21 by jstolfi import move_hp import move import move_parms import path import block import hacks import rn from math import nan, inf, sqrt import sys # STATIC HOTPATH-RELATED ATTRIBUTES def preprocess_input_data(BCS): assert type(BCS) is tuple or type(BCS) is list # Set fields {.hp_paths} for all moves that appear in {BCS}, as list. MVS = set() # Set of {Move} objects seen. for bc in BCS: assert isinstance(bc, block.Block) for ich in range(block.nchoices(bc)): oph = block.choice(bc, ich) for imv in range(path.nelems(oph)): omv = path.elem(oph, imv) mv, dr = move.unpack(omv) # Get the {Move} object. if not move.is_jump(mv): if mv.hp_paths == None: mv.hp_paths = [] mv.hp_paths.append((oph, imv)) MVS.add(mv) # Convert all lists to tuples: for mv in MVS: mv.hp_paths = tuple(mv.hp_paths) return # ---------------------------------------------------------------------- def input_paths(omv): # Assumes that the field {mv.hp_paths} has been set for every trace # object {mv} of the input dataset. mv, dr = move.unpack(omv) if move.is_jump(mv): L = None else: L = mv.hp_paths return L # ---------------------------------------------------------------------- def clear_input_data(BCS): assert type(BCS) is tuple or type(BCS) is list # Set fields {.hp_paths} for all moves that appear in {BCS. for bc in BCS: assert isinstance(bc, block.Block) for ich in range(block.nchoices(bc)): oph = block.choice(bc, ich) for imv in range(path.nelems(oph)): omv = path.elem(oph, imv) mv, dr = move.unpack(omv) # Get the {Move} object. mv.hp_paths = None return # ---------------------------------------------------------------------- # DYNAMIC HOTPATH-RELATED ATTRIBUTES def initialize_state(BCS): # Nothing to do: return # ----------------------------------------------------------------------