Skip to content
Snippets Groups Projects
Commit ddcce722 authored by Leon Teichrob's avatar Leon Teichrob
Browse files

Cleaned up generate_ref_data.py

parent 8d2644b8
No related branches found
No related tags found
No related merge requests found
Pipeline #9742372 failed
import itertools
import yaml
import numpy as np
from steammaterials.STEAM_materials import STEAM_materials
from datetime import datetime
from pathlib import Path
import os
import pandas as pd
#!/usr/bin/env python3
import itertools
import yaml
import numpy as np
from steammaterials.STEAM_materials import STEAM_materials
from datetime import datetime
from pathlib import Path
import os
import sys
import pandas as pd
################ FILL THIS IN #################
csv_file = pd.read_csv(Path('../all_material_functions.csv'))
def create_all_ref_files(output_path=None):
repository_root = Path(os.path.dirname(__file__)).parent
if output_path is None:
output_path = repository_root / 'tests' / 'ref_data'
csv_file = pd.read_csv(repository_root / 'all_material_functions.csv')
errors = 0
for i, row in csv_file.iterrows():
if row['make_ref']:
try:
create_ref_file(row, output_path)
except Exception as e:
print(f'Failed to generate reference file for {row["ref_name"]}')
print(f'Failed with error: {e}')
errors += 1
if errors:
print(f'!!! During generation, {errors} errors occurred !!!')
for i in range(len(csv_file)):
if csv_file.iloc[i]['make_ref']:
input_parameters = int(csv_file.iloc[i]['input_parameters'])
gen_by = csv_file.iloc[i]['ref_generated_by']
ref_name = csv_file.iloc[i]['ref_name']
def create_ref_file(row, output_path):
"""
Creates a file to act as reference for the expected output of the given material function.
Expects a dictionary-like `row` containing the number of 'input_parameters', the material name
'ref_name', author 'ref_generated_by' and inputs with 'input{i}'.
"""
parameter_count = int(row['input_parameters'])
ref_name = row['ref_name']
if parameter_count < 1:
raise ValueError('Incorrect number of input parameters for {ref_name}')
# you = 'Tim Mulder'
# # material_function = 'CFUN_rhoHast_v2'
# # input_parameters = 1
# material_function = 'CFUN_rhoCu_NIST_v2'
# input_parameters = 3
###############################################
inputs = [eval(row[f'input{i+1}']) for i in range(parameter_count)]
input_mat = np.array(list(itertools.product(*inputs))).T
out = STEAM_materials(ref_name, input_mat.shape[0], input_mat.shape[1]).evaluate(input_mat)
if input_parameters == 1:
input1 = eval(csv_file.iloc[i]['input1'])
numpy2d = input1.reshape((1, len(input1)))
input_list = np.array([[i] for i in input1])
elif input_parameters == 2:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input_list = np.array([i for i in itertools.product(input1, input2)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1]))
elif input_parameters == 3:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input_list = np.array([i for i in itertools.product(input1, input2, input3)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2]))
elif input_parameters == 4:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3]))
elif input_parameters == 5:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4]))
elif input_parameters == 6:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input6 = eval(csv_file.iloc[i]['input6'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5, input6)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4], input_list[:, 5]))
elif input_parameters == 7:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input6 = eval(csv_file.iloc[i]['input6'])
input7 = eval(csv_file.iloc[i]['input7'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5, input6, input7)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4], input_list[:, 5], input_list[:, 6]))
elif input_parameters == 8:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input6 = eval(csv_file.iloc[i]['input6'])
input7 = eval(csv_file.iloc[i]['input7'])
input8 = eval(csv_file.iloc[i]['input8'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5, input6, input7, input8)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4], input_list[:, 5], input_list[:, 6], input_list[:, 7]))
elif input_parameters == 9:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input6 = eval(csv_file.iloc[i]['input6'])
input7 = eval(csv_file.iloc[i]['input7'])
input8 = eval(csv_file.iloc[i]['input8'])
input9 = eval(csv_file.iloc[i]['input9'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5, input6, input7, input8, input9)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4], input_list[:, 5], input_list[:, 6], input_list[:, 7], input_list[:, 8]))
elif input_parameters == 10:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input6 = eval(csv_file.iloc[i]['input6'])
input7 = eval(csv_file.iloc[i]['input7'])
input8 = eval(csv_file.iloc[i]['input8'])
input9 = eval(csv_file.iloc[i]['input9'])
input10 = eval(csv_file.iloc[i]['input10'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4], input_list[:, 5], input_list[:, 6], input_list[:, 7], input_list[:, 8], input_list[:, 9]))
elif input_parameters == 11:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input6 = eval(csv_file.iloc[i]['input6'])
input7 = eval(csv_file.iloc[i]['input7'])
input8 = eval(csv_file.iloc[i]['input8'])
input9 = eval(csv_file.iloc[i]['input9'])
input10 = eval(csv_file.iloc[i]['input10'])
input11 = eval(csv_file.iloc[i]['input11'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4], input_list[:, 5], input_list[:, 6], input_list[:, 7], input_list[:, 8], input_list[:, 9], input_list[:, 10]))
elif input_parameters == 12:
input1 = eval(csv_file.iloc[i]['input1'])
input2 = eval(csv_file.iloc[i]['input2'])
input3 = eval(csv_file.iloc[i]['input3'])
input4 = eval(csv_file.iloc[i]['input4'])
input5 = eval(csv_file.iloc[i]['input5'])
input6 = eval(csv_file.iloc[i]['input6'])
input7 = eval(csv_file.iloc[i]['input7'])
input8 = eval(csv_file.iloc[i]['input8'])
input9 = eval(csv_file.iloc[i]['input9'])
input10 = eval(csv_file.iloc[i]['input10'])
input11 = eval(csv_file.iloc[i]['input11'])
input12 = eval(csv_file.iloc[i]['input12'])
input_list = np.array([i for i in itertools.product(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12)])
numpy2d = np.vstack((input_list[:, 0], input_list[:, 1], input_list[:, 2], input_list[:, 3], input_list[:, 4], input_list[:, 5], input_list[:, 6], input_list[:, 7], input_list[:, 8], input_list[:, 9], input_list[:, 10], input_list[:, 11]))
else:
print('Wrong amount of input parameters')
dictionary_output = {
'author': row['ref_generated_by'],
'date': datetime.today().strftime('%d.%m.%Y'),
'material_function': ref_name,
'input': input_mat.T.tolist(),
'output': [i.item() for i in out],
'input_parameters': parameter_count,
}
try:
with (output_path / f'{ref_name}.yaml').open("x") as f:
yaml.dump(dictionary_output, f, default_flow_style=False)
except FileExistsError:
print(f'Reference file for {ref_name} already exists. You cannot overwrite it.')
###############################################
if input_parameters >= 1:
out = STEAM_materials(ref_name, numpy2d.shape[0], numpy2d.shape[1]).evaluate(numpy2d)
else:
print('Wrong amount of input parameters')
############### Making the yaml ################
dictionary_output = {
'author': gen_by,
'date': datetime.today().strftime('%d.%m.%Y'),
'material_function': ref_name,
'input': [[i.item() for i in k] for k in input_list],
'output': [i.item() for i in out],
'input_parameters': input_parameters,
}
try:
with Path(os.path.dirname(os.path.dirname(__file__)) + os.sep + 'tests' + os.sep + 'ref_data' + os.sep + ref_name+".yaml").open("x") as f:
yaml.dump(dictionary_output, f, default_flow_style=False)
except:
print('Reference file for ' + ref_name + ' already excists. You cannot overwrite it.')
if __name__ == '__main__':
if len(sys.argv) > 1:
create_all_ref_files(Path(sys.argv[1]))
else:
create_all_ref_files()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment