From 4d42c4b52ee34289d3544502583766aea79fa350 Mon Sep 17 00:00:00 2001 From: Mark Driver <mdd31@cam.ac.uk> Date: Mon, 3 Jul 2017 18:10:40 +0100 Subject: [PATCH] created test suite, and created script for the reading in of information to a Datapoints object, with the arrays initialised. --- solventmapcreator/io/solvationenergyreader.py | 38 ++++++++++ .../test/iotest/solvationenergyreadertest.py | 74 +++++++++++++++++++ .../test/solvationmapcreatortests.py | 35 +++++++++ 3 files changed, 147 insertions(+) create mode 100644 solventmapcreator/io/solvationenergyreader.py create mode 100644 solventmapcreator/test/iotest/solvationenergyreadertest.py create mode 100644 solventmapcreator/test/solvationmapcreatortests.py diff --git a/solventmapcreator/io/solvationenergyreader.py b/solventmapcreator/io/solvationenergyreader.py new file mode 100644 index 0000000..bda2ad6 --- /dev/null +++ b/solventmapcreator/io/solvationenergyreader.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Script for the reading in of solvation energies for a given solvent. + +@author: mark +""" + +import logging +import resultsanalysis.fileparsing.xmlparsing.solvationreader as solvationreader + +logging.basicConfig() +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.WARN) + +def parse_free_energy_from_file_with_data_arrays(filename): + """This reads in the information form file to a Dapoints object, and + creates the data arrays. + """ + datapoints = parse_free_energy_from_file(filename) + datapoints.createDataArrays() + return datapoints + +def parse_free_energy_from_file(filename): + """This parses the file and returns a datapoints representation of it. + """ + solvation_energy_dict = parse_free_energy_info(filename) + return create_datapoints_with_values(solvation_energy_dict) + +def create_datapoints_with_values(solvation_energy_dict): + """ + """ + return solvationreader.create_datapoints_with_values(solvation_energy_dict) + +def parse_free_energy_info(filename): + """This extracts the slvation information to a dictionary. + """ + return solvationreader.parse_free_energy_info(filename) diff --git a/solventmapcreator/test/iotest/solvationenergyreadertest.py b/solventmapcreator/test/iotest/solvationenergyreadertest.py new file mode 100644 index 0000000..6ed2665 --- /dev/null +++ b/solventmapcreator/test/iotest/solvationenergyreadertest.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Script containing tests for the solvationenergyreader module. + +@author: mark +""" + +import logging +import unittest +import numpy as np +import solventmapcreator.io.solvationenergyreader as solvationenergyreader +from resultsanalysis.dataclasses.datapoints import Datapoints +from resultsanalysis.dataclasses.datapoint import Datapoint +from resultsanalysis.dataclasses.units import Units +from resultsanalysis.dataclasses.value import Value + +logging.basicConfig() +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.WARN) + +class SolvationEnergyReaderTestCase(unittest.TestCase): + """Test Case for the solvationenergyreader module. + """ + def setUp(self): + """Set up for tests + """ + self.solvation_info_dict = solvationenergyreader.parse_free_energy_info("resources/energyvaluestest.xml") + self.expected_datapoints = Datapoints(("ssip",""), (Units.dimensionless, Units.kj_per_mol)) + self.expected_datapoints.addDatapoint(Datapoint(Value(-14.100, "ssip", + Units.dimensionless), + Value(-34.8195308084233, + "", Units.kj_per_mol), + "-14.100solute")) + def tearDown(self): + """Tear down after tests. + """ + del self.solvation_info_dict + del self.expected_datapoints + def test_parse_free_energy_from_file_with_data_arrays(self): + """Test to see if + """ + actual_datapoints = solvationenergyreader.parse_free_energy_from_file_with_data_arrays("resources/energyvaluestest.xml") + self.assertEqual(self.expected_datapoints, actual_datapoints) + np.testing.assert_array_almost_equal(np.array([[-14.100]]), + actual_datapoints.x_values) + np.testing.assert_array_almost_equal(np.array([[-34.8195308084233]]), + actual_datapoints.y_values) + def test_parse_free_energy_from_file(self): + """Test to see if expected Datapoints object is created from reading of + a file. + """ + actual_datapoints = solvationenergyreader.parse_free_energy_from_file("resources/energyvaluestest.xml") + self.assertEqual(self.expected_datapoints, actual_datapoints) + def test_create_datapoints_with_values(self): + """Test to see if expected Datapoints object is created. + """ + actual_datapoints = solvationenergyreader.create_datapoints_with_values(self.solvation_info_dict) + self.assertEqual(self.expected_datapoints, actual_datapoints) + def test_parse_free_energy_info(self): + """Test to see if expected free energy values are extracted from file. + """ + expected_dict = {"total_energy": -34.8195308084233, "value_type":"MOLEFRACTION", + "to_solvent_id":"water", "from_solvent_id":"", + "stdinchikey":"-14.100solute"} + actual_dict_dict = solvationenergyreader.parse_free_energy_info("resources/energyvaluestest.xml") + self.assertListEqual(["-14.100solute"], sorted(actual_dict_dict.keys())) + actual_dict = actual_dict_dict["-14.100solute"] + self.assertListEqual(sorted(expected_dict.keys()), sorted(actual_dict.keys())) + for key, value in expected_dict.items(): + if key == "total_energy": + self.assertAlmostEqual(value, actual_dict[key]) + else: + self.assertEqual(value, actual_dict[key]) \ No newline at end of file diff --git a/solventmapcreator/test/solvationmapcreatortests.py b/solventmapcreator/test/solvationmapcreatortests.py new file mode 100644 index 0000000..6a71d92 --- /dev/null +++ b/solventmapcreator/test/solvationmapcreatortests.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Script for running the tests. + +@author: mark +""" + +import logging +import unittest +from solventmapcreator.test.iotest.solvationenergyreadertest import SolvationEnergyReaderTestCase + +logging.basicConfig() +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.WARN) + +IO_TEST_CASES = [SolvationEnergyReaderTestCase] + +def test_suite(): + """Function creates a test suite and then loads all the tests from the + different test cases. + """ + LOGGER.info("setting up loader and test suite") + loader = unittest.TestLoader() + suite = unittest.TestSuite() + for test_case in IO_TEST_CASES: + LOGGER.debug("Adding %s", test_case) + suite.addTests(loader.loadTestsFromTestCase(test_case)) + return suite + +if __name__ == '__main__': + LOGGER.info("calling test suite method") + SUITE = test_suite() + LOGGER.info("running test suite") + unittest.TextTestRunner(verbosity=2).run(SUITE) -- GitLab