Source code for utils.Metadata

import csv
import os

[docs] class Metadata: def __init__(self): self.data = {}
[docs] def set_field(self, key, value): self.data[key] = value
[docs] def add_nested_field(self, parent_key, key, value): if parent_key not in self.data: self.data[parent_key] = {} self.data[parent_key][key] = value
[docs] def add_repeating_block(self, block_name, block_data): if block_name not in self.data: self.data[block_name] = [] self.data[block_name].append(block_data)
[docs] def generate_next_model_name(self, base_name, csv_filename="metadata.csv"): if not os.path.isfile(csv_filename): return f"{base_name}_1" with open(csv_filename, mode='r') as file: reader = csv.reader(file) rows = list(reader) if len(rows) <= 1: return f"{base_name}_1" last_model_name = rows[-1][0] last_model_number = int(last_model_name.split('_')[-1]) next_model_number = last_model_number + 1 return f"{base_name}_{next_model_number}"
[docs] def save_to_csv(self, filename="metadata.csv"): file_exists = os.path.isfile(filename) with open(filename, mode='a', newline='') as file: # Open the file in append mode writer = csv.writer(file) if not file_exists: # Write headers if the file does not already exist headers = [] for key in self.data: if isinstance(self.data[key], dict): for subkey in self.data[key]: headers.append(f"{key} ({subkey})") elif isinstance(self.data[key], list): for i, item in enumerate(self.data[key]): for subkey in item: headers.append(f"{key} {i+1} ({subkey})") else: headers.append(key) writer.writerow(headers) # Prepare row data row = [] for key in self.data: if isinstance(self.data[key], dict): for subkey in self.data[key]: row.append(self.data[key][subkey]) elif isinstance(self.data[key], list): for item in self.data[key]: for subkey in item: row.append(item[subkey]) else: row.append(self.data[key]) writer.writerow(row)
''' # Usage example: metadata = DynamicMetadata() metadata.set_field("Model Name", "PINN_Model") metadata.set_field("Inlet Points File", "inlet_points.csv") metadata.set_field("Airfoil Points File", "airfoil_points.csv") metadata.set_field("Fluid Field Points File", "fluid_field_points.csv") metadata.add_nested_field("Inlet Boundary Conditions", "u", 1.0) metadata.add_nested_field("Inlet Boundary Conditions", "v", 0.0) metadata.add_nested_field("Inlet Boundary Conditions", "p", 101325) metadata.add_nested_field("Airfoil Boundary Conditions", "u", 0.0) metadata.add_nested_field("Airfoil Boundary Conditions", "v", 0.0) metadata.add_nested_field("Airfoil Boundary Conditions", "p", 101325) metadata.set_field("Execution Device", "cuda:0") metadata.set_field("Model Structure", "2 hidden layers, 20 neurons each") metadata.add_repeating_block("Training Parameters", {"optimizer": "Adam", "iterations": 1000, "batch_size": 32, "epochs": 10}) metadata.add_repeating_block("Training Parameters", {"optimizer": "SGD", "iterations": 2000, "batch_size": 64, "epochs": 20}) metadata.save_to_csv("metadata.csv") '''