Ejemplo n.º 1
0
def test__relabel():
    """ test graph.relabel
    """
    assert graph.relabel(C3H3_CGR, {0: 10, 1: 11, 2: 12}) == (
        {10: ('C', 1, None), 11: ('C', 1, None), 12: ('C', 1, None)},
        {frozenset({10, 11}): (1, None), frozenset({11, 12}): (1, None),
         frozenset({12, 10}): (1, None)})
Ejemplo n.º 2
0
def test__backbone_isomorphism():
    """ test graph.backbone_isomorphism
    """
    cgr = C8H13O_CGR
    natms = len(graph.atoms(cgr))
    for _ in range(10):
        pmt_dct = dict(enumerate(numpy.random.permutation(natms)))
        cgr_pmt = graph.relabel(cgr, pmt_dct)
        assert graph.backbone_isomorphism(cgr, cgr_pmt) == pmt_dct
Ejemplo n.º 3
0
def test__atom_inchi_numbers():
    """ test graph.atom_inchi_numbers
    """
    cgr = C8H13O_CGR
    natms = len(graph.atoms(cgr))
    for _ in range(10):
        pmt_dct = dict(enumerate(numpy.random.permutation(natms)))
        cgr_pmt = graph.relabel(cgr, pmt_dct)
        inv_pmt_dct = dict(map(reversed, pmt_dct.items()))
        assert graph.atom_inchi_numbers(cgr_pmt) == inv_pmt_dct
Ejemplo n.º 4
0
def test__from_dictionaries():
    """ test graph.from_dictionaries
    """
    assert graph.from_dictionaries(
        graph.atom_symbols(CH2FH2H_CGR_EXP),
        graph.bond_keys(CH2FH2H_CGR_EXP)
    ) == CH2FH2H_CGR_EXP

    assert graph.from_dictionaries(
        graph.atom_symbols(C8H13O_RGRS[0]),
        graph.bond_keys(C8H13O_RGRS[0]),
        atm_imp_hyd_vlc_dct=graph.atom_implicit_hydrogen_valences(
            C8H13O_RGRS[0]),
        bnd_ord_dct=graph.bond_orders(C8H13O_RGRS[0])
    ) == C8H13O_RGRS[0]

    assert graph.from_dictionaries(
        graph.atom_symbols(C8H13O_SGRS[0]),
        graph.bond_keys(C8H13O_SGRS[0]),
        atm_imp_hyd_vlc_dct=graph.atom_implicit_hydrogen_valences(
            C8H13O_SGRS[0]),
        atm_ste_par_dct=graph.atom_stereo_parities(C8H13O_SGRS[0]),
        bnd_ste_par_dct=graph.bond_stereo_parities(C8H13O_SGRS[0])
    ) == C8H13O_SGRS[0]

    # a litte ridiculous, but make sure we get the keys right
    sgr_ref = C8H13O_SGRS[0]
    natms = len(graph.atoms(sgr_ref))
    for _ in range(10):
        pmt_dct = dict(enumerate(numpy.random.permutation(natms)))
        sgr = graph.relabel(sgr_ref, pmt_dct)
        assert graph.from_dictionaries(
            graph.atom_symbols(sgr),
            graph.bond_keys(sgr),
            atm_imp_hyd_vlc_dct=graph.atom_implicit_hydrogen_valences(sgr),
            atm_ste_par_dct=graph.atom_stereo_parities(sgr),
            bnd_ste_par_dct=graph.bond_stereo_parities(sgr)
        ) == sgr
Ejemplo n.º 5
0
def hydrogen_migrations(rct_gras, viable_only=True):
    """ find all possible hydrogen migration reactions for these reactants

    :param rct_gras: graphs for the reactants, without stereo and without
        overlapping keys
    :param viable_only: Filter out reactions with non-viable products?
    :type viable_only: bool
    :returns: a list of Reaction objects
    :rtype: tuple[Reaction]

    Hydrogen migrations are enumerated looping over unsaturated sites, adding
    hydrogens to them, and looping over non-equivalent heavy atoms and removing
    hydrgens from them.
    """
    assert_is_valid_reagent_graph_list(rct_gras)

    rxns = []

    if len(rct_gras) == 1:
        rct_gra, = rct_gras

        # Identify unsaturated sites
        rct_add_key = max(atom_keys(rct_gra)) + 1
        rct_rad_keys = unsaturated_atom_keys(rct_gra)
        rct_hyd_keys = atom_keys(rct_gra, sym='H')

        for rct_rad_key in rct_rad_keys:
            # Add a hydrogen to the radical/unsaturated site
            rct_h_gra = add_bonded_atom(rct_gra,
                                        'H',
                                        rct_rad_key,
                                        bnd_atm_key=rct_add_key)

            # Identify donor sites
            rct_don_keys = backbone_keys(rct_h_gra) - {rct_rad_key}
            for rct_don_key in rct_don_keys:
                rct_hyd_key = atom_neighbor_atom_key(rct_gra,
                                                     rct_don_key,
                                                     symbs_first=['H'],
                                                     symbs_last=[])
                if rct_hyd_key in rct_hyd_keys:
                    prd_gra = remove_atoms(rct_h_gra, {rct_hyd_key})
                    prd_gra = relabel(prd_gra, {rct_add_key: rct_hyd_key})

                    forw_tsg = ts.graph(rct_gra,
                                        frm_bnd_keys=[(rct_rad_key,
                                                       rct_hyd_key)],
                                        brk_bnd_keys=[(rct_don_key,
                                                       rct_hyd_key)])

                    back_tsg = ts.graph(prd_gra,
                                        frm_bnd_keys=[(rct_don_key,
                                                       rct_hyd_key)],
                                        brk_bnd_keys=[(rct_rad_key,
                                                       rct_hyd_key)])

                    rxns.append(
                        Reaction(
                            rxn_cls=par.ReactionClass.Typ.HYDROGEN_MIGRATION,
                            forw_tsg=forw_tsg,
                            back_tsg=back_tsg,
                            rcts_keys=[atom_keys(rct_gra)],
                            prds_keys=[atom_keys(prd_gra)],
                        ))

    if viable_only:
        rxns = filter_viable_reactions(rxns)

    return ts_unique(rxns)