diff --git a/requirements.txt b/requirements.txt index 0027d64ad7389589b76fc119c5484676e7c085a8..7ebba3793d027b821f20aea532311f0da02c287d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ STEAM-materials~=2024.7.1 numpy==1.26.4 -pandas==1.5.0 +pandas==2.2.0 wget==3.2 pytest==7.1.3 gmsh==4.11.1 diff --git a/tests/getdp/getdp_test_win.py b/tests/getdp/getdp_test_win.py index 54f8fcf3333963cc31679c7fded5e4ea6cd34b11..55a47fbd21ee86ee0b63e8fb756f548b053627e1 100644 --- a/tests/getdp/getdp_test_win.py +++ b/tests/getdp/getdp_test_win.py @@ -74,8 +74,10 @@ def call_getdp_function(input_dict, model_name, cerngetdp_path, pro_template_pat pro_file = template_pro_file(pro_template_path, model_name, input_dict, outputs_folder_pro) - subprocess.run([getdp_path, pro_file, "-solve", "#1", "-pos", "#1", "-v", "0", "-msh", os.path.join(outputs_folder_msh, f"{model_name}.msh"), "-name", os.path.join(outputs_folder_txt, input_dict['c_function_name'])]) + status = subprocess.run([getdp_path, pro_file, "-solve", "#1", "-pos", "#1", "-v", "0", "-msh", os.path.join(outputs_folder_msh, f"{model_name}.msh"), "-name", os.path.join(outputs_folder_txt, input_dict['c_function_name'])]) - output_file_path = os.path.join(outputs_folder_txt, f"{input_dict['function_name']}.txt") - - return read_output_file(output_file_path) + if status.returncode == 0: + output_file_path = os.path.join(outputs_folder_txt, f"{input_dict['function_name']}.txt") + return read_output_file(output_file_path) + else: + return None diff --git a/tests/getdp/input_test.csv b/tests/getdp/input_test.csv index eeac535baec03a0d00ab5ae51bfd856a1e531267..174c95265657c2827583157b5bd174a9fac1b535 100644 --- a/tests/getdp/input_test.csv +++ b/tests/getdp/input_test.csv @@ -35,7 +35,7 @@ CFUN_Jc_Nb3Sn_Summers_v1,CFUN_Jc_Nb3Sn_Summers_T_B,3,2,0-1-2-3-4,0,[0:10:1000],[ CFUN_Jc_Nb3Sn_Summers_v1,CFUN_Jc_Nb3Sn_Summers_T,4,1,0-1-2-3-4,0,[0:10:1000],12,40690432158,18,29,,,,,, CFUN_Jc_Nb3Sn_Summers_v1,CFUN_Jc_Nb3Sn_Summers_B,4,1,1-0-2-3-4,0,5,[0:3:15],40690432158,18,29,,,,,, CFUN_kAg_v1,CFUN_kAg_T,0,1,0,0,[0:10:1000],,,,,,,,,, -CFUN_kAlAlloy_v1,CFUN_kAlAlloy_T,1,1,0-1,0,[15:10:300],1.89,,,,,,,,, +CFUN_kAlAlloy_v1,CFUN_kAl_T,1,1,0-1,0,[15:10:300],1.89,,,,,,,,, CFUN_kAl1350_v1,CFUN_kAl1350_T,0,1,0,0,[0:10:1000],,,,,,,,,, CFUN_kAl5083_v1,CFUN_kAl5083_T,0,1,0,0,[0:10:1000],,,,,,,,,, CFUN_kAl6061_v1,CFUN_kAl6061_T,0,1,0,0,[0:10:1000],,,,,,,,,, diff --git a/tests/getdp/test_getdp.py b/tests/getdp/test_getdp.py index c8f0fdfc72e1bc9e0e11bd6cc8e5a49454fb0d02..27df2ebbecc5ff31c724b2f45006e4c3a6356d3d 100644 --- a/tests/getdp/test_getdp.py +++ b/tests/getdp/test_getdp.py @@ -27,7 +27,6 @@ def reorder_list(lst, mapping): return ordered_list - class GetDP_tests(unittest.TestCase): @classmethod def setUpClass(cls): @@ -36,7 +35,7 @@ class GetDP_tests(unittest.TestCase): # Create the "outputs" folder cls.pro_template_path = Path.cwd() / 'tests' / 'getdp' - cls.cerngetdp_path = Path.cwd() / 'tests' / 'getdp' / 'tmp_cerngetdp' + cls.cerngetdp_path = Path.cwd() / 'tests' / 'getdp' / 'tmp_cerngetdp' cls.outputs_folder_msh = cls.pro_template_path / 'Outputs_msh' cls.outputs_folder_msh.mkdir(parents=True, exist_ok=True) cls.outputs_folder_txt = cls.pro_template_path / 'Outputs_txt' @@ -44,7 +43,6 @@ class GetDP_tests(unittest.TestCase): cls.outputs_folder_pro = cls.pro_template_path / 'Outputs_pro' cls.outputs_folder_pro.mkdir(parents=True, exist_ok=True) - def test_cfun(self): cerngetdp_path = Path.cwd() / 'tests' / 'getdp' / 'tmp_cerngetdp' if os.path.exists(cerngetdp_path): @@ -60,11 +58,12 @@ class GetDP_tests(unittest.TestCase): num_var_params = int(self.df.iloc[i, 3]) # Get the list of input variable column numbers and create the numpy linspace arrays - input_cols = [6 + j for j in range(num_var_params + num_const_params)] - input_configs = [] - input_var_vals = [] - input_var_configs = [] - input_const_vals = [] + input_cols = [ + 6 + j for j in range(num_var_params + num_const_params)] + input_configs = [] + input_var_vals = [] + input_var_configs = [] + input_const_vals = [] input_const_configs = [] for cols in input_cols: @@ -77,9 +76,11 @@ class GetDP_tests(unittest.TestCase): start = float(col_data[0]) step = float(col_data[1]) end = float(col_data[2]) - input_var_vals.append(np.arange(start, end + step, step)) - input_configs.append(np.arange(start, end + step, step)) - + input_var_vals.append( + np.arange(start, end + step, step)) + input_configs.append( + np.arange(start, end + step, step)) + else: numeric_value = float(col_data) input_const_vals.append(numeric_value) @@ -100,12 +101,10 @@ class GetDP_tests(unittest.TestCase): if np.any(mapping_list != np.arange(0, len(mapping_list))): k = True else: - k= False - + k = False # Loop through each configuration of input variable values for input_vars in input_var_configs: - input_dict = { "c_function_name": function_name, "function_name": GetDP_function_name, @@ -113,65 +112,66 @@ class GetDP_tests(unittest.TestCase): "input_var_vals": input_var_configs, "mapping": mapping_list } + try: # Change the working directory to cerngetdp_path os.chdir(cerngetdp_path) # Call the function and get the expected output from call_getdp_function start_time_getdp = time.time() print(input_dict['function_name']) - expected_output = call_getdp_function(input_dict, input_dict['function_name'], self.cerngetdp_path, self.pro_template_path, self.outputs_folder_msh, self.outputs_folder_pro, self.outputs_folder_txt) + expected_output = call_getdp_function(input_dict, input_dict['function_name'], self.cerngetdp_path, + self.pro_template_path, self.outputs_folder_msh, self.outputs_folder_pro, self.outputs_folder_txt) end_time_getdp = time.time() - - input_var_vals_2d = separate_values(input_var_configs, num_var_params) + assert expected_output is not None + + input_var_vals_2d = separate_values( + input_var_configs, num_var_params) for const_val in input_const_vals: const_val = float(const_val) - input_var_vals_2d.append(np.ones(len(input_var_configs)) * const_val) - - - if(k == True ): + input_var_vals_2d.append( + np.ones(len(input_var_configs)) * const_val) + if (k == True): result_2d = np.vstack(reorder_list(input_var_vals_2d, mapping_list)) - else: - result_2d = np.vstack(input_var_vals_2d) + result_2d = np.vstack(input_var_vals_2d) - sm = SteamMaterials(function_name, result_2d.shape[0], result_2d.shape[1]) - - + sm = SteamMaterials( + function_name, result_2d.shape[0], result_2d.shape[1]) try: actual_output = [] start_time_python = time.time() actual_output = sm.evaluate(result_2d) end_time_python = time.time() - #except OSError as e: - # print(f"Function {function_name} doesn't run. Error: {e}") - # continue except ValueError as e: warning_message = f"Warning: There was a problem with calling {function_name}.dll. Check if the DLL file exists or if the number of arguments is correct." warnings.warn(warning_message, UserWarning) continue # Write the actual_output and expected_output to the output txt file - output_txt_file_path = os.path.join(self.outputs_folder_txt, f"{GetDP_function_name}.txt") + output_txt_file_path = os.path.join( + self.outputs_folder_txt, f"{GetDP_function_name}.txt") # Stack actual_output and expected_output horizontally - stacked_data = np.column_stack((actual_output, expected_output)) + stacked_data = np.column_stack( + (actual_output, expected_output)) # Save the stacked data to the file header = f"Actual Output\tExpected Output\tGetDP Running Time ({end_time_getdp - start_time_getdp} s)\tPython Running Time ({end_time_python - start_time_python} s)" - np.savetxt(output_txt_file_path, stacked_data, fmt="%.18e", delimiter="\t", newline="\n", comments="", header=header) + np.savetxt(output_txt_file_path, stacked_data, fmt="%.18e", + delimiter="\t", newline="\n", comments="", header=header) except AssertionError as e: print(f"Function {function_name} doesn't run. Error: {e}") continue - + try: # Check that the expected and actual output are the same - np.testing.assert_allclose(expected_output, actual_output, rtol=1e-4, atol=1e-4) + np.testing.assert_allclose( + expected_output, actual_output, rtol=1e-4, atol=1e-4) continue except AssertionError as e: print(f"Function {function_name} failed. Error: {e}") -