Ejemplo n.º 1
0
def test__from_local_stereo():
    """ test graph.from_local_stereo
    """
    gra = graph.explicit(C3H5_SGR)
    loc_gra = graph.to_local_stereo(gra)
    assert gra == graph.from_local_stereo(loc_gra)

    for gra in C2H2CL2F2_SGRS:
        gra = graph.explicit(gra)
        loc_gra = graph.to_local_stereo(gra)
        assert gra == graph.from_local_stereo(loc_gra)

    for gra in C3H3CL2F3_SGRS:
        gra = graph.explicit(gra)
        loc_gra = graph.to_local_stereo(gra)
        assert gra == graph.from_local_stereo(loc_gra)

    for gra in C3H5N3_SGRS:
        gra = graph.explicit(gra)
        loc_gra = graph.to_local_stereo(gra)
        assert gra == graph.from_local_stereo(loc_gra)

    for gra in C8H13O_SGRS:
        gra = graph.explicit(gra)
        loc_gra = graph.to_local_stereo(gra)
        assert gra == graph.from_local_stereo(loc_gra)
Ejemplo n.º 2
0
def test__atom_stereo_coordinates():
    """ test graph.atom_stereo_coordinates
    """
    for sgr in C2H2CL2F2_SGRS:
        sgr = graph.explicit(sgr)
        cgr = graph.without_stereo_parities(sgr)
        atm_xyz_dct = graph.atom_stereo_coordinates(sgr)
        assert graph.set_stereo_from_atom_coordinates(cgr, atm_xyz_dct) == sgr

    for sgr in C3H5N3_SGRS:
        sgr = graph.explicit(sgr)
        cgr = graph.without_stereo_parities(sgr)
        atm_xyz_dct = graph.atom_stereo_coordinates(sgr)
        assert graph.set_stereo_from_atom_coordinates(cgr, atm_xyz_dct) == sgr

    for sgr in C3H3CL2F3_SGRS:
        sgr = graph.explicit(sgr)
        cgr = graph.without_stereo_parities(sgr)
        atm_xyz_dct = graph.atom_stereo_coordinates(sgr)
        assert graph.set_stereo_from_atom_coordinates(cgr, atm_xyz_dct) == sgr

    for sgr in C8H13O_SGRS:
        sgr = graph.explicit(sgr)
        cgr = graph.without_stereo_parities(sgr)
        atm_xyz_dct = graph.atom_stereo_coordinates(sgr)
        assert graph.set_stereo_from_atom_coordinates(cgr, atm_xyz_dct) == sgr
Ejemplo n.º 3
0
def test__to_index_based_stereo():
    """ test graph.to_index_based_stereo
    """
    sgr = graph.explicit(C3H5_SGR)
    idx_sgr = graph.to_index_based_stereo(sgr)
    assert sgr == graph.from_index_based_stereo(idx_sgr)

    for sgr in C2H2CL2F2_SGRS:
        sgr = graph.explicit(sgr)
        idx_sgr = graph.to_index_based_stereo(sgr)
        assert sgr == graph.from_index_based_stereo(idx_sgr)

    for sgr in C3H3CL2F3_SGRS:
        sgr = graph.explicit(sgr)
        idx_sgr = graph.to_index_based_stereo(sgr)
        assert sgr == graph.from_index_based_stereo(idx_sgr)

    for sgr in C3H5N3_SGRS:
        sgr = graph.explicit(sgr)
        idx_sgr = graph.to_index_based_stereo(sgr)
        assert sgr == graph.from_index_based_stereo(idx_sgr)

    for sgr in C8H13O_SGRS:
        sgr = graph.explicit(sgr)
        idx_sgr = graph.to_index_based_stereo(sgr)
        assert sgr == graph.from_index_based_stereo(idx_sgr)
Ejemplo n.º 4
0
def test__trans__form_dummy_bonds():
    """ test graph.trans.from_dummy_bonds
    """
    cgr1 = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('C', 1, None),
        3: ('C', 2, None),
        4: ('C', 1, None),
        5: ('C', 2, None),
        6: ('C', 2, None),
        7: ('O', 1, None)
    }, {
        frozenset({4, 6}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({5, 6}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })
    cgr2 = ({
        0: ('C', 2, None),
        1: ('C', 3, None),
        2: ('C', 1, None),
        3: ('C', 2, None),
        4: ('C', 1, None),
        5: ('C', 2, None),
        6: ('C', 2, None),
        7: ('O', 2, None)
    }, {
        frozenset({4, 6}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({5, 6}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })

    cgr1 = graph.explicit(cgr1)
    cgr2 = graph.explicit(cgr2)

    tra = graph.trans.hydrogen_abstraction(cgr1, cgr2)
    dum_cgr1 = graph.trans.form_dummy_bonds(tra, cgr1)

    assert graph.rotational_bond_keys(dum_cgr1) == frozenset({
        frozenset({4, 6}),
        frozenset({10, 7}),
        frozenset({0, 2}),
        frozenset({5, 6}),
        frozenset({3, 5}),
        frozenset({1, 3})
    })

    bnd_key = frozenset({10, 7})
    atm1_key = 7
    atm2_key = 10

    print(graph.branch_atom_keys(dum_cgr1, atm1_key, bnd_key))
    print(graph.branch_atom_keys(dum_cgr1, atm2_key, bnd_key))
Ejemplo n.º 5
0
def test__trans__is_stereo_compatible():
    """ test graph.trans.is_stereo_compatible
    """
    cgr1 = ({
        0: ('C', 1, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('F', 0, None),
        5: ('F', 0, None),
        6: ('O', 1, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })
    cgr2 = ({
        0: ('C', 1, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('F', 0, None),
        5: ('F', 0, None),
        6: ('O', 1, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({3, 6}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })

    cgr1 = graph.explicit(cgr1)
    cgr2 = graph.explicit(cgr2)

    ich1 = graph.inchi(cgr1)
    ich2 = graph.inchi(cgr2)
    smi1 = automol.inchi.smiles(ich1)
    smi2 = automol.inchi.smiles(ich2)
    print(smi1)
    print(smi2)

    cgr1s = graph.connected_components(cgr1)
    cgr2s = graph.connected_components(cgr2)
    tras, _, _ = graph.reac.addition(cgr1s, cgr2s)
    for tra in tras:
        assert graph.backbone_isomorphic(graph.trans.apply(tra, cgr1), cgr2)

        sgr1 = graph.stereomers(cgr1)[0]
        print(sgr1)
        for sgr2 in graph.stereomers(cgr2):
            print(sgr2)
            print(graph.trans.is_stereo_compatible(tra, sgr1, sgr2))
Ejemplo n.º 6
0
def test__reac__beta_scission():
    """ test graph.reac.beta_scission
    """
    rct_cgr = ({
        0: ('C', 1, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('F', 0, None),
        5: ('F', 0, None),
        6: ('O', 1, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({3, 6}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })
    prd_cgr = ({
        0: ('C', 1, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('F', 0, None),
        5: ('F', 0, None),
        6: ('O', 1, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.beta_scission(rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    print("beta scission")
    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)
Ejemplo n.º 7
0
def test__trans__hydrogen_abstraction():
    """ test graph.trans.hydrogen_abstraction
    """
    cgr1 = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('C', 1, None),
        3: ('C', 2, None),
        4: ('C', 1, None),
        5: ('C', 2, None),
        6: ('C', 2, None),
        7: ('O', 1, None)
    }, {
        frozenset({4, 6}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({5, 6}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })
    cgr2 = ({
        0: ('C', 2, None),
        1: ('C', 3, None),
        2: ('C', 1, None),
        3: ('C', 2, None),
        4: ('C', 1, None),
        5: ('C', 2, None),
        6: ('C', 2, None),
        7: ('O', 2, None)
    }, {
        frozenset({4, 6}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({5, 6}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })

    cgr1 = graph.explicit(cgr1)
    cgr2 = graph.explicit(cgr2)

    tra = graph.trans.hydrogen_abstraction(cgr1, cgr2)
    assert graph.backbone_isomorphic(graph.trans.apply(tra, cgr1), cgr2)

    tra = graph.trans.hydrogen_abstraction(cgr2, cgr1)
    assert graph.backbone_isomorphic(graph.trans.apply(tra, cgr2), cgr1)
Ejemplo n.º 8
0
def test__trans__addition():
    """ test graph.trans.addition
    """
    cgr1 = ({
        0: ('C', 1, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('F', 0, None),
        5: ('F', 0, None),
        6: ('O', 1, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })
    cgr2 = ({
        0: ('C', 1, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('F', 0, None),
        5: ('F', 0, None),
        6: ('O', 1, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({3, 6}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })

    cgr1 = graph.explicit(cgr1)
    cgr2 = graph.explicit(cgr2)

    tra = graph.trans.addition(cgr1, cgr2)
    assert graph.backbone_isomorphic(graph.trans.apply(tra, cgr1), cgr2)
Ejemplo n.º 9
0
def test__reac__substitution():
    """ test graph.reac.substitution
    """
    # CH3OOH + CH3 => CH3OCH3 + OH
    rct_cgr = ({
        0: ('C', 3, None),
        1: ('O', 1, None),
        2: ('O', 0, None),
        3: ('C', 3, None)
    }, {
        frozenset({0, 2}): (1, None),
        frozenset({1, 2}): (1, None)
    })
    prd_cgr = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('O', 0, None),
        3: ('O', 1, None)
    }, {
        frozenset({0, 2}): (1, None),
        frozenset({1, 2}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.substitution(rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    print("substitution")
    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)
Ejemplo n.º 10
0
def test__heavy_atom_count():
    """ test graph.explicit_hydrogen_count
    """
    cgr = graph.explicit(C8H13O_CGR)
    assert graph.heavy_atom_count(cgr) == 9
Ejemplo n.º 11
0
def _are_all_explicit(gras):
    return all(gra == explicit(gra) for gra in gras)
Ejemplo n.º 12
0
def test__reac__hydrogen_migration():
    """ test graph.reac.hydrogen_migration
    """
    # first test a radical site migration
    rct_cgr = ({
        0: ('C', 1, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('C', 1, None),
        5: ('O', 0, None)
    }, {
        frozenset({3, 4}): (1, None),
        frozenset({2, 3}): (1, None),
        frozenset({1, 2}): (1, None),
        frozenset({4, 5}): (1, None),
        frozenset({0, 1}): (1, None)
    })

    prd_cgr = ({
        0: ('C', 2, None),
        1: ('C', 1, None),
        2: ('C', 1, None),
        3: ('C', 1, None),
        4: ('C', 0, None),
        5: ('O', 0, None)
    }, {
        frozenset({3, 4}): (1, None),
        frozenset({2, 3}): (1, None),
        frozenset({1, 2}): (1, None),
        frozenset({4, 5}): (1, None),
        frozenset({0, 1}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.hydrogen_migration(
        rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    print("hydrogen migration")
    rct_cgr = graph.union_from_sequence(rct_cgrs)
    prd_cgr = graph.union_from_sequence(prd_cgrs)
    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.hydrogen_migration(
        prd_cgrs, rct_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    # then test a tautomerization
    rct_cgr = ({
        0: ('C', 2, None),
        1: ('C', 1, None),
        2: ('O', 1, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({1, 2}): (1, None)
    })

    prd_cgr = ({
        0: ('C', 3, None),
        1: ('C', 1, None),
        2: ('O', 0, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({1, 2}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.hydrogen_migration(
        rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.hydrogen_migration(
        prd_cgrs, rct_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs
Ejemplo n.º 13
0
def test__reac__insertion():
    """ test graph.reac.insertion
    """
    # CH2CH2 + HOO => CH3CH3OO
    rct_cgr = ({
        0: ('C', 2, None),
        1: ('C', 2, None),
        2: ('O', 1, None),
        3: ('O', 0, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({2, 3}): (1, None)
    })
    prd_cgr = ({
        0: ('C', 3, None),
        1: ('C', 2, None),
        2: ('O', 0, None),
        3: ('O', 0, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({1, 3}): (1, None),
        frozenset({2, 3}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.insertion(rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    print("insertion")
    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)

    # CH3CH3 + :C=O => CH3C(=O)CH3 (CO insertion)
    rct_cgr = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('C', 0, None),
        3: ('O', 0, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({2, 3}): (1, None)
    })
    prd_cgr = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('C', 0, None),
        3: ('O', 0, None)
    }, {
        frozenset({0, 2}): (1, None),
        frozenset({2, 3}): (1, None),
        frozenset({1, 2}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.insertion(rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)

    # CH3CH3 + O=C=O => CH3C(=O)OCH3 (CO2 insertion)
    rct_cgr = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('C', 0, None),
        3: ('O', 0, None),
        4: ('O', 0, None)
    }, {
        frozenset({0, 1}): (1, None),
        frozenset({2, 3}): (1, None),
        frozenset({2, 4}): (1, None)
    })
    prd_cgr = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('C', 0, None),
        3: ('O', 0, None),
        4: ('O', 0, None)
    }, {
        frozenset({0, 2}): (1, None),
        frozenset({1, 4}): (1, None),
        frozenset({2, 3}): (1, None),
        frozenset({2, 4}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.insertion(rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)
Ejemplo n.º 14
0
def test__explicit():
    """ test graph.explicit
    """
    assert CH2FH2H_CGR_EXP == graph.explicit(CH2FH2H_CGR_IMP)
Ejemplo n.º 15
0
def test__explicit():
    """ test graph.explicit
    """
    assert graph.explicit(CH2FH2H_CGR) == CH2FH2H_CGR_EXP
Ejemplo n.º 16
0
def test__implicit():
    """ test graph.implicit
    """
    assert CH2FH2H_CGR_IMP == graph.implicit(graph.explicit(CH2FH2H_CGR_IMP))
Ejemplo n.º 17
0
def test__reac__hydrogen_abstraction():
    """ test graph.reac.hydrogen_abstraction
    """
    rct_cgr = ({
        0: ('C', 3, None),
        1: ('C', 3, None),
        2: ('C', 1, None),
        3: ('C', 2, None),
        4: ('C', 1, None),
        5: ('C', 2, None),
        6: ('C', 2, None),
        7: ('O', 1, None)
    }, {
        frozenset({4, 6}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({5, 6}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })
    prd_cgr = ({
        0: ('C', 2, None),
        1: ('C', 3, None),
        2: ('C', 1, None),
        3: ('C', 2, None),
        4: ('C', 1, None),
        5: ('C', 2, None),
        6: ('C', 2, None),
        7: ('O', 2, None)
    }, {
        frozenset({4, 6}): (1, None),
        frozenset({0, 2}): (1, None),
        frozenset({2, 4}): (1, None),
        frozenset({5, 6}): (1, None),
        frozenset({3, 5}): (1, None),
        frozenset({1, 3}): (1, None)
    })

    rct_cgr = graph.explicit(rct_cgr)
    prd_cgr = graph.explicit(prd_cgr)

    rct_cgrs = graph.connected_components(rct_cgr)
    prd_cgrs = graph.connected_components(prd_cgr)

    tras, rct_idxs, prd_idxs = graph.reac.hydrogen_abstraction(
        rct_cgrs, prd_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    print("hydrogen abstraction")
    rct_cgr = graph.union_from_sequence(rct_cgrs)
    print(rct_cgr)
    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, rct_cgr),
                                         prd_cgr)

    tras, prd_idxs, rct_idxs = graph.reac.hydrogen_abstraction(
        prd_cgrs, rct_cgrs)
    assert tras
    assert rct_idxs
    assert prd_idxs

    for tra in tras:
        print(tra)
        assert graph.backbone_isomorphic(graph.trans.apply(tra, prd_cgr),
                                         rct_cgr)