def full_subgraph_isomorphism(gra1, gra2): """ gra2 is fully isomorphic to a subgraph of gra1 """ assert gra1 == explicit(gra1) and gra2 == explicit(gra2) nxg1 = _networkx.from_graph(gra1) nxg2 = _networkx.from_graph(gra2) iso_dct = _networkx.subgraph_isomorphism(nxg1, nxg2) return iso_dct
def full_isomorphism(xgr1, xgr2): """ full graph isomorphism """ assert xgr1 == explicit(xgr1) and xgr2 == explicit(xgr2) nxg1 = _networkx.from_graph(xgr1) nxg2 = _networkx.from_graph(xgr2) iso_dct = _networkx.isomorphism(nxg1, nxg2) return iso_dct
def full_isomorphism(gra1, gra2): """ full graph isomorphism """ assert gra1 == explicit(gra1) and gra2 == explicit(gra2) nxg1 = _networkx.from_graph(gra1) nxg2 = _networkx.from_graph(gra2) iso_dct = _networkx.isomorphism(nxg1, nxg2) return iso_dct
def backbone_isomorphism(xgr1, xgr2): """ graph backbone isomorphism for implicit graphs, this is the relabeling of `xgr1` to produce `xgr2` for other graphs, it gives the correspondences between backbone atoms """ xgr1 = implicit(xgr1) xgr2 = implicit(xgr2) nxg1 = _networkx.from_graph(xgr1) nxg2 = _networkx.from_graph(xgr2) iso_dct = _networkx.isomorphism(nxg1, nxg2) return iso_dct
def _isomorphism(gra1, gra2, igraph=False): """ """ if igraph: igr1 = _igraph.from_graph(gra1) igr2 = _igraph.from_graph(gra2) iso_dcts = _igraph.isomorphisms(igr1, igr2) iso_dct = iso_dcts[0] if iso_dcts else None else: nxg1 = _networkx.from_graph(gra1) nxg2 = _networkx.from_graph(gra2) iso_dct = _networkx.isomorphism(nxg1, nxg2) return iso_dct
def full_isomorphism(gra1, gra2, igraph=False): """ full graph isomorphism """ assert gra1 == explicit(gra1) and gra2 == explicit(gra2) if igraph: igr1 = _igraph.from_graph(gra1) igr2 = _igraph.from_graph(gra2) iso_dcts = _igraph.isomorphisms(igr1, igr2) iso_dct = iso_dcts[0] if iso_dcts else None else: nxg1 = _networkx.from_graph(gra1) nxg2 = _networkx.from_graph(gra2) iso_dct = _networkx.isomorphism(nxg1, nxg2) return iso_dct
def atom_shortest_paths(gra): """ shortest paths between any two atoms in the graph :returns: a 2d dictionary keyed by pairs of atoms """ nxg = _networkx.from_graph(gra) sp_dct = dict(_networkx.all_pairs_shortest_path(nxg)) return sp_dct
def backbone_isomorphism(gra1, gra2, igraph=False): """ graph backbone isomorphism for implicit graphs, this is the relabeling of `gra1` to produce `gra2` for other graphs, it gives the correspondences between backbone atoms """ gra1 = implicit(gra1) gra2 = implicit(gra2) if igraph: igr1 = _igraph.from_graph(gra1) igr2 = _igraph.from_graph(gra2) iso_dcts = _igraph.isomorphisms(igr1, igr2) iso_dct = iso_dcts[0] if iso_dcts else None else: nxg1 = _networkx.from_graph(gra1) nxg2 = _networkx.from_graph(gra2) iso_dct = _networkx.isomorphism(nxg1, nxg2) return iso_dct
def rings_bond_keys(gra): """ bond keys for each ring in the graph (minimal basis) """ bnd_keys = bond_keys(gra) def _ring_bond_keys(rng_atm_keys): return frozenset(filter(lambda x: x <= rng_atm_keys, bnd_keys)) nxg = _networkx.from_graph(gra) rng_atm_keys_lst = _networkx.minimum_cycle_basis(nxg) rng_bnd_keys_lst = frozenset(map(_ring_bond_keys, rng_atm_keys_lst)) return rng_bnd_keys_lst
def connected_components_atom_keys(gra): """ atom keys for each connected component in the graph """ nxg = _networkx.from_graph(gra) cmp_gra_atm_keys_lst = _networkx.connected_component_atom_keys(nxg) return cmp_gra_atm_keys_lst