update data structures to allow for experiment creation

This commit is contained in:
2024-07-29 17:25:40 -04:00
parent 42b3a9cf12
commit 8d9b371af4
4 changed files with 104 additions and 38 deletions

View File

@@ -30,11 +30,56 @@ class Experiment:
experiment: str
date: str
measurements: List[Measurement] = field(default_factory=list)
variables: List[Variable] = field(default_factory=list)
measurements: dict[str, Measurement] = field(default_factory=dict)
variables: dict[str, Variable] = field(default_factory=dict)
def to_json(self):
# Convert the data class to a dictionary, which can be easily converted to JSON.
import json
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)
def from_json(self, json_str):
# Convert a JSON string to a data class.
import json
data = json.loads(json_str)
self.__dict__.update(data)
def add_measurement(self, measurement: Measurement):
# Add a measurement to the experiment.
if measurement.name in self.measurements:
raise ValueError(
f"Measurement {measurement.name} already exists in the experiment."
)
self.measurements[measurement.name] = measurement
def add_measurements(self, measurements: List[Measurement]):
# Add a list of measurements to the experiment.
for measurement in measurements:
self.add_measurement(measurement)
def take_measurement(self, source: str, value: float):
# Add a measurement to the experiment.
if source not in self.measurements:
raise ValueError(f"Measurement {source} not found in the experiment.")
self.measurements[source].values.append(value)
def add_variable(self, variable: Variable):
# Add a variable to the experiment.
if variable.name in self.variables:
raise ValueError(
f"Variable {variable.name} already exists in the experiment."
)
self.variables[variable.name] = variable
def add_variables(self, variables: List[Variable]):
# Add a list of variables to the experiment.
for variable in variables:
self.add_variable(variable)
def set_variable(self, source: str, value: Any):
# Set a variable in the experiment.
if source not in self.variables:
raise ValueError(f"Variable {source} not found in the experiment.")
self.variables[source].value = value