Source code for piel.visual.experimental.auto
from piel.types import PathTypes
from piel.types.experimental import (
MeasurementDataTypes,
MeasurementDataCollectionTypes,
ExperimentData,
)
from .map import (
measurement_data_collection_to_plot_map,
measurement_data_to_plot_map,
measurement_data_collection_to_plot_suffix_map,
)
from piel.experimental.analysis.operating_point import (
create_experiment_data_collection_from_unique_parameters,
)
from piel.file_system import return_path
[docs]
def auto_plot_from_measurement_data(
measurement_data: MeasurementDataTypes,
**kwargs,
) -> list[tuple, PathTypes]:
"""
This function will automatically plot the data from the `MeasurementData` object provided.
If there are more than one set of relevant plots for a given `MeasurementData`,
it will generate a list of figures accordingly.
"""
plots = []
plot_methods = measurement_data_to_plot_map[measurement_data.type]
for plot_method_i in plot_methods:
plot_i = plot_method_i(measurement_data, **kwargs)
plots.append(plot_i)
return plots
[docs]
def auto_plot_from_measurement_data_collection(
measurement_data_collection: MeasurementDataCollectionTypes,
plot_output_directory: PathTypes = None,
extra_plot_output_directories: list[PathTypes] = None,
measurement_data_collection_to_plot_map: dict = measurement_data_collection_to_plot_map,
measurement_data_collection_to_plot_prefix_map: dict = measurement_data_collection_to_plot_suffix_map,
**kwargs,
) -> tuple[list[tuple], list[PathTypes]]:
"""
This function will automatically plot the data from the `MeasurementDataCollection` provided.
If there are more than one set of relevant plots for a given `MeasurementData`,
it will generate a list of figures accordingly.
"""
plots = []
plot_path_list = []
extra_plot_file_paths = []
plot_output_directory = return_path(plot_output_directory)
# This creates the mapping between measureemnt collection and the corresponding plots
plot_methods = measurement_data_collection_to_plot_map[
measurement_data_collection.type
]
plot_prefix = measurement_data_collection_to_plot_prefix_map[
measurement_data_collection.type
]
i = 0
# We iterate through the corresponding plotting methods and generate the plots, and save them to the parent directory.
for plot_method_i in plot_methods:
file_name = f"{plot_prefix[i]}_{measurement_data_collection.name}"
plot_file_i = plot_output_directory / f"{file_name}.png"
if extra_plot_output_directories is not None:
extra_plot_file_paths = []
for extra_plot_output_directory_i in extra_plot_output_directories:
extra_plot_output_directory_i = return_path(
extra_plot_output_directory_i
)
extra_plot_file_i = extra_plot_output_directory_i / f"{file_name}.png"
extra_plot_file_paths.append(extra_plot_file_i)
plot_i = plot_method_i(
measurement_data_collection,
path=plot_file_i,
paths=extra_plot_file_paths,
**kwargs,
)
plots.append(plot_i)
plot_path_list.append(plot_file_i)
i += 1
return plots, plot_path_list
[docs]
def auto_plot_from_experiment_data(
experiment_data: ExperimentData,
plot_output_directory: PathTypes = None,
parametric: bool = False,
**kwargs,
) -> tuple[list[tuple], list[PathTypes]]:
"""
This function will automatically plot the data from the `ExperimentData` object provided.
"""
plots = []
plot_path_list = []
if parametric:
# Here we fill first extract all the corresponding parametric `ExperimentData`
experiment_data_collection = (
create_experiment_data_collection_from_unique_parameters(
experiment_data=experiment_data
)
)
for experiment_data_i in experiment_data_collection.collection:
print(experiment_data_i.name)
print(experiment_data_i.experiment.parameters)
# Default just plots a single set of parametric plots.
plots_i, plot_path_list_i = auto_plot_from_measurement_data_collection(
measurement_data_collection=experiment_data_i.data,
plot_output_directory=plot_output_directory,
parameters_list=experiment_data_i.experiment.parameters_list,
**kwargs,
)
plots += plots_i
plot_path_list += plot_path_list_i
else:
# Default just plots a single set of parametric plots.
plots_i, plot_path_list_i = auto_plot_from_measurement_data_collection(
measurement_data_collection=experiment_data.data,
plot_output_directory=plot_output_directory,
parameters_list=experiment_data.experiment.parameters_list,
**kwargs,
)
plots += plots_i
plot_path_list += plot_path_list_i
return plots, plot_path_list