def push_edge_stmt(str, loc, toks): tok_attrs = [a for a in toks if isinstance(a, P_AttrList)] attrs = {} for a in tok_attrs: attrs.update(a.attrs) e = [] if isinstance(toks[0][0], pydot.Graph): n_prev = pydot.frozendict(toks[0][0].obj_dict) else: n_prev = toks[0][0] + do_node_ports(toks[0]) if isinstance(toks[2][0], ParseResults): n_next_list = [[ n.get_name(), ] for n in toks[2][0]] for n_next in [n for n in n_next_list]: n_next_port = do_node_ports(n_next) e.append(pydot.Edge(n_prev, n_next[0] + n_next_port, **attrs)) elif isinstance(toks[2][0], pydot.Graph): e.append( pydot.Edge(n_prev, pydot.frozendict(toks[2][0].obj_dict), **attrs)) elif isinstance(toks[2][0], pydot.Node): node = toks[2][0] if node.get_port() is not None: name_port = node.get_name() + ":" + node.get_port() else: name_port = node.get_name() e.append(pydot.Edge(n_prev, name_port, **attrs)) elif isinstance(toks[2][0], type('')): for n_next in [n for n in tuple(toks)[2::2]]: if isinstance(n_next, P_AttrList) or not isinstance(n_next[0], type('')): continue n_next_port = do_node_ports(n_next) e.append(pydot.Edge(n_prev, n_next[0] + n_next_port, **attrs)) n_prev = n_next[0] + n_next_port else: # UNEXPECTED EDGE TYPE pass return e
def push_edge_stmt(str, loc, toks): tok_attrs = [a for a in toks if isinstance(a, P_AttrList)] attrs = {} for a in tok_attrs: attrs.update(a.attrs) e = [] if isinstance(toks[0][0], pydot.Graph): n_prev = pydot.frozendict(toks[0][0].obj_dict) else: n_prev = toks[0][0] + do_node_ports(toks[0]) if isinstance(toks[2][0], ParseResults): n_next_list = [[ n.get_name(), ] for n in toks[2][0]] for n_next in [n for n in n_next_list]: n_next_port = do_node_ports(n_next) e.append(pydot.Edge(n_prev, n_next[0] + n_next_port, **attrs)) elif isinstance(toks[2][0], pydot.Graph): e.append( pydot.Edge(n_prev, pydot.frozendict(toks[2][0].obj_dict), **attrs)) elif isinstance(toks[2][0], pydot.Node): node = toks[2][0] if node.get_port() is not None: name_port = node.get_name() + ":" + node.get_port() else: name_port = node.get_name() e.append(pydot.Edge(n_prev, name_port, **attrs)) # if the target of this edge is the name of a node elif isinstance(toks[2][0], str_type): for n_next in [n for n in tuple(toks)[2::2]]: if (isinstance(n_next, P_AttrList) or not isinstance(n_next[0], str_type)): continue n_next_port = do_node_ports(n_next) e.append(pydot.Edge(n_prev, n_next[0] + n_next_port, **attrs)) n_prev = n_next[0] + n_next_port else: raise Exception('Edge target {r} with type {s} unsupported.'.format( r=toks[2][0], s=type(toks[2][0]))) return e
def push_edge_stmt(str, loc, toks): tok_attrs = [a for a in toks if isinstance(a, P_AttrList)] attrs = {} for a in tok_attrs: attrs.update(a.attrs) e = [] if isinstance(toks[0][0], pydot.Graph): n_prev = pydot.frozendict(toks[0][0].obj_dict) else: n_prev = toks[0][0] + do_node_ports( toks[0] ) if isinstance(toks[2][0], ParseResults): n_next_list = [[n.get_name(),] for n in toks[2][0] ] for n_next in [n for n in n_next_list]: n_next_port = do_node_ports(n_next) e.append(pydot.Edge(n_prev, n_next[0]+n_next_port, **attrs)) elif isinstance(toks[2][0], pydot.Graph): e.append(pydot.Edge(n_prev, pydot.frozendict(toks[2][0].obj_dict), **attrs)) elif isinstance(toks[2][0], pydot.Node): node = toks[2][0] if node.get_port() is not None: name_port = node.get_name() + ":" + node.get_port() else: name_port = node.get_name() e.append(pydot.Edge(n_prev, name_port, **attrs)) # if the target of this edge is the name of a node elif isinstance(toks[2][0], str_type): for n_next in [n for n in tuple(toks)[2::2]]: if (isinstance(n_next, P_AttrList) or not isinstance(n_next[0], str_type)): continue n_next_port = do_node_ports( n_next ) e.append(pydot.Edge(n_prev, n_next[0]+n_next_port, **attrs)) n_prev = n_next[0]+n_next_port else: raise Exception( 'Edge target {r} with type {s} unsupported.'.format( r=toks[2][0], s=type(toks[2][0]))) return e
def push_edge_stmt(str, loc, toks): tok_attrs = [a for a in toks if isinstance(a, P_AttrList)] attrs = {} for a in tok_attrs: attrs.update(a.attrs) e = [] if isinstance(toks[0][0], pydot.Graph): n_prev = pydot.frozendict(toks[0][0].obj_dict) else: n_prev = toks[0][0] + do_node_ports( toks[0] ) if isinstance(toks[2][0], ParseResults): n_next_list = [[n.get_name(),] for n in toks[2][0] ] for n_next in [n for n in n_next_list]: n_next_port = do_node_ports(n_next) e.append(pydot.Edge(n_prev, n_next[0]+n_next_port, **attrs)) elif isinstance(toks[2][0], pydot.Graph): e.append(pydot.Edge(n_prev, pydot.frozendict(toks[2][0].obj_dict), **attrs)) elif isinstance(toks[2][0], pydot.Node): node = toks[2][0] if node.get_port() is not None: name_port = node.get_name() + ":" + node.get_port() else: name_port = node.get_name() e.append(pydot.Edge(n_prev, name_port, **attrs)) elif isinstance(toks[2][0], type('')): for n_next in [n for n in tuple(toks)[2::2]]: if (isinstance(n_next, P_AttrList) or not isinstance(n_next[0], type(''))): continue n_next_port = do_node_ports( n_next ) e.append(pydot.Edge(n_prev, n_next[0]+n_next_port, **attrs)) n_prev = n_next[0]+n_next_port else: # UNEXPECTED EDGE TYPE pass return e
def de_duplicated_releases( incarceration_periods: List[StateIncarcerationPeriod] ) -> List[StateIncarcerationPeriod]: """Returns a list of incarceration periods that are de-duplicated for any incarceration periods that share state_code, release_date, release_reason, and facility.""" unique_release_dicts: Set[Dict[str, Any]] = set() unique_incarceration_releases: List[StateIncarcerationPeriod] = [] for incarceration_period in incarceration_periods: release_dict = frozendict({ 'state_code': incarceration_period.state_code, 'release_date': incarceration_period.release_date, 'release_reason': incarceration_period.release_reason, 'facility': incarceration_period.facility }) if release_dict not in unique_release_dicts: unique_incarceration_releases.append(incarceration_period) unique_release_dicts.add(release_dict) return unique_incarceration_releases
def de_duplicated_admissions( incarceration_periods: List[StateIncarcerationPeriod], ) -> List[StateIncarcerationPeriod]: """Returns a list of incarceration periods that are de-duplicated for any incarceration periods that share state_code, admission_date, admission_reason, and facility.""" unique_admission_dicts: Set[Dict[str, Any]] = set() unique_incarceration_admissions: List[StateIncarcerationPeriod] = [] for incarceration_period in incarceration_periods: admission_dict = frozendict({ "state_code": incarceration_period.state_code, "admission_date": incarceration_period.admission_date, "admission_reason": incarceration_period.admission_reason, "facility": incarceration_period.facility, }) if admission_dict not in unique_admission_dicts: unique_incarceration_admissions.append(incarceration_period) unique_admission_dicts.add(admission_dict) return unique_incarceration_admissions
def get_child_partitions(self): return frozendict(self._child_partitions)