Esempio n. 1
0
def atoms_sorted_neighbor_atom_keys(gra,
                                    symbs_first=('C', ),
                                    symbs_last=('H', ),
                                    ords_last=(0.1, ),
                                    prioritize_keys=()):
    """ keys of neighboring atoms, by atom

    :param gra: the graph
    :param symbs_first: atomic symbols to put put first in the sort order
    :param symbs_last: atomic symbols to put last in the sort order
    :param ords_last: neighors connected with a bond of this order will be put
        last in the sort order
    :param prioritize_keys: keys to put first no matter what
    """
    atm_symb_dct = atom_symbols(gra)
    bnd_ord_dct = bond_orders(gra)

    def _neighbor_keys(atm_key, atm_nbh):
        keys = sorted(atom_keys(atm_nbh) - {atm_key})
        bnd_keys = [frozenset({atm_key, k}) for k in keys]
        ords = list(map(bnd_ord_dct.__getitem__, bnd_keys))
        ords = [-1 if o not in ords_last else ords_last.index(o) for o in ords]
        symbs = list(map(atm_symb_dct.__getitem__, keys))
        pris = [0 if k in prioritize_keys else 1 for k in keys]
        srt_vals = list(zip(ords, pris, symbs))
        srt = automol.formula.argsort_symbols(srt_vals,
                                              symbs_first,
                                              symbs_last,
                                              idx=2)
        keys = tuple(map(keys.__getitem__, srt))
        return keys

    atm_ngb_keys_dct = dict_.transform_items_to_values(atom_neighborhoods(gra),
                                                       _neighbor_keys)
    return atm_ngb_keys_dct
Esempio n. 2
0
def bonds_neighbor_atom_keys(gra):
    """ keys of neighboring atoms, by bond
    """
    def _neighbor_keys(bnd_key, bnd_nbh):
        return frozenset(atom_keys(bnd_nbh) - bnd_key)

    bnd_ngb_keys_dct = dict_.transform_items_to_values(bond_neighborhoods(gra),
                                                       _neighbor_keys)
    return bnd_ngb_keys_dct
Esempio n. 3
0
def atoms_neighbor_atom_keys(gra):
    """ keys of neighboring atoms, by atom
    """
    def _neighbor_keys(atm_key, atm_nbh):
        return frozenset(atom_keys(atm_nbh) - {atm_key})

    atm_ngb_keys_dct = dict_.transform_items_to_values(atom_neighborhoods(gra),
                                                       _neighbor_keys)
    return atm_ngb_keys_dct
Esempio n. 4
0
def bonds_neighbor_bond_keys(gra):
    """ keys of neighboring bonds, by bond
    """
    def _neighbor_keys(bnd_key, bnd_nbh):
        bnd_keys = bond_keys(bnd_nbh)
        bnd_keys -= {bnd_key}
        bnd_keys = frozenset(key for key in bnd_keys if key & bnd_key)
        return bnd_keys

    bnd_ngb_keys_dct = dict_.transform_items_to_values(bond_neighborhoods(gra),
                                                       _neighbor_keys)
    return bnd_ngb_keys_dct