From 4026533a3f500b4a324c2aa03ebcbafd6de0b1c3 Mon Sep 17 00:00:00 2001
From: Mark Driver <mdd31@alumni.cam.ac.uk>
Date: Tue, 4 Feb 2020 18:15:18 +0000
Subject: [PATCH] add function for reading polynomial files.

---
 phasecalculator/io/polynomialio.py            | 23 +++++++++++++
 .../test/iotest/polynomialiotest.py           | 32 ++++++++++++++++++-
 2 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/phasecalculator/io/polynomialio.py b/phasecalculator/io/polynomialio.py
index 775cbe0..0d7b2a0 100755
--- a/phasecalculator/io/polynomialio.py
+++ b/phasecalculator/io/polynomialio.py
@@ -21,6 +21,7 @@ Script for running polynomial generation.
 """
 
 import logging
+import solventmapcreator.io.polynomialdatareader as polyread
 import solventmapcreator.polynomialanalysis.polynomialplotting as polyplot
 
 logging.basicConfig()
@@ -34,6 +35,28 @@ POSITIVE_POINTS = ["{:.3f}solute".format((float(x)/10.0)) for x in range(101)]
 
 NEGATIVE_POINTS = ["{:.3f}solute".format((float(x)/10.0) - 20.0) for x in range(201)]
 
+def read_poly_data_to_dict(poly_filename_list, **kwargs):
+    """Parse each file, and then returns the dictionary of information, by solvent ID.
+
+    Parameters
+    ----------
+    poly_filename_list : list
+        list of polynomial file names.
+    suffix : str, optional
+        polynomial file suffix.
+    temperature_dir : bool, optional
+        if files are in temperature based directories, indicates to include
+        the preceding directory name in solvent ID to be able to distiguish
+        the same solvent composition at different temperatures.
+
+    Returns
+    -------
+    dict
+        dict of polynomial data by solvent ID.
+
+    """
+    return polyread.parse_polynomial_data_file_list(poly_filename_list, **kwargs)
+
 def generate_polynomial_data_free_energy_file_list(free_energy_filename_list):
     """Generate polynomial fits for free energy data in given files.
 
diff --git a/phasecalculator/test/iotest/polynomialiotest.py b/phasecalculator/test/iotest/polynomialiotest.py
index 589a67e..b51a143 100755
--- a/phasecalculator/test/iotest/polynomialiotest.py
+++ b/phasecalculator/test/iotest/polynomialiotest.py
@@ -44,6 +44,7 @@ class PolynomialIOTestCase(unittest.TestCase):
         None.
 
         """
+        self.maxDiff = None
         parent_directory = pathlib.Path(__file__).parents[1]
         self.binding_file = (parent_directory / "resources"/ "expected_parsedbinding.xml").absolute().as_posix()
         self.expected_binding_poly = (parent_directory / "resources"/ "expected_bindingpoly.csv").absolute().as_posix()
@@ -63,8 +64,37 @@ class PolynomialIOTestCase(unittest.TestCase):
             os.remove(self.actual_binding_poly_file)
         if os.path.isfile(self.actual_free_poly_file):
             os.remove(self.actual_free_poly_file)
+    def test_read_poly_data_to_dict(self):
+        """Test expected_polynomial information read in.
+
+        Returns
+        -------
+        None.
+
+        """
+        expected_dict = {'resourcesexpected,parsed':{8: {'negative': {'RMSE': 0.0137444779,
+                                               'coefficients': np.array([-2.60836624e-01,  4.65295250e-01,  2.57637417e-01,  2.19491128e-01,
+        4.20087475e-02,  4.02289353e-03,  2.12247938e-04,  5.89243946e-06,
+        6.73443996e-08]),
+                                               'covar': 0.0379710451935,
+                                               'order': 8},
+                                  'positive': {'RMSE': 0.008907316,
+                                               'coefficients': np.array([-2.52075337e-01, -7.07009850e-01,  9.86359325e-01, -1.40859321e+00,
+        5.04060101e-01, -9.17970326e-02,  9.28812463e-03, -4.97458825e-04,
+        1.10198937e-05]),
+                                               'covar': 0.008013368123414,
+                                               'order': 8}}}}
+        actual_dict = polyio.read_poly_data_to_dict([self.expected_free_poly], suffix="freepoly.csv",
+                                                    temperature_dir=True)
+        self.assertListEqual(list(expected_dict.keys()), list(actual_dict.keys()))
+        for region, info_dict in actual_dict['resourcesexpected,parsed'][8].items():
+            for key, value in info_dict.items():
+                if key == "coefficients":
+                    np.testing.assert_allclose(value, expected_dict['resourcesexpected,parsed'][8][region][key])
+                else:
+                    self.assertEqual(value, expected_dict['resourcesexpected,parsed'][8][region][key])
     def test_generate_polynomial_data_free_energy_file_list(self):
-        """Test expected polynomial data ouputed.
+        """Test expected polynomial data outputed.
 
         Returns
         -------
-- 
GitLab