class Test_custom_sum(unittest.TestCase): def setUp(self): enum = ScoringFunctionComponentNameEnum() predictive_property = create_predictive_property_component_regression() activity = create_activity_component_regression() qed_score = ComponentParameters(component_type=enum.QED_SCORE, name="qed_score_name", weight=1., smiles=[], model_path="", specific_parameters={}) custom_alerts = ComponentParameters(component_type=enum.CUSTOM_ALERTS, name="custom_alerts_name", weight=1., smiles=["CCCOOO"], model_path="", specific_parameters={}) matching_substructure = ComponentParameters(component_type=enum.MATCHING_SUBSTRUCTURE, name="matching_substructure_name", weight=1., smiles=["*CCC"], model_path="", specific_parameters={}) self.sf_instance = CustomSum( parameters=[activity, qed_score, custom_alerts, matching_substructure, predictive_property]) def test_special_selectivity_multiplicative_no_sigm_trans_1(self): score = self.sf_instance.get_final_score(smiles=["O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N"]) self.assertAlmostEqual(score.total_score[0], 0.3631, 3) def test_special_selectivity_multiplicative_no_sigm_trans_3(self): score = self.sf_instance.get_final_score(smiles=["CCCOOOCCCOOO"]) self.assertEqual(score.total_score, 0)
class Test_tpsa_score_with_double_sigmoid(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() tt_enum = TransformationTypeEnum() specific_parameters = { csp_enum.TRANSFORMATION: True, csp_enum.LOW: 0, csp_enum.HIGH: 1, csp_enum.TRANSFORMATION_TYPE: tt_enum.STEP } ts_parameters = ComponentParameters( component_type=sf_enum.NUM_HBD_LIPINSKI, name="NumHBD_Lipinski", weight=1., smiles=[], model_path="", specific_parameters=specific_parameters) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_hbd_1(self): smiles = ["C(=O)N", 'O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N'] values = np.array([1.0, 1.0]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_equal(score.total_score, values)
class Test_tpsa_score_with_double_sigmoid(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() tt_enum = TransformationTypeEnum() specific_parameters = { csp_enum.TRANSFORMATION: True, csp_enum.LOW: 0, csp_enum.HIGH: 135, csp_enum.COEF_DIV: 100, csp_enum.COEF_SI: 200, csp_enum.COEF_SE: 200, csp_enum.TRANSFORMATION_TYPE: tt_enum.DOUBLE_SIGMOID } ts_parameters = ComponentParameters( component_type=sf_enum.TPSA, name="TPSA", weight=1., smiles=[], model_path="", specific_parameters=specific_parameters) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_tpsa_1(self): smiles = [ "OC(=O)P(=O)(O)O", "C12C3C4C1C5C2C3C45", '[NH4+].[Cl-]', 'n1cccc2ccccc12', 'O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N' ] values = np.array([1., 0.5, 1., 1., 1.]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_almost_equal(score.total_score, values, 2)
class Test_tpsa_score_with_double_sigmoid(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() tt_enum = TransformationTypeEnum() specific_parameters = { csp_enum.TRANSFORMATION: True, csp_enum.LOW: 2, csp_enum.HIGH: 5, csp_enum.TRANSFORMATION_TYPE: tt_enum.STEP } ts_parameters = ComponentParameters( component_type=sf_enum.NUM_ROTATABLE_BONDS, name="NumRotatableBonds", weight=1., smiles=[], model_path="", specific_parameters=specific_parameters) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_num_rot_1(self): smiles = [ "OC(=O)P(=O)(O)O", "C12C3C4C1C5C2C3C45", '[NH4+].[Cl-]', 'n1cccc2ccccc12', 'O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N' ] values = np.array([0., 0., 0., 0., 1.]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_equal(score.total_score, values)
class Test_num_rings_score_no_transformation(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() ts_parameters = ComponentParameters(component_type=sf_enum.NUM_RINGS, name="Number of Rings", weight=1., smiles=[], model_path="", specific_parameters={ csp_enum.TRANSFORMATION: False }) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_num_rings_1(self): smiles = [ "C1=CC2=C(C=C1)C1=CC=CC=C21", "C12C3C4C1C5C2C3C45", '[NH4+].[Cl-]', 'n1cccc2ccccc12', 'O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N' ] values = np.array([3., 6., 0., 2., 3.]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_almost_equal(score.total_score, values, 2)
class Test_slogp_score_with_double_sigmoid(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() tt_enum = TransformationTypeEnum() specific_parameters = { csp_enum.TRANSFORMATION: True, csp_enum.LOW: 1, csp_enum.HIGH: 3, csp_enum.COEF_DIV: 3, csp_enum.COEF_SI: 10, csp_enum.COEF_SE: 10, csp_enum.TRANSFORMATION_TYPE: tt_enum.DOUBLE_SIGMOID } ts_parameters = ComponentParameters( component_type=sf_enum.SLOGP, name="SlogP", weight=1., smiles=[], model_path="", specific_parameters=specific_parameters) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_slogp_1(self): smiles = [ "OC(=O)P(=O)(O)O", "Cc1ccccc1N1C(=O)c2cc(S(N)(=O)=O)c(Cl)cc2NC1C", "N12CC3C(=NC4C(C=3)=CC=CC=4)C1=CC1=C(COC(=O)C1(O)CC)C2=O", "N12CC3C(=NC4C(C=3C(=O)O)=CC3=C(OCCO3)C=4)C1=CC1=C(COC(=O)C1(O)CC)C2=O", "FC1C=CC(CC(=NS(=O)(=O)C2C=CC(C)=CC=2)N2CCN(CC3C4C(=CC=CC=4)N=C4C=3CN3C4=CC4=C(COC(=O)C4(O)CC)C3=O)CC2)=CC=1" ] values = np.array([0.0, 0.9, 1.0, 1.0, 0.0]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_almost_equal(score.total_score, values, 2)
class Test_hbd_score_no_transformation(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() ts_parameters = ComponentParameters( component_type=sf_enum.NUM_HBD_LIPINSKI, name="NumHBD_Lipinski", weight=1., smiles=[], model_path="", specific_parameters={csp_enum.TRANSFORMATION: False}) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_hbd_1(self): smiles = ["C(=O)N", 'O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N'] values = np.array([1., 1.]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_equal(score.total_score, values)
class Test_mw_score_no_transformation(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() ts_parameters = ComponentParameters( component_type=sf_enum.MOLECULAR_WEIGHT, name="MW", weight=1., smiles=[], model_path="", specific_parameters={csp_enum.TRANSFORMATION: False}) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_mw_1(self): smiles = [ "[NH4+].[Cl-]", 'n1cccc2ccccc12', 'O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N' ] values = np.array([53.49, 129.16, 381.38]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_almost_equal(score.total_score, values, 2)
class Test_tpsa_score_no_transformation(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() ts_parameters = ComponentParameters( component_type=sf_enum.TPSA, name="TPSA", weight=1., smiles=[], model_path="", specific_parameters={csp_enum.TRANSFORMATION: False}) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_tpsa_1(self): smiles = [ "OC(=O)P(=O)(O)O", "C12C3C4C1C5C2C3C45", '[NH4+].[Cl-]', 'n1cccc2ccccc12', 'O=S(=O)(c3ccc(n1nc(cc1c2ccc(cc2)C)C(F)(F)F)cc3)N' ] values = np.array([94.83, 0., 36.5, 12.89, 77.98]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_almost_equal(score.total_score, values, 2)
class Test_slogp_score_no_transformation(unittest.TestCase): @classmethod def setUpClass(self): sf_enum = ScoringFunctionComponentNameEnum() csp_enum = ComponentSpecificParametersEnum() ts_parameters = ComponentParameters( component_type=sf_enum.SLOGP, name="SlogP", weight=1., smiles=[], model_path="", specific_parameters={csp_enum.TRANSFORMATION: False}) self.sf_state = CustomSum(parameters=[ts_parameters]) def test_slogp_1(self): smiles = [ "OC(=O)P(=O)(O)O", "Cc1ccccc1N1C(=O)c2cc(S(N)(=O)=O)c(Cl)cc2NC1C", "N12CC3C(=NC4C(C=3)=CC=CC=4)C1=CC1=C(COC(=O)C1(O)CC)C2=O", "N12CC3C(=NC4C(C=3C(=O)O)=CC3=C(OCCO3)C=4)C1=CC1=C(COC(=O)C1(O)CC)C2=O", "FC1C=CC(CC(=NS(=O)(=O)C2C=CC(C)=CC=2)N2CCN(CC3C4C(=CC=CC=4)N=C4C=3CN3C4=CC4=C(COC(=O)C4(O)CC)C3=O)CC2)=CC=1" ] values = np.array([-0.1579, 2.71412, 2.0796, 1.549, 4.67482]) score = self.sf_state.get_final_score(smiles=smiles) npt.assert_array_almost_equal(score.total_score, values, 2)