예제 #1
0
def test_forced_charge2():
    """Test forced charge correction with no corresponding proton for neutralization."""
    # GitHub Issue #15
    assert standardize_smiles('[Na].[Na]') == '[Na+].[Na+]'
    # TODO: Arguably should become selenite ion... O=[Se]([O-])[O-]. Need an AcidBasePair?
    assert standardize_smiles(
        '[Na].[Na].O[Se](O)=O') == 'O=[Se](O)O.[Na+].[Na+]'
예제 #2
0
def test_should_complete():
    """Reionization should not infinitely loop forever on these molecules."""
    # GitHub Issue #14
    assert standardize_smiles(
        'CCCCCCCCCCCCCCCCCC(=O)CC(=C)C(=O)O[Ti](=O)(OC(C)C)C(C)C'
    ) == 'C=C(CC(=O)[CH-]CCCCCCCCCCCCCCCC)C(=O)[O-].CC(C)[O-].CCC.[O-2].[Ti+5]'
    assert standardize_smiles(
        'OP(=O)(O)[O-].OP(=O)([O-])[O-].[O-]S(=O)(=O)[O-].[Na+].[Na+].[Na+].[Mg+2].[Cl-].[Cl-].[K+].[K+]'
    ) == 'O=P([O-])(O)O.O=P([O-])([O-])O.O=S(=O)([O-])[O-].[Cl-].[Cl-].[K+].[K+].[Mg+2].[Na+].[Na+].[Na+]'
예제 #3
0
def test_nitro_normalization3():
    """Normalize nitro group."""
    eq_(standardize_smiles("[O-][N+](=O)c1ccccc1"), "O=[N+]([O-])c1ccccc1")
예제 #4
0
def test_disconnect_metal4():
    """Leave mercury covalently bonded."""
    eq_(standardize_smiles("CC[Hg]SC1=C(C=CC=C1)C(=O)[O][Na]"), "[Na+].CC[Hg]Sc1ccccc1C(=O)[O-]")
예제 #5
0
def test_stereochemistry():
    """Check stereochemistry is correctly perceived."""
    eq_(standardize_smiles("Cl\\C=C/Cl"), "Cl/C=C\\Cl")
예제 #6
0
def test_charge_preservation():
    """Unusually charged histidine should be preserved. (See charge parent for normalization)."""
    eq_(standardize_smiles("[NH3+]C(Cc1cnc[nH]1)C(=O)[O-]"), "[NH3+]C(Cc1cnc[nH]1)C(=O)[O-]")
예제 #7
0
def test_transform_maintains_ring():
    """Ensure no transforms inadvertently breaks open rings."""
    eq_(standardize_smiles("[nH]1ccc2cccc[n+]12"), "c1cc2ccccn2[nH+]1")
예제 #8
0
def test_charge_to_protonated_atom6():
    """Shift positive charge from nonprotonated to protonated atom."""
    eq_(standardize_smiles("[nH]1ccc(=[N+](C)C)cc1"), "CN(C)c1cc[nH+]cc1")
예제 #9
0
def test_charge_to_protonated_atom9():
    """Shift positive charge from nonprotonated to protonated atom."""
    assert standardize_smiles('CNC=CC=[N+](C)C') == 'C[NH+]=CC=CN(C)C'
예제 #10
0
def test_charge_to_protonated_atom6():
    """Shift positive charge from nonprotonated to protonated atom."""
    assert standardize_smiles('[nH]1ccc(=[N+](C)C)cc1') == 'CN(C)c1cc[nH+]cc1'
예제 #11
0
def test_aromaticity3():
    """Redo incorrect aromatization."""
    assert standardize_smiles('C=Cc1ccc2c(c1)NC(=O)/C/2=C\\c1ccc[nH]1'
                              ) == 'C=Cc1ccc2c(c1)NC(=O)/C2=C\\c1ccc[nH]1'
    assert standardize_smiles('C=Cc1ccc2c(c1)[nH]c(=O)/c/2=C\\c1ccc[nH]1'
                              ) == 'C=Cc1ccc2c(c1)NC(=O)/C2=C\\c1ccc[nH]1'
예제 #12
0
def test_1_5_aromatic_charge_recombination2():
    """Recombine aromatic 1,5-separated charges."""
    assert standardize_smiles('C[n+]1ccc([N-]C)cc1') == 'CN=c1ccn(C)cc1'
예제 #13
0
def test_1_5_aromatic_charge_recombination():
    """Recombine aromatic 1,5-separated charges."""
    assert standardize_smiles('[n-]1ccc(=[N+](C)C)cc1') == 'CN(C)c1ccncc1'
예제 #14
0
def test_1_5_nonaromatic_charge_recombination():
    """Recombine non-aromatic 1,5-separated charges."""
    assert standardize_smiles('C[N-]C=CC=[N+](C)C') == 'CN=CC=CN(C)C'
예제 #15
0
def test_pyrimidone_charge_recombination2():
    """Recombine aromatic 1,3-separated charges to form pyrimidone."""
    assert standardize_smiles(
        'COc1cc2ccc3c4c(OC)cc(OC)c(OC)c4c([O-])[n+](C)c3c2cc1OC'
    ) == 'COc1cc2ccc3c4c(OC)cc(OC)c(OC)c4c(=O)n(C)c3c2cc1OC'
예제 #16
0
def test_1_5_nonaromatic_charge_recombination():
    """Recombine non-aromatic 1,5-separated charges."""
    eq_(standardize_smiles("C[N-]C=CC=[N+](C)C"), "CN=CC=CN(C)C")
예제 #17
0
def test_1_5_aromatic_charge_recombination2():
    """Recombine aromatic 1,5-separated charges."""
    eq_(standardize_smiles("C[n+]1ccc([N-]C)cc1"), "CN=c1ccn(C)cc1")
예제 #18
0
def test_transform_maintains_ring():
    """Ensure no transforms inadvertently breaks open rings."""
    assert standardize_smiles(
        '[O-]C1=CC=CC2=CC=CC=[N+]12') == 'O=c1cccc2ccccn12'
예제 #19
0
def test_charge_to_protonated_atom8():
    """Shift positive charge from nonprotonated to protonated atom."""
    eq_(standardize_smiles("C[n+]1ccc2[nH]ccc2c1"), "Cn1ccc2[nH+]ccc-2c1")
예제 #20
0
def test_equal_reionize():
    """Don't change partially ionized acid with two equally strong acid groups."""
    assert standardize_smiles('C1=C(C=CC(=C1)[S]([O-])(=O)=O)[S](O)(=O)=O'
                              ) == 'O=S(=O)([O-])c1ccc(S(=O)(=O)O)cc1'
예제 #21
0
def test_reionize2():
    """Partially ionized acid where proton should be moved to weaker acid."""
    eq_(standardize_smiles("C1=C(C=CC(=C1)[P]([O-])(=O)O)[S](O)(=O)=O"), "O=P(O)(O)c1ccc(S(=O)(=O)[O-])cc1")
예제 #22
0
def test_reionize2():
    """Partially ionized acid where proton should be moved to weaker acid."""
    assert standardize_smiles('C1=C(C=CC(=C1)[P]([O-])(=O)O)[S](O)(=O)=O'
                              ) == 'O=P(O)(O)c1ccc(S(=O)(=O)[O-])cc1'
예제 #23
0
def test_aromaticity3():
    """Redo incorrect aromatization."""
    eq_(standardize_smiles("C=Cc1ccc2c(c1)NC(=O)/C/2=C\\c1ccc[nH]1"), "C=Cc1ccc2c(c1)NC(=O)/C2=C\\c1ccc[nH]1")
    eq_(standardize_smiles("C=Cc1ccc2c(c1)[nH]c(=O)/c/2=C\\c1ccc[nH]1"), "C=Cc1ccc2c(c1)NC(=O)/C2=C\\c1ccc[nH]1")
예제 #24
0
def test_reionize3():
    """Partially ionized acid where proton should be moved to weaker acid."""
    assert standardize_smiles('C1=C(C=C(C(=C1)O)C(=O)[O-])[S](O)(=O)=O.[Na+]'
                              ) == 'O=C(O)c1cc(S(=O)(=O)[O-])ccc1O.[Na+]'
예제 #25
0
def test_disconnect_metal2():
    """Break metal-organic covalent bonds."""
    eq_(standardize_smiles("c1ccccc1C(=O)O[Ca]OC(=O)c1ccccc1"), "[Ca+2].O=C([O-])c1ccccc1.O=C([O-])c1ccccc1")
예제 #26
0
def test_charge_preservation():
    """Unusually charged histidine should be preserved. (See charge parent for normalization)."""
    assert standardize_smiles(
        '[NH3+]C(Cc1cnc[nH]1)C(=O)[O-]') == '[NH3+]C(Cc1cnc[nH]1)C(=O)[O-]'
예제 #27
0
def test_charge_free_metal():
    """Charge free neutral metal with carboxylic acid."""
    eq_(standardize_smiles("[Na].O=C(O)c1ccccc1"), "[Na+].O=C([O-])c1ccccc1")
예제 #28
0
def test_charge_preservation2():
    """"""
    assert standardize_smiles('[Cl-].C[NH+](C)C') == 'C[NH+](C)C.[Cl-]'
예제 #29
0
def test_pyridine_oxide_normalization():
    """Normalize pyridine oxide."""
    eq_(standardize_smiles("C1=[N](C=CC=C1)=O"), "[O-][n+]1ccccc1")
예제 #30
0
def test_disconnect_metal6():
    """"""
    assert standardize_smiles(
        'C1(CCCCC1)[Zn]Br') == '[Br-].[CH-]1CCCCC1.[Zn+2]'
예제 #31
0
def test_pyrimidone_charge_recombination2():
    """Recombine aromatic 1,3-separated charges to form pyrimidone."""
    eq_(
        standardize_smiles("COc1cc2ccc3c4c(OC)cc(OC)c(OC)c4c([O-])[n+](C)c3c2cc1OC"),
        "COc1cc2ccc3c4c(OC)cc(OC)c(OC)c4c(=O)n(C)c3c2cc1OC",
    )
예제 #32
0
def test_positive_carbon_nitrogen():
    """"""
    assert standardize_smiles('CN[C+](C)NC') == 'CNC(C)=[NH+]C'
예제 #33
0
def test_1_5_aromatic_charge_recombination():
    """Recombine aromatic 1,5-separated charges."""
    eq_(standardize_smiles("[n-]1ccc(=[N+](C)C)cc1"), "CN(C)c1ccncc1")
예제 #34
0
def test_positive_phosphorus_nitrogen():
    """"""
    assert standardize_smiles('CN[P+](C)(C)NC') == 'CNP(C)(C)=[NH+]C'
예제 #35
0
def test_aromaticity2():
    """Both rings should be aromatic."""
    eq_(standardize_smiles("C[N]1C=NC2=C1C(=O)N(C)C(=O)N2C"), "Cn1cnc2c1c(=O)n(C)c(=O)n2C")
    eq_(standardize_smiles("Cn1cnc2c1c(=O)n(C)c(=O)n2C"), "Cn1cnc2c1c(=O)n(C)c(=O)n2C")
예제 #36
0
def test_stereochemistry():
    """Check stereochemistry is correctly perceived."""
    assert standardize_smiles('Cl\\C=C/Cl') == 'Cl/C=C\\Cl'
예제 #37
0
def test_charge_to_protonated_atom7():
    """Shift positive charge from nonprotonated to protonated atom."""
    eq_(standardize_smiles("CNc1cc[n+](C)cc1"), "C[NH+]=c1ccn(C)cc1")
예제 #38
0
def test_disconnect_metal():
    """Break metal-organic covalent bonds."""
    assert standardize_smiles(
        '[Na]OC(=O)c1ccccc1') == 'O=C([O-])c1ccccc1.[Na+]'
예제 #39
0
def test_charge_to_protonated_atom9():
    """Shift positive charge from nonprotonated to protonated atom."""
    eq_(standardize_smiles("CNC=CC=[N+](C)C"), "C[NH+]=CC=CN(C)C")
예제 #40
0
def test_disconnect_metal2():
    """Break metal-organic covalent bonds."""
    assert standardize_smiles('c1ccccc1C(=O)O[Ca]OC(=O)c1ccccc1'
                              ) == 'O=C([O-])c1ccccc1.O=C([O-])c1ccccc1.[Ca+2]'
예제 #41
0
def test_equal_reionize():
    """Don't change partially ionized acid with two equally strong acid groups."""
    eq_(standardize_smiles("C1=C(C=CC(=C1)[S]([O-])(=O)=O)[S](O)(=O)=O"), "O=S(=O)([O-])c1ccc(S(=O)(=O)O)cc1")
예제 #42
0
def test_disconnect_metal3():
    """Disconnect Pt in metal complex."""
    assert standardize_smiles(
        '[Pt](Cl)(Cl)(O)(O)(NC(C)C)NC(C)C'
    ) == 'CC(C)[NH-].CC(C)[NH-].[Cl-].[Cl-].[OH-].[OH-].[Pt+6]'
예제 #43
0
def test_reionize3():
    """Partially ionized acid where proton should be moved to weaker acid."""
    eq_(standardize_smiles("C1=C(C=C(C(=C1)O)C(=O)[O-])[S](O)(=O)=O.[Na+]"), "[Na+].O=C(O)c1cc(S(=O)(=O)[O-])ccc1O")
예제 #44
0
def test_disconnect_metal4():
    """Leave mercury covalently bonded."""
    assert standardize_smiles(
        'CC[Hg]SC1=C(C=CC=C1)C(=O)[O][Na]') == 'CC[Hg]Sc1ccccc1C(=O)[O-].[Na+]'
예제 #45
0
def test_charge_preservation2():
    """"""
    eq_(standardize_smiles("[Cl-].C[NH+](C)C"), "[Cl-].C[NH+](C)C")
예제 #46
0
def test_disconnect_metal5():
    """Silver carbonate. Unsure about this one."""
    assert standardize_smiles('[Ag]OC(=O)O[Ag]') == 'O=C([O-])[O-].[Ag+].[Ag+]'
예제 #47
0
def test_disconnect_metal6():
    """"""
    eq_(standardize_smiles("C1(CCCCC1)[Zn]Br"), "[Zn+2].[Br-].[CH-]1CCCCC1")
예제 #48
0
def test_charge_free_metal():
    """Charge free neutral metal with carboxylic acid."""
    assert standardize_smiles(
        '[Na].O=C(O)c1ccccc1') == 'O=C([O-])c1ccccc1.[Na+]'
예제 #49
0
def test_disconnect_metal():
    """Break metal-organic covalent bonds."""
    eq_(standardize_smiles("[Na]OC(=O)c1ccccc1"), "[Na+].O=C([O-])c1ccccc1")
예제 #50
0
def test_nitro_normalization():
    """Normalize nitro group."""
    assert standardize_smiles(
        'C1(=CC=CC=C1)[N+](=O)[O-]') == 'O=[N+]([O-])c1ccccc1'
예제 #51
0
def test_disconnect_metal3():
    """Disconnect Pt in metal complex."""
    eq_(standardize_smiles("[Pt](Cl)(Cl)(O)(O)(NC(C)C)NC(C)C"), "[OH-].[OH-].[Cl-].[Cl-].[Pt+6].CC(C)[NH-].CC(C)[NH-]")
예제 #52
0
def test_nitro_normalization3():
    """Normalize nitro group."""
    assert standardize_smiles('[O-][N+](=O)c1ccccc1') == 'O=[N+]([O-])c1ccccc1'
예제 #53
0
def test_disconnect_metal5():
    """Silver carbonate. Unsure about this one."""
    eq_(standardize_smiles("[Ag]OC(=O)O[Ag]"), "[Ag+].[Ag+].O=C([O-])[O-]")
예제 #54
0
def test_nitro_normalization5():
    """Normalize nitro group."""
    assert standardize_smiles('O[N+](=O)[O-]') == 'O=[N+]([O-])O'
예제 #55
0
def test_nitro_normalization():
    """Normalize nitro group."""
    eq_(standardize_smiles("C1(=CC=CC=C1)[N+](=O)[O-]"), "O=[N+]([O-])c1ccccc1")
예제 #56
0
def test_pyridine_oxide_normalization():
    """Normalize pyridine oxide."""
    assert standardize_smiles('C1=[N](C=CC=C1)=O') == '[O-][n+]1ccccc1'
예제 #57
0
def test_nitro_normalization5():
    """Normalize nitro group."""
    eq_(standardize_smiles("O[N+](=O)[O-]"), "O=[N+]([O-])O")
예제 #58
0
def test_aromaticity():
    """Check aromaticity is correctly perceived."""
    eq_(standardize_smiles("C1=CC=CC=C1"), "c1ccccc1")
예제 #59
0
def test_standardize():
    """Test table salt."""
    assert standardize_smiles('[Na].[Cl]') == '[Cl-].[Na+]'
예제 #60
0
def test_pyrimidone_charge_recombination():
    """Recombine aromatic 1,3-separated charges to form pyrimidone."""
    eq_(standardize_smiles("[O-]c1[n+](C)cccc1"), "Cn1ccccc1=O")