def test_instantiate_reference_species(self): """ Test that a ReferenceSpecies object can be instantiated with the minimal acceptable input, and throws an error if the minimal acceptable input is not given. """ ref_spcs = ReferenceSpecies(species=self.ethane) self.assertEqual(ref_spcs.smiles, 'CC') self.assertEqual(ref_spcs.inchi_key, self.ethane.molecule[0].to_inchi_key()) ref_from_smiles = ReferenceSpecies(smiles='CCC') self.assertEqual(ref_from_smiles.smiles, 'CCC') self.assertEqual(ref_from_smiles.inchi_key, self.propane.molecule[0].to_inchi_key()) ref_from_inchi = ReferenceSpecies(inchi='InChI=1S/C2H6/c1-2/h1-2H3') self.assertEqual(ref_from_inchi.smiles, 'CC') self.assertEqual(ref_from_inchi.inchi_key, self.ethane.molecule[0].to_inchi_key()) ref_from_adj = ReferenceSpecies( adjacency_list= '1 C u0 p0 c0 {2,S} {3,S} {4,S} {5,S}\n2 H u0 p0 c0 {1,S}\n' '3 H u0 p0 c0 {1,S}\n4 H u0 p0 c0 {1,S}\n5 H u0 p0 c0 {1,S}\n') self.assertEqual(ref_from_adj.smiles, 'C') self.assertEqual(ref_from_adj.inchi_key, self.methane.molecule[0].to_inchi_key()) with self.assertRaises(ValueError): ReferenceSpecies()
def test_save_ref_to_yaml(self): """ Test that a ReferenceSpecies object can be saved to a YAML file successfully """ label = 'test_reference_species' ref_spcs = ReferenceSpecies(species=self.ethane, label=label) self.assertEqual(ref_spcs.label, label) ref_spcs.save_yaml(path=SPECIES_DIR) loaded_ref = ReferenceSpecies.__new__(ReferenceSpecies) load_path = os.path.join(SPECIES_DIR, f'{label}.yml') loaded_ref.load_yaml(path=load_path) self.assertEqual(loaded_ref.smiles, 'CC') # Finally, delete this newly created file os.remove(load_path)
def load_ref_from_yaml(self): """ Test that the example ReferenceSpecies YAML file can be loaded """ ref_spcs = ReferenceSpecies.__new__(ReferenceSpecies) ref_spcs.load_yaml(os.path.join(SPECIES_DIR, 'reference_species_example.yml')) self.assertEqual(ref_spcs.smiles, 'C#C[CH2]') self.assertEqual(ref_spcs.label, 'example_reference_species') self.assertIsInstance(ref_spcs.calculated_data, CalculatedDataEntry)
def test_extract_level_of_theory(self): """ Test that a given level of theory can be extracted from the reference set database """ # Create a quick example database ref_data_1 = ReferenceDataEntry(ThermoData(H298=(100, 'kJ/mol', '+|-', 2))) ref_data_2 = ReferenceDataEntry(ThermoData(H298=(25, 'kcal/mol', '+|-', 1))) calc_data_1 = CalculatedDataEntry(ThermoData(H298=(110, 'kJ/mol'))) calc_data_2 = CalculatedDataEntry(ThermoData(H298=(120, 'kJ/mol'))) ethane = ReferenceSpecies(smiles='CC', reference_data={'precise': ref_data_1, 'less_precise': ref_data_2}, calculated_data={LevelOfTheory('good_chem'): calc_data_1, LevelOfTheory('bad_chem'): calc_data_2}, preferred_reference='less_precise') propane = ReferenceSpecies(smiles='CCC', reference_data={'precise': ref_data_1, 'less_precise': ref_data_2}, calculated_data={LevelOfTheory('good_chem'): calc_data_1, LevelOfTheory('bad_chem'): calc_data_2}) butane = ReferenceSpecies(smiles='CCCC', reference_data={'precise': ref_data_1, 'less_precise': ref_data_2}, calculated_data={LevelOfTheory('bad_chem'): calc_data_2}) database = ReferenceDatabase() database.reference_sets = {'testing_1': [ethane, butane], 'testing_2': [propane]} model_chem_list = database.extract_level_of_theory(LevelOfTheory('good_chem')) self.assertEqual(len(model_chem_list), 2) self.assertIsInstance(model_chem_list[0], ErrorCancelingSpecies) for spcs in model_chem_list: smiles = spcs.molecule.to_smiles() self.assertNotIn(smiles, ['CCCC']) self.assertIn(smiles, ['CC', 'CCC']) if smiles == 'CC': # Test that `less_precise` is the source since it was set manually as preferred self.assertAlmostEqual(spcs.high_level_hf298.value_si, 25.0*4184.0) if smiles == 'CCC': # Test that `precise` is the source since it has the lowest uncertainty self.assertAlmostEqual(spcs.high_level_hf298.value_si, 100.0*1000.0)