pyk.kcfg.kcfg module
- final class Abstract(cterm: 'CTerm')[source]
Bases:
KCFGExtendResult
- final class Branch(constraints: 'Iterable[KInner]', *, heuristic: 'bool' = False, info: 'str' = '')[source]
Bases:
KCFGExtendResult
- heuristic: bool
- info: str = ''
- class KCFG(cfg_dir: Path | None = None, optimize_memory: bool = True)[source]
Bases:
Container
[KCFG.Node
|KCFG.Successor
]- final class Cover(source: 'KCFG.Node', target: 'KCFG.Node', csubst: 'CSubst')[source]
Bases:
EdgeLike
- static from_dict(dct: dict[str, Any], nodes: Mapping[int, KCFG.Node]) KCFG.Cover [source]
- final class Edge(source: 'KCFG.Node', target: 'KCFG.Node', depth: 'int', rules: 'tuple[str, ...]')[source]
Bases:
EdgeLike
- depth: int
- rules: tuple[str, ...]
- to_rule(label: str, claim: bool = False, priority: int | None = None, defunc_with: KDefinition | None = None, minimize: bool = False) KRuleLike [source]
- final class MergedEdge(source: Node, target: Node, edges: tuple[Edge, ...])[source]
Bases:
EdgeLike
Merged edge is a collection of edges that have been merged into a single edge.
- static from_dict(dct: dict[str, Any], nodes: Mapping[int, KCFG.Node]) KCFG.Successor [source]
- final class NDBranch(source: 'KCFG.Node', _targets: 'Iterable[KCFG.Node]', rules: 'tuple[str, ...]')[source]
Bases:
MultiEdge
- static from_dict(dct: dict[str, Any], nodes: Mapping[int, KCFG.Node]) KCFG.NDBranch [source]
- rules: tuple[str, ...]
- final class Node(id: 'int', cterm: 'CTerm', attrs: 'Iterable[NodeAttr]' = ())[source]
Bases:
object
- property free_vars: frozenset[str]
- id: int
- let(cterm: CTerm | None = None, attrs: Iterable[KCFGNodeAttr] | None = None) KCFG.Node [source]
- final class Split(source: 'KCFG.Node', _targets: 'Iterable[tuple[KCFG.Node, CSubst]]')[source]
Bases:
MultiEdge
- static from_dict(dct: dict[str, Any], nodes: Mapping[int, KCFG.Node]) KCFG.Split [source]
- class Successor[source]
Bases:
ABC
- abstract static from_dict(dct: dict[str, Any], nodes: Mapping[int, KCFG.Node]) KCFG.Successor [source]
- property source_vars: frozenset[str]
- property target_ids: list[int]
- property target_vars: frozenset[str]
- contains_merged_edge(edge: MergedEdge) bool [source]
- covers(*, source_id: NodeIdLike | None = None, target_id: NodeIdLike | None = None) list[Cover] [source]
- create_cover(source_id: NodeIdLike, target_id: NodeIdLike, csubst: CSubst | None = None) Cover [source]
- create_edge(source_id: NodeIdLike, target_id: NodeIdLike, depth: int, rules: Iterable[str] = ()) Edge [source]
- create_merged_edge(source_id: NodeIdLike, target_id: NodeIdLike, edges: Iterable[Edge | MergedEdge]) MergedEdge [source]
- create_ndbranch(source_id: NodeIdLike, ndbranches: Iterable[NodeIdLike], rules: Iterable[str] = ()) KCFG.NDBranch [source]
- create_split(source_id: NodeIdLike, splits: Iterable[tuple[NodeIdLike, CSubst]]) KCFG.Split [source]
- create_split_by_nodes(source_id: NodeIdLike, target_ids: Iterable[NodeIdLike]) KCFG.Split | None [source]
Create a split without crafting a CSubst.
- edge_likes(*, source_id: NodeIdLike | None = None, target_id: NodeIdLike | None = None) list[EdgeLike] [source]
- edges(*, source_id: NodeIdLike | None = None, target_id: NodeIdLike | None = None) list[Edge] [source]
- extend(extend_result: KCFGExtendResult, node: KCFG.Node, logs: dict[int, tuple[LogEntry, ...]], *, optimize_kcfg: bool) None [source]
- static from_claim(defn: KDefinition, claim: KClaim, cfg_dir: Path | None = None, optimize_memory: bool = True) tuple[KCFG, NodeIdLike, NodeIdLike] [source]
- general_edges(*, source_id: NodeIdLike | None = None, target_id: NodeIdLike | None = None) list[Edge | MergedEdge] [source]
- let_node(node_id: NodeIdLike, cterm: CTerm | None = None, attrs: Iterable[KCFGNodeAttr] | None = None) None [source]
- merged_edge(source_id: NodeIdLike, target_id: NodeIdLike) MergedEdge | None [source]
- merged_edges(*, source_id: NodeIdLike | None = None, target_id: NodeIdLike | None = None) list[MergedEdge] [source]
- ndbranches(*, source_id: int | str | None = None, target_id: int | str | None = None) list[NDBranch] [source]
- static path_length(_path: Iterable[KCFG.Successor]) int [source]
- shortest_path_between(source_node_id: NodeIdLike, target_node_id: NodeIdLike) tuple[Successor, ...] | None [source]
- splits(*, source_id: NodeIdLike | None = None, target_id: NodeIdLike | None = None) list[Split] [source]
- to_module(module_name: str | None = None, imports: Iterable[KImport] = (), priority: int = 20, att: KAtt = KAtt(atts=FrozenDict({}))) KFlatModule [source]
- class KCFGNodeAttr(value: str)[source]
Bases:
NodeAttr
- STUCK = NodeAttr(value='stuck')
- VACUOUS = NodeAttr(value='vacuous')
- class KCFGStore(store_path: Path)[source]
Bases:
object
- property kcfg_json_path: Path
- property kcfg_node_dir: Path
- store_path: Path
- final class NDBranch(cterms: 'Iterable[CTerm]', logs: 'Iterable[LogEntry,]', rule_labels: 'Iterable[str]')[source]
Bases:
KCFGExtendResult
- rule_labels: tuple[str, ...]
- final class Step(cterm: 'CTerm', depth: 'int', logs: 'tuple[LogEntry, ...]', rule_labels: 'list[str]', cut: 'bool' = False, info: 'str' = '')[source]
Bases:
KCFGExtendResult
- cut: bool = False
- depth: int
- info: str = ''
- rule_labels: list[str]
- final class Stuck[source]
Bases:
KCFGExtendResult
- final class Vacuous[source]
Bases:
KCFGExtendResult