Source code for cnvrg_experiment_chart.chart

"""Module to supliment the handling of charts in the cnvrgv2 sdk"""
from cnvrgv2.utils.chart_utils import Chart
from cnvrgv2.modules.workflows.experiment.experiment import Experiment


[docs] class ExperimentChart: """ A class used to manage an experiment's chart Attributes ---------- experiment : cnvrgv2.Experiment A cnvrg Experiment object. If you do not pass in, we assume you want us to create this on your behalf. key : str The title and reference name used for the chart chart_type : str The type of chart to generate chart : LineChart The cnvrg Chart object generated after instantiating this object Examples -------- >>> chart = ExperimentChart(key="line_chart", chart_type="line") >>> chart.add_series(series_name="index") >>> chart.create_chart() >>> chart.add_metric(series_name="index", data=[1,2,3]) """ def __init__(self, **kwargs): """ Parameters ---------- key : str The title and reference name used for the chart chart_type : str The type of chart to generate. Choices are: line todo: bar, heatmap and scatter group : string Not sure step : int Number of steps? x_ticks : list List of strings to group together bar charts? stops : int Not sure max_val : int Maximum boundary for the Y axis min_val : int Minimum boundary for the Y axis colors : string Not sure, not valid with chart_type: line experiment: cnvrgv2.Experiment A cnvrg Experiment object. If you do not pass in, we assume you want us to create this on your behalf. """ valid_types = ["line", "bar", "scatter", "heatmap"] if kwargs["chart_type"] not in valid_types: raise AttributeError( f"""Chart type must be one of the following strings: {valid_types}""" ) self.experiment = kwargs.get("experiment", None) self.key = kwargs["key"] self.chart_type = kwargs["chart_type"] if self.chart_type == "line": self.chart_type = "none" self.chart = Chart( key=self.key, chart_type=self.chart_type, group=kwargs.get("group", None), step=kwargs.get("step", None), x_ticks=kwargs.get("x_ticks", None), stops=kwargs.get("stops", None), max_val=kwargs.get("max_val", None), min_val=kwargs.get("min_val", None), colors=kwargs.get("colors", None), ) if not isinstance(self.experiment, Experiment): self.experiment = Experiment()
[docs] def create_chart(self): """ This method will add your chart to the experiment (aka. adds the chart to the experiments UI) Returns ------- self : ExperimentChart Returns the updated ExperimentChart object allowing for method chaining """ self.chart = self.experiment.log_metric(self.chart) return self
[docs] def add_series(self, series_name, data=None): """ This method adds a data series to the chart as well as the initial data point Parameters ---------- data : list, default=None This is a list of one or more data points that will be added to the data series. If not included this will create an empty series. series_name : str This is the name you would like to give the data series. Returns ------- self : ExperimentChart Returns the updated ExperimentChart object allowing for method chaining """ if data is None: data = [] self.chart.add_series(data, series_name) return self
[docs] def add_metric(self, data, series_name): """ This method appends a data point to an existing data series (appears in UI in real time) Parameters ---------- data : list This is a list of one or more data points that will be appended to the currently list of datapoints series_name : str This is the name of the series to add the datapoints to Returns ------- self : ExperimentChart Returns the updated ExperimentChart object allowing for method chaining """ self.chart = self.experiment.update_chart(self.key, data, series_name) return self