--- a +++ b/tests/test_shape.py @@ -0,0 +1,166 @@ +import os +import numpy as np +from numpy.testing import assert_array_almost_equal, assert_almost_equal +import oddt +from oddt.shape import usr, usr_cat, electroshape, usr_similarity + +test_data_dir = os.path.dirname(os.path.abspath(__file__)) +benzene_sdf = """ + RDKit 3D + + 6 6 0 0 0 0 0 0 0 0999 V2000 + -1.0971 0.8220 0.2458 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1708 1.3788 0.0966 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2678 0.5568 -0.1492 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0971 -0.8220 -0.2458 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1708 -1.3788 -0.0966 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2678 -0.5568 0.1491 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 2 0 + 6 1 1 0 +M END + +""" +methylo_sdf = """ + RDKit 3D + + 7 7 0 0 0 0 0 0 0 0999 V2000 + 0.2879 -1.1465 0.0728 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0997 -1.1111 0.1887 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7974 0.0457 -0.1502 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1081 1.1672 -0.6050 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2795 1.1321 -0.7210 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9778 -0.0249 -0.3821 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4600 -0.0625 -0.5059 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 2 0 + 6 7 1 0 + 6 1 1 0 +M END + +""" +benzene = oddt.toolkit.readstring('sdf', benzene_sdf) +benzene.calccharges() +methylo = oddt.toolkit.readstring('sdf', methylo_sdf) +methylo.calccharges() + + +def test_usr(): + """USR test""" + benzene_usr = np.array((1.392709, 0., 0., + 1.732536, 0.877535, -0.580651, + 1.732576, 0.877555, -0.580693, + 1.732573, 0.877552, -0.580686)) + methylo_usr = np.array((1.57291, 0.20536, 0.064638, + 1.697949, 0.759765, -0.420457, + 2.614764, 1.94016, -1.660038, + 2.095664, 1.54289, 0.117823)) + + assert_array_almost_equal(usr(benzene), benzene_usr) + assert_array_almost_equal(usr(methylo), methylo_usr) + + +def test_usr_cat(): + """USRCAT test""" + benzene_usrcat = np.array((1.392709, 0., 0., + 1.732536, 0.877535, -0.580651, + 1.732576, 0.877555, -0.580693, + 1.732573, 0.877552, -0.580686, + 1.392709, 0., 0., + 1.732536, 0.877535, -0.580651, + 1.732576, 0.877555, -0.580693, + 1.732573, 0.877552, -0.580686, + 1.392709, 0., 0., + 1.732536, 0.877535, -0.580651, + 1.732576, 0.877555, -0.580693, + 1.732573, 0.877552, -0.580686, + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0.)) + methylo_usrcat = np.array((1.57291, 0.20536, 0.064638, + 1.697949, 0.759765, -0.420457, + 2.614764, 1.94016, -1.660038, + 2.095664, 1.54289, 0.117823, + 1.57291, 0.20536, 0.064638, + 1.697949, 0.759765, -0.420457, + 2.614764, 1.94016, -1.660038, + 2.095664, 1.54289, 0.117823, + 1.423502, 0.083326, -0.003973, + 1.732968, 0.877809, -0.58125, + 3.050558, 0.934105, -0.26119, + 1.732674, 0.877707, -0.58073, + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0., + 0., 0., 0.)) + + assert_array_almost_equal(usr_cat(benzene), benzene_usrcat) + assert_array_almost_equal(usr_cat(methylo), methylo_usrcat) + + +def test_electroshape(): + """Electroshape test""" + if oddt.toolkit.backend == 'rdk': + benzene_usr = np.array((1.392709, 0.000024, 0.000021, + 1.732576, 0.936779, -0.834287, + 1.732573, 0.936777, -0.834284, + 1.482042, 0.477624, -0.293458, + 1.482042, 0.477624, -0.293458)) + methylo_usr = np.array((1.58227, 0.461717, 0.417984, + 2.649053, 1.404615, -1.20629, + 2.103215, 1.252546, 0.544395, + 2.009275, 0.651085, -0.488366, + 1.955503, 0.693917, -0.521708)) + else: + benzene_usr = np.array((1.39270878, 0.000023678, 0.0000208289, + 1.73257649, 0.936778843, -0.834286869, + 1.73257256, 0.936777234, -0.834283948, + 1.48204167, 0.477623908, -0.293458485, + 1.48204167, 0.477623908, -0.293458485)) + methylo_usr = np.array((1.61146379, 0.46305567, 0.46938854, + 2.76274943, 1.37034833, -1.2889241, + 2.11388564, 1.2641263, 0.57394201, + 2.18083588, 0.57593416, -0.48947371, + 2.06548012, 0.71989938, -0.44118673)) + + assert_array_almost_equal(electroshape(benzene), benzene_usr) + assert_array_almost_equal(electroshape(methylo), methylo_usr) + + +def test_usr_similarity(): + """Similarity function for USR test""" + similarity_usr = 0.68517293875665453 + assert_almost_equal(usr_similarity(usr(benzene), usr(methylo)), similarity_usr) + + +def test_usrcat_similarity(): + """Similarity function for USRCAT test""" + similarity_usrcat = 0.82370755989115707 + assert_almost_equal(usr_similarity(usr_cat(benzene), usr_cat(methylo)), + similarity_usrcat) + + +def test_elecroshape_similarity(): + """Similarity function for Electroshape test""" + if oddt.toolkit.backend == 'rdk': + similarity_electroshape = 0.69110953340712389 + else: + similarity_electroshape = 0.67710967360721197 + + assert_almost_equal(usr_similarity(electroshape(benzene), electroshape(methylo)), + similarity_electroshape)