diff --git a/phasecalculator/analysis/fgipanalysis.py b/phasecalculator/analysis/fgipanalysis.py index 47f739fc67caebb08a820f897360112fb17c5178..fb1ebec73ed27247ec4e0ca108b3b0af08956e7b 100755 --- a/phasecalculator/analysis/fgipanalysis.py +++ b/phasecalculator/analysis/fgipanalysis.py @@ -139,7 +139,9 @@ def create_solvation_plots_from_poly_files( plot_outputs = [] filename_list = [] directory = kwargs.get("directory", "") - frac_occ_inf_dict = solvmapgen.fractionaloccupancycalculator.read_fractional_occupancy_information(frac_occ_filename) + frac_occ_inf_dict = solvmapgen.fractionaloccupancycalculator.read_fractional_occupancy_information( + frac_occ_filename + ) for polynomial_filename in polynomial_filename_list: LOGGER.info("polynomial_filename:") LOGGER.info(polynomial_filename) diff --git a/phasecalculator/analysis/vleanalysis.py b/phasecalculator/analysis/vleanalysis.py index a92e978bf6556862d80a7a7cbcbb187c2f7980e6..f521c539dbcfec5d6b6e53c94cb10964c78f9d1a 100755 --- a/phasecalculator/analysis/vleanalysis.py +++ b/phasecalculator/analysis/vleanalysis.py @@ -28,6 +28,7 @@ logging.basicConfig() LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.WARN) + def process_vle_data(phase_filename, csv_filename): """Process phase XML and write to csv file. @@ -45,7 +46,8 @@ def process_vle_data(phase_filename, csv_filename): """ mixture_dict = read_data_from_mixtures(phase_filename) mixture_info_list = convert_mixture_container_dict_to_list(mixture_dict) - write_data_to_csv(mixture_info_list,csv_filename) + write_data_to_csv(mixture_info_list, csv_filename) + def write_data_to_csv(mixture_info_list, csv_filename): """Write data to csv file. @@ -63,11 +65,17 @@ def write_data_to_csv(mixture_info_list, csv_filename): """ with open(csv_filename, "w") as outfile: - csvwriter = csv.writer(outfile, delimiter="\t",lineterminator="\n") - header_row = ['solvent_id', 'temperature', "phase type",'concentrations[name, value]'] + csvwriter = csv.writer(outfile, delimiter="\t", lineterminator="\n") + header_row = [ + "solvent_id", + "temperature", + "phase type", + "concentrations[name, value]", + ] csvwriter.writerow(header_row) csvwriter.writerows(mixture_info_list) + def convert_mixture_container_dict_to_list(mixture_container_dict): """Convert mixture dictionary to list of lists @@ -87,8 +95,8 @@ def convert_mixture_container_dict_to_list(mixture_container_dict): for phase_id, phase_dict in mixture.items(): phase_list_container.append(convert_phase_dict_to_list(phase_dict)) return phase_list_container - - + + def convert_phase_dict_to_list(phase_dict): """Convert phase dictionary to list for output. @@ -103,18 +111,18 @@ def convert_phase_dict_to_list(phase_dict): List of information for output to file. """ - phase_list = [ + phase_list = [ phase_dict["solvent_id"], phase_dict["temperature_value"], phase_dict["phase_type"], - ] - - for inchikey, mol_dict in phase_dict['concentrations'].items(): - phase_list += [inchikey, "{:.10f}".format(mol_dict["concentration_value"]) ] - + ] + + for inchikey, mol_dict in phase_dict["concentrations"].items(): + phase_list += [inchikey, "{:.10f}".format(mol_dict["concentration_value"])] + return phase_list - - + + def read_data_from_mixtures(vle_filename): """Read Mixture XML. @@ -129,4 +137,4 @@ def read_data_from_mixtures(vle_filename): Summary of phase concentration information. """ - return mixparser.parse_mixture_file(vle_filename) \ No newline at end of file + return mixparser.parse_mixture_file(vle_filename) diff --git a/phasecalculator/classes/outputinformation.py b/phasecalculator/classes/outputinformation.py index 92888b18a101f888f1bec2195b2499e571fe7ec6..d1a66117b36dd2fe64fe53debf7fbb68c3b0a6eb 100755 --- a/phasecalculator/classes/outputinformation.py +++ b/phasecalculator/classes/outputinformation.py @@ -104,9 +104,10 @@ class OutputInformation(object): """ fgip_output = OutputInformation.parse_fgip_output(output_xml) - similarity_output, similarity_output_type = OutputInformation.parse_similarity_output( - output_xml - ) + ( + similarity_output, + similarity_output_type, + ) = OutputInformation.parse_similarity_output(output_xml) vle_output = OutputInformation.parse_vle_output(output_xml) return OutputInformation( fgip_output, similarity_output, similarity_output_type, vle_output diff --git a/phasecalculator/classes/phase.py b/phasecalculator/classes/phase.py index 41ee8f2537c7cc0846425c6f04c352bbafd7483f..4f5cbecf2e1e555d69e2e444c7c07dd9a0b6d18a 100755 --- a/phasecalculator/classes/phase.py +++ b/phasecalculator/classes/phase.py @@ -160,7 +160,7 @@ class Phase(object): molefraction_total = 0.0 for mole_frac in self.get_molefractions_by_molecule().values(): molefraction_total += mole_frac - return (abs(1.0-molefraction_total) < 1e-5) + return abs(1.0 - molefraction_total) < 1e-5 def write_to_xml(self): """Write information to Etree representation of XML. @@ -203,7 +203,7 @@ class Phase(object): """ return [molecule.ssip_file_loc for molecule in self.molecule_list] - + def get_name_inchikey_map(self): """Get the name inchikey mapping for all molecules in the phases. diff --git a/phasecalculator/classes/phases.py b/phasecalculator/classes/phases.py index 6b04fed7c68a064ed1185fae9fb22f16f6af00e7..b5cbcb6065c2a265e6b268468dbe091bc69eddf9 100755 --- a/phasecalculator/classes/phases.py +++ b/phasecalculator/classes/phases.py @@ -181,7 +181,7 @@ class Phases(object): for phase in self.phase_list: ssip_file_locations.extend(phase.get_ssip_file_locations()) return set(ssip_file_locations) - + def get_name_inchikey_map(self): """Get the name inchikey mapping for all molecules in the phases. @@ -194,4 +194,4 @@ class Phases(object): name_inchikey_map = {} for phase in self.phase_list: name_inchikey_map.update(phase.get_name_inchikey_map()) - return name_inchikey_map \ No newline at end of file + return name_inchikey_map diff --git a/phasecalculator/classes/system.py b/phasecalculator/classes/system.py index a09412c6007221aaeab1555bd936cefecb054074..5242ee26b991d2684a3f82baaaa7b1a4a3352669 100755 --- a/phasecalculator/classes/system.py +++ b/phasecalculator/classes/system.py @@ -268,7 +268,7 @@ class System(object): """ return self.phases.get_ssip_file_locations() - + def get_name_inchikey_map(self): """Get the name inchikey mapping for all molecules in the phases. diff --git a/phasecalculator/io/phasecsvconverter.py b/phasecalculator/io/phasecsvconverter.py index 3430acf865e03e4d8690a728db2876e161c734bd..a46ccb7257e7c2e58b23c508b86279e2e0f1c229 100755 --- a/phasecalculator/io/phasecsvconverter.py +++ b/phasecalculator/io/phasecsvconverter.py @@ -37,6 +37,7 @@ NAME_INCHIKEY_MAP = pureinf.get_name_inchikey_mapping() INCHIKEY_POLARISED_SSIP_FILE_DICT = pureinf.get_ssip_file_dict() INCHIKEY_UNPOLARISED_SSIP_FILE_DICT = pureinf.get_unpolarised_ssip_file_dict() + def convert_csv_file_to_phases(csv_filename, unpolarised_ssips): """Read CSV file and convert contents to Phases. diff --git a/phasecalculator/phasecalculatorcli.py b/phasecalculator/phasecalculatorcli.py index 643ca11fbd0d322bb30ccd82c4d0eb0d7b9619ec..6f5dd2e44cce0dea49133550622f6670e01ee428 100755 --- a/phasecalculator/phasecalculatorcli.py +++ b/phasecalculator/phasecalculatorcli.py @@ -254,6 +254,7 @@ def run_system_collection(system_collection, **kwargs): for system_info in system_collection.system_list: phasecrun.run_all_analysis(system_info, **kwargs) + def get_acceptable_solvent_names(): """Get Acceptable solvent names. @@ -265,7 +266,8 @@ def get_acceptable_solvent_names(): """ solvent_names = pureinf.get_name_inchikey_mapping().keys() return "\n".join(solvent_names) - + + def solvent_names(args): """Output solvent names by using a logger. @@ -276,6 +278,7 @@ def solvent_names(args): """ INFO_LOGGER.info("Solvent names:\n%s", get_acceptable_solvent_names()) + def create_phasecalculator_argparser(): """Create Argument parser for Phasecalculator module. @@ -296,11 +299,13 @@ similarity and VLE analysis for solvents.""" subparsers = phase_argparser.add_subparsers(title="commands", dest="command") calc_description = """Calculation runner based on input System XML.""" - calc_epilog = textwrap.dedent("""Example Usage: + calc_epilog = textwrap.dedent( + """Example Usage: python -m phasecalculator calculate -f systemcollection.xml -Where systemcollection.xml was generated with inpgen. For large phase sets you need to set memreq to match your current hardware limit.""") +Where systemcollection.xml was generated with inpgen. For large phase sets you need to set memreq to match your current hardware limit.""" + ) calc_argparser = subparsers.add_parser( "calculate", @@ -326,13 +331,15 @@ Where systemcollection.xml was generated with inpgen. For large phase sets you n calc_argparser.set_defaults(func=process_phasecalculator) inpgen_description = """Input SystemCollection XML generation.""" - inpgen_epilog = textwrap.dedent("""\ + inpgen_epilog = textwrap.dedent( + """\ Example usage: python -m phasecalculator inpgen -p $CONDA_PREFIX/lib/python3.7/site-packages/phasecalculator/test/resources/examplephasecomp.csv -f -j PATH_TO_JAR Where PATH_TO_JAR is replaced with the SSIP phasetransfer jar file location. -""") +""" + ) inpgen_argparser = subparsers.add_parser( "inpgen", @@ -372,17 +379,29 @@ Where systemcollection.xml was generated with inpgen. For large phase sets you n "-v", "--vle", action="store_true", help="Calculate VLE for input solvents" ) inpgen_argparser.add_argument( - "--filename", type=str, default="systemcollection.xml", + "--filename", + type=str, + default="systemcollection.xml", help="filename for XML file.", ) ssip_desc = inpgen_argparser.add_mutually_exclusive_group(required=False) - ssip_desc.add_argument("--polarised", action="store_false", dest="unpolarised_ssips", - help="Use unpolarised SSIP descriptions in calculations") - ssip_desc.add_argument("--unpolarised", action="store_true", dest="unpolarised_ssips", - help="Use polarised SSIP descriptions in calculations") + ssip_desc.add_argument( + "--polarised", + action="store_false", + dest="unpolarised_ssips", + help="Use unpolarised SSIP descriptions in calculations", + ) + ssip_desc.add_argument( + "--unpolarised", + action="store_true", + dest="unpolarised_ssips", + help="Use polarised SSIP descriptions in calculations", + ) inpgen_argparser.set_defaults(func=process_inputgen, unpolarised_ssips=False) solvname_description = """Display acceptable solvent molecule names for inclusion in a phases csv file.""" - solvnames_epilog = "Solvent molecule names:\n" + get_acceptable_solvent_names() + "\n" + solvnames_epilog = ( + "Solvent molecule names:\n" + get_acceptable_solvent_names() + "\n" + ) solvent_nameparser = subparsers.add_parser( "solventnames", description=solvname_description, diff --git a/phasecalculator/runners/fgipanalysisrunner.py b/phasecalculator/runners/fgipanalysisrunner.py index c0cd7ab92480c0f8443c7a31a927b03c62dbeb09..2fd402d82b05c3c54ab20ea40e931cb0a8df2fbb 100755 --- a/phasecalculator/runners/fgipanalysisrunner.py +++ b/phasecalculator/runners/fgipanalysisrunner.py @@ -34,7 +34,12 @@ LOGGER.setLevel(logging.WARN) def calc_energies_and_fgips( - jar_path, energy_xml_filename, frac_occ_filename, solvent_filename, directory_base, **kwargs + jar_path, + energy_xml_filename, + frac_occ_filename, + solvent_filename, + directory_base, + **kwargs ): """Run phasetransfer calculation and generate FGIPs for input solvent. @@ -68,8 +73,7 @@ def calc_energies_and_fgips( temperature = kwargs.get("temperature", 298.0) temperature_unit = kwargs.get("temperature_unit", "KELVIN") run_binding_energy_calculation( - jar_path, energy_xml_filename, frac_occ_filename, - solvent_filename, **kwargs + jar_path, energy_xml_filename, frac_occ_filename, solvent_filename, **kwargs ) directory = generate_directory(directory_base, temperature, temperature_unit) out_res, polynomial_filename_list = extract_solvents_and_generate_polynomials( @@ -201,6 +205,5 @@ def run_binding_energy_calculation( """ return phaserun.run_phasetransfer_binding_energy( - jar_path, output_filename, frac_occ_filename, - solvent_filename, **kwargs + jar_path, output_filename, frac_occ_filename, solvent_filename, **kwargs ) diff --git a/phasecalculator/runners/phasecalculatorrunner.py b/phasecalculator/runners/phasecalculatorrunner.py index 1fd76f4aaa12f10589d41debddbaed9715065d3f..4d15429f1eefd677e044f07c1ade175dac2d15f8 100755 --- a/phasecalculator/runners/phasecalculatorrunner.py +++ b/phasecalculator/runners/phasecalculatorrunner.py @@ -189,12 +189,12 @@ def run_vle_analysis(system_info, phase_filename, **kwargs): """ jar_path = system_info.runtime_information.phasetransfer_jar phase_output_filename = create_phase_output_filename(phase_filename) - csv_filename = create_phase_summary_filename(system_info.runtime_information.output_dir, - phase_filename) + csv_filename = create_phase_summary_filename( + system_info.runtime_information.output_dir, phase_filename + ) create_output_dir(system_info) vlerun.calculate_and_process_vle_data( - jar_path, phase_filename, phase_output_filename, - csv_filename, **kwargs + jar_path, phase_filename, phase_output_filename, csv_filename, **kwargs ) @@ -215,6 +215,7 @@ def create_output_dir(system_info): output_path.mkdir(parents=True, exist_ok=True) return output_path.as_posix() + def create_phase_summary_filename(output_dir, phase_filename): """Create phase summary CSV filename. @@ -231,8 +232,11 @@ def create_phase_summary_filename(output_dir, phase_filename): CSV filename. """ - summary_filename = phase_filename.split("/")[-1].replace(".xml", "calculation_summary.csv") - return (pathlib.Path(output_dir) /summary_filename).as_posix() + summary_filename = phase_filename.split("/")[-1].replace( + ".xml", "calculation_summary.csv" + ) + return (pathlib.Path(output_dir) / summary_filename).as_posix() + def create_free_energy_output_filename(solvent_filename): """Create free energy filename for solvent file. @@ -284,6 +288,7 @@ def create_fractional_occupancy_filename(solvent_filename): """ return solvent_filename.replace(".xml", "_fracocc.xml") + def create_phase_output_filename(phase_filename): """Create phase output filename. diff --git a/phasecalculator/runners/phasetransferrunner.py b/phasecalculator/runners/phasetransferrunner.py index d339996745a241515d2b6dcb899340d973b43400..a0bd752324f6822d05164127b0d42380b34935af 100755 --- a/phasecalculator/runners/phasetransferrunner.py +++ b/phasecalculator/runners/phasetransferrunner.py @@ -264,8 +264,7 @@ def generate_phasetransfer_binding_args( """ jar_args = make_java_arguments(jar_path, memory_req=kwargs.pop("memory_req", None)) - binding_args = ["--energies", "solvationbinding", - "-f", frac_occ_filename ] + binding_args = ["--energies", "solvationbinding", "-f", frac_occ_filename] solvent_args = generate_solvent_calc_args( output_filename, solvent_filename, **kwargs ) diff --git a/phasecalculator/runners/phasexmlcreatorrunner.py b/phasecalculator/runners/phasexmlcreatorrunner.py index c6c4a5cd1085ed8e7d474ad923d72f8322f0e956..1d2cb7a9a88a043fa9e5679b89c934ab164e4e13 100755 --- a/phasecalculator/runners/phasexmlcreatorrunner.py +++ b/phasecalculator/runners/phasexmlcreatorrunner.py @@ -55,20 +55,32 @@ def create_phase_and_solvent_files(system_info, filestem="system", **kwargs): """ create_scratch_dir(system_info) - name_inchikey_map = kwargs.pop("name_inchikey_map", system_info.get_name_inchikey_map()) + name_inchikey_map = kwargs.pop( + "name_inchikey_map", system_info.get_name_inchikey_map() + ) phase_file = None solvent_list = None - LOGGER.info("System calcs: VLE: %s, FGIP: %s, SIM: %s", system_info.calc_vle(), - system_info.calc_fgip(), system_info.calc_similarity()) + LOGGER.info( + "System calcs: VLE: %s, FGIP: %s, SIM: %s", + system_info.calc_vle(), + system_info.calc_fgip(), + system_info.calc_similarity(), + ) if system_info.calc_vle(): - phase_file = create_phase_file(system_info, filestem + "phase", - name_inchikey_map=name_inchikey_map, - **kwargs) + phase_file = create_phase_file( + system_info, + filestem + "phase", + name_inchikey_map=name_inchikey_map, + **kwargs + ) if system_info.calc_fgip() or system_info.calc_similarity(): LOGGER.info("Creating solvents") - solvent_list = create_solvent_files(system_info, filestem + "solvent", - name_inchikey_map=name_inchikey_map, - **kwargs) + solvent_list = create_solvent_files( + system_info, + filestem + "solvent", + name_inchikey_map=name_inchikey_map, + **kwargs + ) return phase_file, solvent_list diff --git a/phasecalculator/runners/vleanalysisrunner.py b/phasecalculator/runners/vleanalysisrunner.py index 801460a6a7ad9817d55e87a8f9ff05e5680e88ad..0d3a89cc200f70063c8fb0cf8ba28dfff07ee21c 100755 --- a/phasecalculator/runners/vleanalysisrunner.py +++ b/phasecalculator/runners/vleanalysisrunner.py @@ -28,7 +28,10 @@ logging.basicConfig() LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.WARN) -def calculate_and_process_vle_data(jar_path, phase_filename, phase_output_filename, csv_filename, **kwargs): + +def calculate_and_process_vle_data( + jar_path, phase_filename, phase_output_filename, csv_filename, **kwargs +): """Calculate and process VLE data. Parameters @@ -76,6 +79,7 @@ def process_vle_data(calculated_phase_filename, csv_filename): """ return vleanalysis.process_vle_data(calculated_phase_filename, csv_filename) + def run_vle_calculation(jar_path, phase_filename, output_filename, **kwargs): """Run VLE phase calculation. diff --git a/phasecalculator/test/analysistest/fgipanalysis_test.py b/phasecalculator/test/analysistest/fgipanalysis_test.py index e17048715fca69af19694cf7b6eb27e6e268c54b..a251fdc044fffb94910f844d9bbb1046fb4546f6 100755 --- a/phasecalculator/test/analysistest/fgipanalysis_test.py +++ b/phasecalculator/test/analysistest/fgipanalysis_test.py @@ -85,7 +85,10 @@ class FGIPAnalysisTestCase(unittest.TestCase): \label{fig:1-butanol0_164528302water0_835471698solvationmap} \end{figure} """ - self.frac_occ_inf_dict = fgipanalysis.solvmapgen.fractionaloccupancycalculator.read_fractional_occupancy_information(self.frac_occ_filename) + self.frac_occ_inf_dict = fgipanalysis.solvmapgen.fractionaloccupancycalculator.read_fractional_occupancy_information( + self.frac_occ_filename + ) + def tearDown(self): """Clean up after tests. @@ -156,7 +159,9 @@ class FGIPAnalysisTestCase(unittest.TestCase): 8, ) self.assertListEqual([(0, 0)], plot_outputs) - self.assertEqual(["1-butanol0.164528302water0.835471698_solv_map.svg"], filenames) + self.assertEqual( + ["1-butanol0.164528302water0.835471698_solv_map.svg"], filenames + ) self.assertTrue(pathlib.Path(self.matrix_file).is_file()) self.assertTrue(pathlib.Path(self.solvent_map).is_file()) diff --git a/phasecalculator/test/analysistest/vleanalysis_test.py b/phasecalculator/test/analysistest/vleanalysis_test.py index d58e2692c6afd12c59463fb9c25210caaf9070ab..772265c3c561cc862300adbaf97761268c145665 100755 --- a/phasecalculator/test/analysistest/vleanalysis_test.py +++ b/phasecalculator/test/analysistest/vleanalysis_test.py @@ -33,6 +33,7 @@ LOGGER.setLevel(logging.WARN) class VLEAnalysisTestCase(unittest.TestCase): """Test case for VLE analysis methods.""" + def setUp(self): """Set up environment for tests. @@ -41,7 +42,7 @@ class VLEAnalysisTestCase(unittest.TestCase): None. """ - self.maxDiff=None + self.maxDiff = None parent_directory = pathlib.Path(__file__).parents[1] self.calculated_phase_file = ( (parent_directory / "resources" / "expected_phasecalculated.xml") @@ -53,9 +54,14 @@ class VLEAnalysisTestCase(unittest.TestCase): .absolute() .as_posix() ) - self.mixture_info_dict = vleanalysis.read_data_from_mixtures(self.calculated_phase_file) - self.processed_list = vleanalysis.convert_mixture_container_dict_to_list(self.mixture_info_dict) + self.mixture_info_dict = vleanalysis.read_data_from_mixtures( + self.calculated_phase_file + ) + self.processed_list = vleanalysis.convert_mixture_container_dict_to_list( + self.mixture_info_dict + ) self.output_file = "phase_summary.csv" + def tearDown(self): """Clean up after tests. @@ -66,6 +72,7 @@ class VLEAnalysisTestCase(unittest.TestCase): """ if os.path.isfile(self.output_file): os.remove(self.output_file) + def test_process_vle_data(self): """Test expected file is produced. @@ -80,6 +87,7 @@ class VLEAnalysisTestCase(unittest.TestCase): with open(self.expected_phas_csv, "r") as exp_file: expected_contents = exp_file.read() self.assertMultiLineEqual(expected_contents, actual_contents) + def test_write_data_to_csv(self): """Test Expected file is produced. @@ -94,6 +102,7 @@ class VLEAnalysisTestCase(unittest.TestCase): with open(self.expected_phas_csv, "r") as exp_file: expected_contents = exp_file.read() self.assertMultiLineEqual(expected_contents, actual_contents) + def test_convert_mixture_container_dict_to_list(self): """Test expected list created. @@ -102,20 +111,29 @@ class VLEAnalysisTestCase(unittest.TestCase): None. """ - expected_list = [['1-butanol0.165water0.835298.000KELVIN', - 298.0, 'GAS', - 'LRHPLDYGYMQRHN-UHFFFAOYSA-N', - '0.0000021914', - 'XLYOFNOQVPJJNP-UHFFFAOYSA-N', - '0.0008190888'], - ['1-butanol0.165water0.835298.000KELVIN', - 298.0,'CONDENSED', - 'LRHPLDYGYMQRHN-UHFFFAOYSA-N', - '4.4440094829', - 'XLYOFNOQVPJJNP-UHFFFAOYSA-N', - '30.7036536932']] + expected_list = [ + [ + "1-butanol0.165water0.835298.000KELVIN", + 298.0, + "GAS", + "LRHPLDYGYMQRHN-UHFFFAOYSA-N", + "0.0000021914", + "XLYOFNOQVPJJNP-UHFFFAOYSA-N", + "0.0008190888", + ], + [ + "1-butanol0.165water0.835298.000KELVIN", + 298.0, + "CONDENSED", + "LRHPLDYGYMQRHN-UHFFFAOYSA-N", + "4.4440094829", + "XLYOFNOQVPJJNP-UHFFFAOYSA-N", + "30.7036536932", + ], + ] actual_list = self.processed_list self.assertListEqual(expected_list, actual_list) + def test_convert_phase_dict_to_list(self): """Test conversion of phase information. @@ -124,14 +142,22 @@ class VLEAnalysisTestCase(unittest.TestCase): None. """ - expected_list = ['1-butanol0.165water0.835298.000KELVIN', - 298.0, 'GAS', - 'LRHPLDYGYMQRHN-UHFFFAOYSA-N', - '0.0000021914', - 'XLYOFNOQVPJJNP-UHFFFAOYSA-N', - '0.0008190888'] - actual_list = vleanalysis.convert_phase_dict_to_list(self.mixture_info_dict['1-butanol0.165water0.835298.000KELVIN']['1-butanol0.165water0.835298.000KELVINGAS']) + expected_list = [ + "1-butanol0.165water0.835298.000KELVIN", + 298.0, + "GAS", + "LRHPLDYGYMQRHN-UHFFFAOYSA-N", + "0.0000021914", + "XLYOFNOQVPJJNP-UHFFFAOYSA-N", + "0.0008190888", + ] + actual_list = vleanalysis.convert_phase_dict_to_list( + self.mixture_info_dict["1-butanol0.165water0.835298.000KELVIN"][ + "1-butanol0.165water0.835298.000KELVINGAS" + ] + ) self.assertEqual(expected_list, actual_list) + def test_read_data_from_mixtures(self): """Test data is read in as expected. @@ -140,8 +166,42 @@ class VLEAnalysisTestCase(unittest.TestCase): None. """ - expected_dict = {'1-butanol0.165water0.835298.000KELVIN':{'1-butanol0.165water0.835298.000KELVINGAS': {'phase_type': 'GAS', 'temperature_value': 298.0, 'temperature_unit': 'KELVIN', 'solvent_id': '1-butanol0.165water0.835298.000KELVIN', 'concentrations': {'LRHPLDYGYMQRHN-UHFFFAOYSA-N': {'concentration_value': 2.1914464984900333e-06, 'concentration_unit': 'MOLAR'}, 'XLYOFNOQVPJJNP-UHFFFAOYSA-N': {'concentration_value': 0.0008190888071552708, 'concentration_unit': 'MOLAR'}}}, - '1-butanol0.165water0.835298.000KELVINCONDENSED': {'phase_type': 'CONDENSED', 'temperature_value': 298.0, 'temperature_unit': 'KELVIN', 'solvent_id': '1-butanol0.165water0.835298.000KELVIN', 'concentrations': {'LRHPLDYGYMQRHN-UHFFFAOYSA-N': {'concentration_value': 4.444009482942443, 'concentration_unit': 'MOLAR'}, 'XLYOFNOQVPJJNP-UHFFFAOYSA-N': {'concentration_value': 30.70365369323062, 'concentration_unit': 'MOLAR'}}}}} + expected_dict = { + "1-butanol0.165water0.835298.000KELVIN": { + "1-butanol0.165water0.835298.000KELVINGAS": { + "phase_type": "GAS", + "temperature_value": 298.0, + "temperature_unit": "KELVIN", + "solvent_id": "1-butanol0.165water0.835298.000KELVIN", + "concentrations": { + "LRHPLDYGYMQRHN-UHFFFAOYSA-N": { + "concentration_value": 2.1914464984900333e-06, + "concentration_unit": "MOLAR", + }, + "XLYOFNOQVPJJNP-UHFFFAOYSA-N": { + "concentration_value": 0.0008190888071552708, + "concentration_unit": "MOLAR", + }, + }, + }, + "1-butanol0.165water0.835298.000KELVINCONDENSED": { + "phase_type": "CONDENSED", + "temperature_value": 298.0, + "temperature_unit": "KELVIN", + "solvent_id": "1-butanol0.165water0.835298.000KELVIN", + "concentrations": { + "LRHPLDYGYMQRHN-UHFFFAOYSA-N": { + "concentration_value": 4.444009482942443, + "concentration_unit": "MOLAR", + }, + "XLYOFNOQVPJJNP-UHFFFAOYSA-N": { + "concentration_value": 30.70365369323062, + "concentration_unit": "MOLAR", + }, + }, + }, + } + } actual_dict = self.mixture_info_dict LOGGER.debug(actual_dict) - self.assertDictEqual(expected_dict, actual_dict) \ No newline at end of file + self.assertDictEqual(expected_dict, actual_dict) diff --git a/phasecalculator/test/classestest/phase_test.py b/phasecalculator/test/classestest/phase_test.py index f650ece3c85dec8ceffb58b19013c6ea85aec852..1c52cf3a02f7cede71b02b6e0a92e28bda2b15fa 100755 --- a/phasecalculator/test/classestest/phase_test.py +++ b/phasecalculator/test/classestest/phase_test.py @@ -138,6 +138,7 @@ class PhaseTestCase(unittest.TestCase): expected_list = [self.molecule.ssip_file_loc] actual_list = self.phase.get_ssip_file_locations() self.assertListEqual(expected_list, actual_list) + def test_get_name_inchikey_map(self): """Test expected name: inchikey mapping is returned. @@ -146,6 +147,6 @@ class PhaseTestCase(unittest.TestCase): None. """ - expected_dict = {'water': 'XLYOFNOQVPJJNP-UHFFFAOYSA-N'} + expected_dict = {"water": "XLYOFNOQVPJJNP-UHFFFAOYSA-N"} actual_dict = self.phase.get_name_inchikey_map() - self.assertDictEqual(expected_dict, actual_dict) \ No newline at end of file + self.assertDictEqual(expected_dict, actual_dict) diff --git a/phasecalculator/test/classestest/phases_test.py b/phasecalculator/test/classestest/phases_test.py index 6eb885040bfef44181bf61712e0259acb0b1b373..260a3fb2e38adb66e2ba24f32bce74a0e685ee16 100755 --- a/phasecalculator/test/classestest/phases_test.py +++ b/phasecalculator/test/classestest/phases_test.py @@ -145,6 +145,7 @@ class PhasesTestCase(unittest.TestCase): expected_set = {self.molecule.ssip_file_loc} actual_set = self.phases.get_ssip_file_locations() self.assertSetEqual(expected_set, actual_set) + def test_get_name_inchikey_map(self): """Test expected name: inchikey mapping is returned. @@ -153,6 +154,6 @@ class PhasesTestCase(unittest.TestCase): None. """ - expected_dict = {'water': 'XLYOFNOQVPJJNP-UHFFFAOYSA-N'} + expected_dict = {"water": "XLYOFNOQVPJJNP-UHFFFAOYSA-N"} actual_dict = self.phases.get_name_inchikey_map() self.assertDictEqual(expected_dict, actual_dict) diff --git a/phasecalculator/test/classestest/system_test.py b/phasecalculator/test/classestest/system_test.py index e02dbeb7e0d42690cb94964c6fae71209700c78e..05cdc35089fb5a7b0fd2335486219e2322e5df84 100755 --- a/phasecalculator/test/classestest/system_test.py +++ b/phasecalculator/test/classestest/system_test.py @@ -222,7 +222,7 @@ class SystemTestCase(unittest.TestCase): expected_set = {self.molecule.ssip_file_loc} actual_set = self.system.get_ssip_file_locations() self.assertSetEqual(expected_set, actual_set) - + def test_get_name_inchikey_map(self): """Test expected name: inchikey mapping is returned. @@ -231,7 +231,7 @@ class SystemTestCase(unittest.TestCase): None. """ - expected_dict = {'water': 'XLYOFNOQVPJJNP-UHFFFAOYSA-N'} + expected_dict = {"water": "XLYOFNOQVPJJNP-UHFFFAOYSA-N"} actual_dict = self.system.get_name_inchikey_map() self.assertDictEqual(expected_dict, actual_dict) diff --git a/phasecalculator/test/iotest/phasecsvconverter_test.py b/phasecalculator/test/iotest/phasecsvconverter_test.py index e24798f4f3f495867e104385b1c8aed10504be14..26561972c696b1858c51fdf9dc43ac23a5050b6e 100755 --- a/phasecalculator/test/iotest/phasecsvconverter_test.py +++ b/phasecalculator/test/iotest/phasecsvconverter_test.py @@ -77,7 +77,7 @@ class PhaseCSVConverterTestCase(unittest.TestCase): None. """ - actual_phases = phasecsv.convert_csv_file_to_phases(self.example_csv,False) + actual_phases = phasecsv.convert_csv_file_to_phases(self.example_csv, False) self.assertEqual(self.phases, actual_phases) def test_read_csv_file(self): diff --git a/phasecalculator/test/iotest/phasetransferxmlcreator_test.py b/phasecalculator/test/iotest/phasetransferxmlcreator_test.py index d5757df143d5778374feb9c212dab9e8bc5b3bc4..f982f18ba743511e10c3e137a6b4de9497d0e54c 100755 --- a/phasecalculator/test/iotest/phasetransferxmlcreator_test.py +++ b/phasecalculator/test/iotest/phasetransferxmlcreator_test.py @@ -277,8 +277,12 @@ class PhasetransferXMLCreatorTestCase(unittest.TestCase): actual_info_list = self.solvent_info_list self.assertEqual(1, len(actual_info_list)) actual_information = actual_info_list[0] - self.assertEqual("1-butanol0.164528302water0.835471698", actual_information["solvent_name"]) - self.assertEqual("1-butanol0.164528302water0.835471698", actual_information["solvent_id"]) + self.assertEqual( + "1-butanol0.164528302water0.835471698", actual_information["solvent_name"] + ) + self.assertEqual( + "1-butanol0.164528302water0.835471698", actual_information["solvent_id"] + ) actual_list = actual_information["ssip_info_list"] for entry, information_dict in enumerate(actual_list): with self.subTest(entry=entry): diff --git a/phasecalculator/test/runnerstest/fgipanalysisrunner_test.py b/phasecalculator/test/runnerstest/fgipanalysisrunner_test.py index e305745b8c803235e9e64294db72a1d611a96b11..9a8cf182061ec5a776df9f9eaa4bb7398f5cfdf0 100755 --- a/phasecalculator/test/runnerstest/fgipanalysisrunner_test.py +++ b/phasecalculator/test/runnerstest/fgipanalysisrunner_test.py @@ -66,7 +66,7 @@ class FGIPAnalysisRunnerTestCase(unittest.TestCase): (self.parent_directory / "resources/expected_solvent_fracocc.xml") .absolute() .as_posix() - ) + ) self.example_jar = ( (self.parent_directory / "resources" / "example.jar").absolute().as_posix() ) @@ -79,15 +79,24 @@ class FGIPAnalysisRunnerTestCase(unittest.TestCase): self.directory = fgiprunner.generate_directory( self.directory_base, 298.0, "KELVIN" ) - self.out_res, self.filename_list = fgiprunner.extract_solvents_and_generate_polynomials( + ( + self.out_res, + self.filename_list, + ) = fgiprunner.extract_solvents_and_generate_polynomials( self.solvent_filename, self.binding_output_filename, self.directory ) - self.energy_xmlfile = "fgip/298_0K/1-butanol0.164528302water0.835471698binding.xml" + self.energy_xmlfile = ( + "fgip/298_0K/1-butanol0.164528302water0.835471698binding.xml" + ) self.poly_file = ( "fgip/298_0K/1-butanol0.164528302water0.835471698binding_poly_fit_split.csv" ) - self.matrix_file = "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.csv" - self.solvent_map = "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.svg" + self.matrix_file = ( + "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.csv" + ) + self.solvent_map = ( + "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.svg" + ) self.fgip_file = "fgip/298_0K/1-butanol0_164528302water0_835471698_FGIP.svg" self.expected_latex = r""" \begin{figure}[H] @@ -149,6 +158,7 @@ class FGIPAnalysisRunnerTestCase(unittest.TestCase): """ self.assertTrue(pathlib.Path(self.directory).is_dir()) + @pytest.mark.xfail def test_run_fgip_analysis(self): """Test FGIP analysis is run. @@ -208,7 +218,9 @@ class FGIPAnalysisRunnerTestCase(unittest.TestCase): "298.0", ] process = fgiprunner.run_binding_energy_calculation( - self.example_jar, self.binding_output_filename, - self.frac_occ_filename, self.solvent_filename + self.example_jar, + self.binding_output_filename, + self.frac_occ_filename, + self.solvent_filename, ) self.assertListEqual(expected_args, process.args) diff --git a/phasecalculator/test/runnerstest/phasecalculatorrunner_test.py b/phasecalculator/test/runnerstest/phasecalculatorrunner_test.py index 760805a03aaf2947a7ccb70fc44c3dcbcd3e49a9..192b3b5cf0c9d42aa5b910dc0312465cba5423ae 100755 --- a/phasecalculator/test/runnerstest/phasecalculatorrunner_test.py +++ b/phasecalculator/test/runnerstest/phasecalculatorrunner_test.py @@ -137,8 +137,12 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase): self.poly_file = ( "fgip/298_0K/1-butanol0.1645water0.8355binding_poly_fit_split.csv" ) - self.matrix_file = "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.csv" - self.solvent_map = "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.svg" + self.matrix_file = ( + "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.csv" + ) + self.solvent_map = ( + "fgip/298_0K/1-butanol0.164528302water0.835471698_solv_map.svg" + ) self.fgip_file = "fgip/298_0K/1-butanol0_164528302water0_835471698_FGIP.svg" self.similarity_file = "fgip/similaritymatrix.csv" self.expected_latex = r""" @@ -183,8 +187,11 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase): self.expected_binding_file, "scratch/systemsolvent_298.0Kbinding.xml" ) shutil.copyfile(self.expected_free_file, "scratch/systemsolvent_298.0Kfree.xml") - shutil.copyfile(self.frac_occ_filename, "scratch/systemsolvent_298.0K_fracocc.xml") + shutil.copyfile( + self.frac_occ_filename, "scratch/systemsolvent_298.0K_fracocc.xml" + ) shutil.copyfile(self.expected_phase_output_filename, self.phase_out_file) + @pytest.mark.xfail def test_run_all_analysis(self): """Test @@ -271,8 +278,11 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase): """ expected_filename = "output/systemphasecalculation_summary.csv" - actual_filename = pcalcrun.create_phase_summary_filename("output", "scratch/systemphase.xml") + actual_filename = pcalcrun.create_phase_summary_filename( + "output", "scratch/systemphase.xml" + ) self.assertEqual(expected_filename, actual_filename) + def test_create_free_energy_output_filename(self): """Test expected filename produced. @@ -310,8 +320,11 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase): """ expected_filename = "solvent_filename_fracocc.xml" - actual_filename = pcalcrun.create_fractional_occupancy_filename("solvent_filename.xml") + actual_filename = pcalcrun.create_fractional_occupancy_filename( + "solvent_filename.xml" + ) self.assertEqual(expected_filename, actual_filename) + def test_create_phase_output_filename(self): """Test expected filename produced. @@ -332,9 +345,10 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase): None. """ - phase_filename, solvent_filename_list = pcalcrun.create_phase_and_solvent_xml_files( - self.system - ) + ( + phase_filename, + solvent_filename_list, + ) = pcalcrun.create_phase_and_solvent_xml_files(self.system) self.assertEqual("scratch/systemphase.xml", phase_filename) with open(phase_filename, "r") as act_file: actual_contents = act_file.read() diff --git a/phasecalculator/test/runnerstest/phasetransferrunner_test.py b/phasecalculator/test/runnerstest/phasetransferrunner_test.py index d4020b3dd8705a5c086687074fe06128f873740e..5333c2f8d7423df07a246f6b6e71411779cdf8de 100755 --- a/phasecalculator/test/runnerstest/phasetransferrunner_test.py +++ b/phasecalculator/test/runnerstest/phasetransferrunner_test.py @@ -49,7 +49,7 @@ class PhasetransferRunnerTestCase(unittest.TestCase): self.r.replace( "phasecalculator.runners.phasetransferrunner.run_calculation", self.Popen ) - + self.addCleanup(self.r.restore) parent_directory = pathlib.Path(__file__).parents[1] self.example_jar = ( @@ -158,8 +158,10 @@ class PhasetransferRunnerTestCase(unittest.TestCase): "298.0", ] process = phaserun.run_phasetransfer_binding_energy( - self.example_jar, self.binding_output_filename, - self.frac_occ_filename, self.solvent_filename + self.example_jar, + self.binding_output_filename, + self.frac_occ_filename, + self.solvent_filename, ) self.assertListEqual(expected_args, process.args) @@ -299,8 +301,10 @@ class PhasetransferRunnerTestCase(unittest.TestCase): "298.0", ] actual_args = phaserun.generate_phasetransfer_binding_args( - self.example_jar, self.binding_output_filename, - self.frac_occ_filename, self.solvent_filename + self.example_jar, + self.binding_output_filename, + self.frac_occ_filename, + self.solvent_filename, ) self.assertListEqual(expected_args, actual_args) diff --git a/phasecalculator/test/runnerstest/phasexmlcreatorrunner_test.py b/phasecalculator/test/runnerstest/phasexmlcreatorrunner_test.py index 717bd019256eb976856fa2008a85f368b63c38f5..9613834cbd5afd60a0c7205b5b333c1f30418e3a 100755 --- a/phasecalculator/test/runnerstest/phasexmlcreatorrunner_test.py +++ b/phasecalculator/test/runnerstest/phasexmlcreatorrunner_test.py @@ -114,9 +114,10 @@ class PhaseXMLCreatorRunnerTestCase(unittest.TestCase): None. """ - phase_filename, solvent_filename_list = phasecreaterun.create_phase_and_solvent_files( - self.system - ) + ( + phase_filename, + solvent_filename_list, + ) = phasecreaterun.create_phase_and_solvent_files(self.system) self.assertEqual("scratch/systemphase.xml", phase_filename) with open(phase_filename, "r") as act_file: actual_contents = act_file.read() diff --git a/phasecalculator/test/runnerstest/similarityanalysisrunner_test.py b/phasecalculator/test/runnerstest/similarityanalysisrunner_test.py index 452ccf7b07ec23134f2b49a5331554521be9f13a..0a3b649eb5599cf3b5cc00c8f307f69b89eae425 100755 --- a/phasecalculator/test/runnerstest/similarityanalysisrunner_test.py +++ b/phasecalculator/test/runnerstest/similarityanalysisrunner_test.py @@ -76,8 +76,13 @@ class SimilarityAnalysisRunnerTestCase(unittest.TestCase): ) self.directory = simrun.generate_directory("sim", 298.0, "KELVIN") self.energy_xmlfile = "sim/298_0K/1-butanol0.164528302water0.835471698free.xml" - self.poly_file = "sim/298_0K/1-butanol0.164528302water0.835471698free_poly_fit_split.csv" - self.out_res, self.filename_list = simrun.extract_solvents_and_generate_polynomials( + self.poly_file = ( + "sim/298_0K/1-butanol0.164528302water0.835471698free_poly_fit_split.csv" + ) + ( + self.out_res, + self.filename_list, + ) = simrun.extract_solvents_and_generate_polynomials( self.solvent_filename, self.free_output_filename, self.directory ) self.solv_energy_dict = { diff --git a/phasecalculator/test/runnerstest/vleanalysisrunner_test.py b/phasecalculator/test/runnerstest/vleanalysisrunner_test.py index b5b0e1608da7214cafdb05314b462ab6d2422b95..b5d1522a5cb994af26f00ca71c5140debc3a58ae 100755 --- a/phasecalculator/test/runnerstest/vleanalysisrunner_test.py +++ b/phasecalculator/test/runnerstest/vleanalysisrunner_test.py @@ -72,6 +72,7 @@ class VLEAnalysisRunnerTestCase(unittest.TestCase): .as_posix() ) self.output_file = "phase_summary.csv" + def tearDown(self): """Clean up after tests. @@ -82,6 +83,7 @@ class VLEAnalysisRunnerTestCase(unittest.TestCase): """ if os.path.isfile(self.output_file): os.remove(self.output_file) + def test_calculate_and_process_vle_data(self): """Test expected output produced. @@ -90,15 +92,18 @@ class VLEAnalysisRunnerTestCase(unittest.TestCase): None. """ - vlerun.calculate_and_process_vle_data(self.example_jar, - self.phase_filename, - self.phase_output_filename, - self.output_file) + vlerun.calculate_and_process_vle_data( + self.example_jar, + self.phase_filename, + self.phase_output_filename, + self.output_file, + ) with open(self.output_file, "r") as act_file: actual_contents = act_file.read() with open(self.expected_phas_csv, "r") as exp_file: expected_contents = exp_file.read() self.assertMultiLineEqual(expected_contents, actual_contents) + def test_process_vle_data(self): """Test expected output produced. @@ -113,6 +118,7 @@ class VLEAnalysisRunnerTestCase(unittest.TestCase): with open(self.expected_phas_csv, "r") as exp_file: expected_contents = exp_file.read() self.assertMultiLineEqual(expected_contents, actual_contents) + def test_run_vle_calculation(self): """Test expected system call is made.