Graph#
Graph representations, canonicalization, ITS utilities, matching engines, MTG tools, and wildcard-aware graph workflows.
Core#
- class synkit.Graph.syn_graph.SynGraph(graph: Graph, canonicaliser: GraphCanonicaliser | None = None, canon: bool = True)[source]#
Bases:
object
- class synkit.Graph.canon_graph.CanonicalGraph(g: Graph, canon: GraphCanonicaliser)[source]#
Bases:
object
- class synkit.Graph.canon_graph.CanonicalRule(rule: str, canon: GraphCanonicaliser = <GraphCanonicaliser backend='generic' node_key=_default_node_key edge_key=_default_edge_key>)[source]#
Bases:
object
- class synkit.Graph.canon_graph.GraphCanonicaliser(*, backend: ~typing.Literal['generic', 'wl', 'morgan', 'nauty'] = 'generic', wl_iterations: int = 3, morgan_radius: int = 3, node_attrs: ~typing.List[str] = ['element', 'aromatic', 'charge', 'lone_pairs', 'radical', 'hcount'], node_sort_key: ~typing.Callable[[~typing.Hashable, ~typing.Dict[str, ~typing.Any]], ~typing.Tuple[~typing.Any, ...]] = <function _default_node_key>, edge_sort_key: ~typing.Callable[[~typing.Hashable, ~typing.Hashable, ~typing.Dict[str, ~typing.Any]], ~typing.Tuple[~typing.Any, ...]] = <function _default_edge_key>)[source]#
Bases:
object- canonicalise_graph(graph: Graph) CanonicalGraph[source]#
- synkit.Graph.utils.add_wildcard_subgraph_for_unmapped(G: Graph, L: Graph, mapping: Dict[Any, Any], edge_keys: List[str] = ['order'], inplace: bool = False, tuple_mode: bool = False) Tuple[Graph, Dict[Any, Any]][source]#
Canonicalization#
- synkit.Graph.Canon.canon_algs.canon_morgan(g: Graph, morgan_radius: int = 2, node_attributes: List[str] = None) Tuple[Graph, str][source]#
- class synkit.Graph.Canon.canon_graph.CanonicalGraph(g: Graph, canon: GraphCanonicaliser)[source]#
Bases:
object
- class synkit.Graph.Canon.canon_graph.CanonicalRule(rule: str, canon: GraphCanonicaliser = <GraphCanonicaliser backend='generic' node_key=_default_node_key edge_key=_default_edge_key>)[source]#
Bases:
object
- class synkit.Graph.Canon.canon_graph.GraphCanonicaliser(*, backend: ~typing.Literal['generic', 'wl', 'morgan', 'nauty'] = 'generic', wl_iterations: int = 3, morgan_radius: int = 3, node_attrs: ~typing.List[str] = ['element', 'aromatic', 'charge', 'hcount'], node_sort_key: ~typing.Callable[[~typing.Hashable, ~typing.Dict[str, ~typing.Any]], ~typing.Tuple[~typing.Any, ...]] = <function _default_node_key>, edge_sort_key: ~typing.Callable[[~typing.Hashable, ~typing.Hashable, ~typing.Dict[str, ~typing.Any]], ~typing.Tuple[~typing.Any, ...]] = <function _default_edge_key>)[source]#
Bases:
object- canonicalise_graph(graph: Graph) CanonicalGraph[source]#
- class synkit.Graph.Canon.nauty.NautyCanonicalizer(node_attrs: list[str] | None = None, edge_attrs: list[str] | None = None)[source]#
Bases:
object- canonical_form(G: Graph, return_aut: bool = False, remap_aut: bool = False, return_orbits: bool = False, return_perm: bool = False, max_depth: int | None = None)[source]#
- edge_attrs#
- node_attrs#
Context#
- class synkit.Graph.Context.hier_context.HierContext(node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'order', max_radius: int = 3)[source]#
Bases:
RadiusExpand
- class synkit.Graph.Context.radius_expand.RadiusExpand[source]#
Bases:
object- static context_extraction(data: Dict[str, Any], its_key: str = 'ITS', context_key: str = 'K', n_knn: int = 0) Dict[str, Any][source]#
Features#
- class synkit.Graph.Feature.graph_descriptors.GraphDescriptor[source]#
Bases:
object
- class synkit.Graph.Feature.graph_fps.GraphFP(graph: Graph, nBits: int = 1024, hash_alg: str = 'sha256')[source]#
Bases:
object
- class synkit.Graph.Feature.graph_signature.GraphSignature(graph: Graph)[source]#
Bases:
object
- class synkit.Graph.Feature.hash_fps.HashFPs(graph: Graph, numBits: int = 256, hash_alg: str = 'sha256')[source]#
Bases:
object- extract_features(start_node: int | None, end_node: int | None, max_path_length: int | None) str[source]#
- class synkit.Graph.Feature.morgan_fps.MorganFPs(graph: Graph, radius: int = 3, nBits: int = 1024, hash_alg: str = 'sha256')[source]#
Bases:
object
- class synkit.Graph.Feature.path_fps.PathFPs(graph: Graph, max_length: int = 10, nBits: int = 1024, hash_alg: str = 'sha256')[source]#
Bases:
object
- class synkit.Graph.Feature.wl_hash.WLHash(node: str | List[str] = ['element', 'charge'], edge: str | List[str] = 'order', iterations: int = 5, digest_size: int = 16)[source]#
Bases:
object
Functional groups#
- synkit.Graph.FG.api.smiles_to_graph_and_functional_groups(smiles: str, *, sanitize: bool = True) tuple[Graph, list[tuple[str, tuple[int, ...]]]][source]#
- class synkit.Graph.FG.audit.FunctionalGroupAudit(reactions: int, molecules: int, parse_failures: int, elapsed_seconds: float, label_counts: Counter[str], heteroaromatic_systems: int, named_heteroaromatic_systems: int, unnamed_heteroaromatic_systems: Counter[tuple], uncovered_atom_signatures: Counter[tuple], uncovered_edge_signatures: Counter[tuple])[source]#
Bases:
object
- synkit.Graph.FG.audit.audit_reaction_smiles(reactions: Iterable[str], *, standardizer: Standardize | None = None) FunctionalGroupAudit[source]#
- synkit.Graph.FG.catalog.default_registry() FunctionalGroupRegistry[source]#
- class synkit.Graph.FG.detector.FunctionalGroupDetector(registry: FunctionalGroupRegistry | None = None)[source]#
Bases:
object- matches(graph: Graph) list[FunctionalGroupMatch][source]#
- class synkit.Graph.FG.model.FunctionalGroupMatch(name: str, group_nodes: tuple[int, ...], mapping: dict[int, int], pattern: FunctionalGroupPattern)[source]#
Bases:
object- pattern: FunctionalGroupPattern#
- class synkit.Graph.FG.model.FunctionalGroupPattern(name: str, graph: Graph, group_nodes: tuple[int, ...], parents: tuple[str, ...] = (), suppresses: tuple[str, ...] = (), requires: tuple[str, ...] = (), anchor_node: int | None = None, priority: int = 0, validator: Callable[[Graph, dict[int, int]], bool] | None = None, recognizer: Callable[[Graph, FunctionalGroupPattern], list[FunctionalGroupMatch]] | None = None, public: bool = True)[source]#
Bases:
object- recognizer: Callable[[Graph, FunctionalGroupPattern], list[FunctionalGroupMatch]] | None = None#
- class synkit.Graph.FG.model.FunctionalGroupRegistry(patterns: list[FunctionalGroupPattern] = <factory>)[source]#
Bases:
object- add(pattern: FunctionalGroupPattern) None[source]#
- by_name(name: str) FunctionalGroupPattern[source]#
- execution_order() list[FunctionalGroupPattern][source]#
- extend(patterns: Iterable[FunctionalGroupPattern]) None[source]#
- patterns: list[FunctionalGroupPattern]#
- class synkit.Graph.FG.ring_system.AromaticRingSystem(nodes: tuple[int, ...], edges: tuple[tuple[int, int], ...], hetero_nodes: tuple[int, ...], element_counts: dict[str, int], ring_sizes: tuple[int, ...], subrings: tuple[AromaticSubring, ...], is_fused: bool, hetero_sequence: tuple[str, ...] | None, hetero_pattern: str)[source]#
Bases:
object- subrings: tuple[AromaticSubring, ...]#
Hydrogen utilities#
- synkit.Graph.Hyrogen._misc.check_equivariant_graph(its_graphs: List[Graph]) Tuple[List[Tuple[int, int]], int][source]#
- synkit.Graph.Hyrogen._misc.h_to_explicit(G: Graph, nodes: List[int] = None, its: bool = False) Graph[source]#
- synkit.Graph.Hyrogen._misc.implicit_hydrogen(graph: Graph, preserve_atom_maps: Set[int], reindex: bool = False) Graph[source]#
- synkit.Graph.Hyrogen._misc.normalize_h_pair_graph(rc_graph: Graph, inplace: bool = False) Graph[source]#
- class synkit.Graph.Hyrogen.hcomplete.HComplete[source]#
Bases:
object- TUPLE_EDGE_ATTRS = ['order', 'kekule_order', 'sigma_order', 'pi_order']#
- TUPLE_NODE_ATTRS = ['element', 'aromatic', 'hcount', 'charge', 'atom_map', 'lone_pairs', 'radical', 'valence_electrons']#
- static add_hydrogen_nodes_multiple(react_graph: Graph, prod_graph: Graph, ignore_aromaticity: bool, balance_its: bool, get_priority_graph: bool = False, format: Literal['auto', 'typesGH', 'tuple'] = 'typesGH', max_candidates: int | None = None) List[Tuple[Graph, Graph, Graph, Graph, str]][source]#
- static add_hydrogen_nodes_multiple_utils(graph: Graph, node_id_pairs: Iterable[Tuple[int, int]], atom_map_update: bool = True) Graph[source]#
- static complete_its(its: Graph, ignore_aromaticity: bool = False, balance_its: bool = True, get_priority_graph: bool = False, max_hydrogen: int = 7, format: Literal['auto', 'typesGH', 'tuple'] = 'auto', max_candidates: int | None = None) HCompletionResult[source]#
- process_graph_data_parallel(graph_data_list: List[Dict[str, Graph]], its_key: str = 'ITS', rc_key: str = 'RC', n_jobs: int = 1, verbose: int = 0, ignore_aromaticity: bool = False, balance_its: bool = True, get_priority_graph: bool = False, max_hydrogen: int = 7, format: Literal['auto', 'typesGH', 'tuple'] = 'auto', max_candidates: int | None = None) List[Dict[str, Graph | None]][source]#
- static process_multiple_hydrogens(graph_data: Dict[str, Graph], its_key: str, rc_key: str, react_graph: Graph, prod_graph: Graph, ignore_aromaticity: bool, balance_its: bool, get_priority_graph: bool = False, format: Literal['auto', 'typesGH', 'tuple'] = 'typesGH', max_candidates: int | None = None) Dict[str, Graph | None][source]#
- static process_single_graph_data(graph_data: Dict[str, Graph], its_key: str = 'ITS', rc_key: str = 'RC', ignore_aromaticity: bool = False, balance_its: bool = True, get_priority_graph: bool = False, max_hydrogen: int = 7, format: Literal['auto', 'typesGH', 'tuple'] = 'auto', max_candidates: int | None = None) Dict[str, Graph | None][source]#
- class synkit.Graph.Hyrogen.hcomplete.HCompletionResult(its: Graph | None, rc: Graph | None, reactant: Graph | None = None, product: Graph | None = None, signature: str | None = None, candidates: int = 0, reason: str = '', format: str = 'typesGH')[source]#
Bases:
object
- class synkit.Graph.Hyrogen.hextend.HExtend[source]#
Bases:
HComplete- static extend_its(its: Graph, ignore_aromaticity: bool = False, balance_its: bool = True, format: Literal['auto', 'typesGH', 'tuple'] = 'auto', max_candidates: int | None = None) Tuple[List[Graph], List[Graph], List[str]][source]#
ITS#
- class synkit.Graph.ITS.its_construction.ITSConstruction[source]#
Bases:
object- CORE_EDGE_DEFAULTS: Dict[str, Any] = {'bond_type': '', 'conjugated': False, 'ez_isomer': '', 'in_ring': False, 'kekule_order': 0.0, 'order': 0.0, 'pi_order': 0.0, 'sigma_order': 0.0}#
- CORE_NODE_DEFAULTS: Dict[str, Any] = {'aromatic': False, 'atom_map': 0, 'charge': 0, 'element': '*', 'hcount': 0, 'hybridization': '', 'lone_pairs': 0, 'neighbors': <function ITSConstruction.<lambda>>, 'partial_charge': 0, 'radical': 0, 'valence_electrons': 0}#
- static ITSGraph(G: Graph, H: Graph, ignore_aromaticity: bool = False, attributes_defaults: Dict[str, Any] | None = None, balance_its: bool = False, store: bool = False) Graph[source]#
- static construct(G: Graph, H: Graph, *, ignore_aromaticity: bool = False, balance_its: bool = True, store: bool = True, node_attrs: List[str] | None = None, edge_attrs: List[str] | None = None, attributes_defaults: Dict[str, Any] | None = None) Graph[source]#
- synkit.Graph.ITS.its_decompose.get_rc(ITS: Graph, element_key: List[str] = ['element', 'charge', 'typesGH', 'atom_map'], bond_key: str = 'order', standard_key: str = 'standard_order', disconnected: bool = False, keep_mtg: bool = False) Graph[source]#
- synkit.Graph.ITS.its_decompose.its_decompose(its_graph: Graph, nodes_share='typesGH', edges_share='order')[source]#
- class synkit.Graph.ITS.its_destruction.ITSDestruction(its_graph: Graph, node_attrs: List[str] | None = None, edge_share: str = 'order', edge_attrs: List[str] | None = None, clean_wildcard: bool = False)[source]#
Bases:
object
- class synkit.Graph.ITS.its_expand.ITSExpand[source]#
Bases:
object
Mechanistic and Lewis-state utilities#
- synkit.Graph.Mech.conversion.bond_plus_type(reactant_order: float, product_order: float) str[source]#
- synkit.Graph.Mech.conversion.build_its_from_rsmi(rsmi: str, arrow_code: str, expand_aam: bool = True, remove_non_arrow_maps: bool = True)[source]#
- synkit.Graph.Mech.conversion.check_arrow_code_coverage(arrow_codes: list[str]) dict[str, Any][source]#
- synkit.Graph.Mech.conversion.check_typed_conversion_quality(results: list[dict[str, Any]]) dict[str, Any][source]#
- synkit.Graph.Mech.conversion.convert_arrow_code(arrow_code: str, its=None, strict_bond_lookup: bool = True) dict[str, Any][source]#
- synkit.Graph.Mech.conversion.convert_reaction_arrow(reaction_smiles: str, arrow_code: str, orbital_class: str | None = None, expand_aam: bool = True, remove_non_arrow_maps: bool = True, strict_bond_lookup: bool = True) dict[str, Any][source]#
- synkit.Graph.Mech.conversion.convert_record(record: dict[str, Any], reaction_key: str = 'SMIRKS', arrow_key: str = 'arrow_code', orbital_key: str = 'orbital pair classification', expand_aam: bool = True, remove_non_arrow_maps: bool = True, strict_bond_lookup: bool = True) dict[str, Any][source]#
- synkit.Graph.Mech.conversion.convert_records(records: list[dict[str, Any]], reaction_key: str = 'SMIRKS', arrow_key: str = 'arrow_code', orbital_key: str = 'orbital pair classification', expand_aam: bool = True, remove_non_arrow_maps: bool = True, strict_bond_lookup: bool = True, keep_errors: bool = False) list[dict[str, Any]][source]#
- synkit.Graph.Mech.conversion.debug_arrow_bond_orders(reaction_smiles: str, arrow_code: str, expand_aam: bool = True, remove_non_arrow_maps: bool = True, strict_bond_lookup: bool = True) None[source]#
- synkit.Graph.Mech.conversion.debug_record(record: dict[str, Any], reaction_key: str = 'SMIRKS', arrow_key: str = 'arrow_code', orbital_key: str = 'orbital pair classification') dict[str, Any][source]#
- synkit.Graph.Mech.conversion.ef_smirks_to_epd(ef_smirks: str, orbital_class: str | None = None, strict_bond_lookup: bool = True) dict[str, Any][source]#
- synkit.Graph.Mech.conversion.extract_order_from_edge_data(edge_data: Any) tuple[float, float][source]#
- synkit.Graph.Mech.conversion.get_its_bond_order(its, atom_a: int, atom_b: int, strict: bool = True, context: str = '', atom_map_nodes: dict[int, list[Any]] | None = None) tuple[float, float][source]#
- synkit.Graph.Mech.conversion.get_unique_node_for_atom_map(its, atom_map: int, strict: bool = True, atom_map_nodes: dict[int, list[Any]] | None = None) Any | None[source]#
- synkit.Graph.Mech.conversion.typed_convert_arrow_code(arrow_code: str, its, strict_bond_lookup: bool = True) list[list[Any]][source]#
- synkit.Graph.Mech.conversion.typed_convert_step(step: str, its, strict_bond_lookup: bool = True, atom_map_nodes: dict[int, list[Any]] | None = None) list[Any][source]#
- synkit.Graph.Mech.conversion.validate_arrow_maps(rsmi: str, arrow_code: str, raise_on_arrow_duplicates: bool = True, raise_on_missing_arrow_maps: bool = True) dict[str, Any][source]#
- class synkit.Graph.Mech.electron_accounting.ChargeEdit(atom_map: int, node: Any, delta: int | float, previous_charge: int | float, new_charge: int | float)[source]#
Bases:
object
- class synkit.Graph.Mech.electron_accounting.ChargeRefresh(atom_map: int, node: Any, previous_charge: int | float, refreshed_charge: int | float, valence_electrons: float, nonbonding_electrons: float, bond_electrons: float)[source]#
Bases:
object
- synkit.Graph.Mech.electron_accounting.change_atom_charge(graph: Graph, atom_maps: list[int] | tuple[int, ...] | set[int], *, delta: int | float) list[ChargeEdit][source]#
- synkit.Graph.Mech.electron_accounting.nonbonding_electron_count(graph: Graph, node: Any) float[source]#
- synkit.Graph.Mech.electron_accounting.recompute_charge(graph: Graph, node: Any) int | float[source]#
Matcher#
- class synkit.Graph.Matcher.approx_mcs.ApproxMCSMatcher(node_attrs: List[str] | None = None, node_defaults: List[Any] | None = None, allow_shift: bool = True, *, edge_attrs: List[str] | None = None, prune_wc: bool = False, prune_automorphisms: bool = False, wildcard_element: Any = '*', element_key: str = 'element', use_wl: bool = False, wl_max_iter: int = 3, wildcard_aware: bool = False)[source]#
Bases:
object- find_common_subgraph(G1: Graph, G2: Graph, *, mcs: bool = False, mcs_mol: bool = False, max_seeds: int = 16, max_steps: int = 256) ApproxMCSMatcher[source]#
- find_common_subgraph_approx(G1: Graph, G2: Graph, *, max_seeds: int = 16, max_steps: int = 256) ApproxMCSMatcher[source]#
- class synkit.Graph.Matcher.auto_est.AutoEst(graph: Graph, node_attrs: List[str] | None = None, edge_attrs: List[str] | None = None, max_iter: int = 10)[source]#
Bases:
object
- synkit.Graph.Matcher.auto_est.estimate_automorphism_groups(graph: Graph, node_attrs: Iterable[str] | None = None, edge_attrs: Iterable[str] | None = None, max_iter: int = 10) AutoEst[source]#
- class synkit.Graph.Matcher.automorphism.Automorphism(graph: Graph, node_attr_keys: Sequence[str] | None = None, edge_attr_keys: Sequence[str] | None = None, *, anchor_largest_component: bool = True)[source]#
Bases:
object
- class synkit.Graph.Matcher.batch_cluster.BatchCluster(node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'order', backend: str = 'nx')[source]#
Bases:
object- cluster(data: List[Dict], templates: List[Dict], rule_key: str = 'gml', attribute_key: str = 'WLHash') Tuple[List[Dict], List[Dict]][source]#
- synkit.Graph.Matcher.dedup_matches.deduplicate_matches_with_anchor(matches: Iterable[Dict[int, int]], *, pattern_orbits: Iterable[FrozenSet[int]] | None = None, pattern_anchor: FrozenSet[int] | None = None, host_orbits: Iterable[FrozenSet[int]] | None = None, host_anchor: FrozenSet[int] | None = None) List[Dict[int, int]][source]#
- class synkit.Graph.Matcher.graph_cluster.GraphCluster(node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'order', backend: str = 'nx')[source]#
Bases:
object
- class synkit.Graph.Matcher.graph_matcher.GraphMatcherEngine(*, backend: str = 'nx', node_attrs: List[str] | None = None, edge_attrs: List[str] | None = None, wl1_filter: bool = False, max_mappings: int | None = 1)[source]#
Bases:
object
- synkit.Graph.Matcher.graph_morphism.find_graph_isomorphism(G1: Graph | DiGraph | MultiGraph | MultiDiGraph, G2: Graph | DiGraph | MultiGraph | MultiDiGraph, node_match: Callable[[Dict[str, Any], Dict[str, Any]], bool] | None = None, edge_match: Callable[[Dict[str, Any], Dict[str, Any]], bool] | None = None, use_defaults: bool = True, fast_invariant_check: bool = True, logger: Logger | None = None) Dict[Any, Any] | None[source]#
- synkit.Graph.Matcher.graph_morphism.graph_isomorphism(graph_1: Graph, graph_2: Graph, node_match: Callable | None = None, edge_match: Callable | None = None, use_defaults: bool = False) bool[source]#
- synkit.Graph.Matcher.graph_morphism.heuristics_MCCS(graphs: List[Graph], node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'standard_order') Graph[source]#
- synkit.Graph.Matcher.graph_morphism.maximum_connected_common_subgraph(graph_1: Graph, graph_2: Graph, node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'standard_order') Graph[source]#
- synkit.Graph.Matcher.graph_morphism.subgraph_isomorphism(child_graph: Graph, parent_graph: Graph, node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'order', use_filter: bool = False, check_type: str = 'induced', node_comparator: Callable[[Any, Any], bool] | None = None, edge_comparator: Callable[[Any, Any], bool] | None = None) bool[source]#
- class synkit.Graph.Matcher.mcs_matcher.MCSMatcher(node_attrs: List[str] | None = None, node_defaults: List[Any] | None = None, allow_shift: bool = True, *, edge_attrs: List[str] | None = None, prune_wc: bool = False, prune_automorphisms: bool = False, wildcard_element: Any = '*', element_key: str = 'element')[source]#
Bases:
object- find_common_subgraph(G1: Graph, G2: Graph, *, mcs: bool = False, mcs_mol: bool = False) MCSMatcher[source]#
- class synkit.Graph.Matcher.multi_turbo_iso.MultiTurboISO(hosts: List[Graph], node_label: str | List[str] = 'label', edge_label: str | List[str] | None = None, distance_threshold: int = 5000)[source]#
Bases:
object
- class synkit.Graph.Matcher.orbit.OrbitAccuracy(approx_orbits: Iterable[FrozenSet[Hashable]], exact_orbits: Iterable[FrozenSet[Hashable]])[source]#
Bases:
object- compute(brute_force_pairs: bool = True) OrbitAccuracy[source]#
- class synkit.Graph.Matcher.partial_matcher.PartialMatcher(host: Graph | Sequence[Graph], pattern: Graph, node_attrs: List[str], edge_attrs: List[str], *, strategy: Strategy = Strategy.COMPONENT, max_results: int | None = None, partial: bool = True, threshold: int | None = None, pre_filter: bool = False, prune_auto: bool = False, wl_max_iter: int = 10)[source]#
Bases:
object- estimate_embeddings_wl(k: int | None = None) PartialMatcher[source]#
- static find_partial_mappings(host: Graph | Sequence[Graph], pattern: Graph, *, node_attrs: List[str], edge_attrs: List[str], k: int | None = None, strategy: Strategy = Strategy.COMPONENT, max_results: int | None = None, partial: bool = True, threshold: int | None = None, pre_filter: bool = False, prune_auto: bool = False, wl_max_iter: int = 10) List[Dict[int, int]][source]#
- class synkit.Graph.Matcher.sing.SING(graph: Graph, max_path_length: int = 3, node_att: str | List[str] | None = None, edge_att: str | List[str] | None = 'order')[source]#
Bases:
object
- class synkit.Graph.Matcher.subgraph_matcher.SubgraphMatch[source]#
Bases:
object- static is_subgraph(pattern: Graph | str, host: Graph | str, node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'order', use_filter: bool = False, check_type: str = 'induced', backend: str = 'nx') bool[source]#
- static subgraph_isomorphism(child_graph: Graph, parent_graph: Graph, node_label_names: List[str] = ['element', 'charge'], node_label_default: List[Any] = ['*', 0], edge_attribute: str = 'order', use_filter: bool = False, check_type: str = 'induced', node_comparator: Callable[[Any, Any], bool] | None = None, edge_comparator: Callable[[Any, Any], bool] | None = None) bool[source]#
- class synkit.Graph.Matcher.subgraph_matcher.SubgraphSearchEngine[source]#
Bases:
object- static find_subgraph_mappings(host: Graph, pattern: Graph, *, node_attrs: List[str], edge_attrs: List[str], strategy: str | Strategy = Strategy.COMPONENT, max_results: int | None = None, strict_cc_count: bool = True, threshold: int | None = None, pre_filter: bool = False) List[Dict[int, int]][source]#
- class synkit.Graph.Matcher.turbo_iso.TurboISO(graph: Graph, node_label: str | List[str] = 'label', edge_label: str | List[str] | None = None, distance_threshold: int = 5000)[source]#
Bases:
object
MTG#
- class synkit.Graph.MTG.mcs_matcher.MCSMatcher(node_label_names: List[str] | None = None, node_label_defaults: List[Any] | None = None, edge_attribute: str = 'order', allow_shift: bool = True)[source]#
Bases:
object
- class synkit.Graph.MTG.mtg.MTG(sequences: List[Graph] | List[str], mappings: List[Dict[int, int]] | None = None, *, node_label_names: List[str] | None = None, canonicaliser: GraphCanonicaliser | None = None, mcs_mol: bool = False, mcs: bool = False, its_format: Literal['typesGH', 'tuple'] = 'tuple')[source]#
Bases:
object
- synkit.Graph.MTG.mtg_explore.find_mtg(g1: Graph, g2: Graph, ground_truth: str, node_label_names: List[str] | None = None) MTG | None[source]#
- synkit.Graph.MTG.utils.extract_order_norm(order_sequence: Sequence[Tuple[float, float] | Tuple[Set[float], Set[float]]]) Tuple[float, float] | None[source]#
- synkit.Graph.MTG.utils.normalize_hcount_and_typesGH(G: Graph | DiGraph | MultiGraph | MultiDiGraph) Graph | DiGraph | MultiGraph | MultiDiGraph[source]#
Wildcard#
- synkit.Graph.Wildcard.fuse_graph.find_wc_graph_isomorphism(G1: Graph | DiGraph | MultiGraph | MultiDiGraph, G2: Graph | DiGraph | MultiGraph | MultiDiGraph, node_match: Callable[[Dict[str, Any], Dict[str, Any]], bool] | None = None, edge_match: Callable[[Dict[str, Any], Dict[str, Any]], bool] | None = None, logger: Logger | None = None) Dict[Any, Any] | None[source]#
- synkit.Graph.Wildcard.fuse_graph.fuse_wc_graphs(G1: Graph | DiGraph | MultiGraph | MultiDiGraph, G2: Graph | DiGraph | MultiGraph | MultiDiGraph, mapping: Dict[Any, Any], wildcard: str = '*', logger: Logger | None = None) Graph | DiGraph | MultiGraph | MultiDiGraph[source]#
- class synkit.Graph.Wildcard.graph_wc.GraphCollectionSelector(graphs: Iterable[Graph])[source]#
Bases:
object- reset() GraphCollectionSelector[source]#
- select_by_node_attr(key: str = 'element', value: Any = '*', include: bool = True, match_any: bool = True) GraphCollectionSelector[source]#
- select_by_node_attr_in(key: str = 'element', values: Iterable[Any] = ('*',), include: bool = True, match_any: bool = True) GraphCollectionSelector[source]#
- select_by_node_pred(node_pred: Callable[[dict], bool], require_all_nodes: bool = False, include: bool = True) GraphCollectionSelector[source]#
- select_wc(*, element_key: str = 'element', wildcard: str = '*', select_with_wc: bool = True) GraphCollectionSelector[source]#
- select_with_wc(element_key: str = 'element', wildcard: str = '*') GraphCollectionSelector[source]#
- select_without_wc(element_key: str = 'element', wildcard: str = '*') GraphCollectionSelector[source]#
- class synkit.Graph.Wildcard.its_merge.ITSMerge(G1: Graph | DiGraph | MultiGraph | MultiDiGraph, G2: Graph | DiGraph | MultiGraph | MultiDiGraph, mapping: Dict[Any, Any], *, types_key: str = 'typesGH', element_key: str = 'element', wildcard_element: str = '*', remove_wildcards: bool = True, logger: Logger | None = None)[source]#
Bases:
object- property fused_graph: Graph | DiGraph | MultiGraph | MultiDiGraph#
- property host_graph: Graph | DiGraph | MultiGraph | MultiDiGraph#
- property pattern_graph: Graph | DiGraph | MultiGraph | MultiDiGraph#
- synkit.Graph.Wildcard.its_merge.fuse_its_graphs(G1: Graph | DiGraph | MultiGraph | MultiDiGraph, G2: Graph | DiGraph | MultiGraph | MultiDiGraph, mapping: Dict[Any, Any], *, types_key: str = 'typesGH', element_key: str = 'element', wildcard_element: str = '*', remove_wildcards: bool = True, logger: Logger | None = None) Graph | DiGraph | MultiGraph | MultiDiGraph[source]#
- class synkit.Graph.Wildcard.wc_matcher.WCMatcher(G1: Graph | DiGraph | MultiGraph | MultiDiGraph, G2: Graph | DiGraph | MultiGraph | MultiDiGraph, *, wildcard_element: str = '*', element_key: str = 'element', node_attrs: Sequence[str] | None = None, edge_attrs: Sequence[str] | None = None, node_match: Callable[[Dict[str, Any], Dict[str, Any]], bool] | None = None, edge_match: Callable[[Dict[str, Any], Dict[str, Any]], bool] | None = None, logger: Logger | None = None)[source]#
Bases:
object- property host_graph: Graph | DiGraph | MultiGraph | MultiDiGraph#
- property pattern_graph: Graph | DiGraph | MultiGraph | MultiDiGraph#
- class synkit.Graph.Wildcard.wildcard.WildCard[source]#
Bases:
object- static add_unique_subgraph_with_wildcards(G: Graph, H: Graph, attributes_defaults: Dict[str, Any] | None = None, rebalance: bool = False) Tuple[Graph, Graph][source]#