Source code for mlflow.entities.experiment

from mlflow.entities._mlflow_object import _MlflowObject
from mlflow.entities.experiment_tag import ExperimentTag
from mlflow.protos.service_pb2 import Experiment as ProtoExperiment
from mlflow.protos.service_pb2 import ExperimentTag as ProtoExperimentTag


[docs]class Experiment(_MlflowObject): """ Experiment object. """ DEFAULT_EXPERIMENT_NAME = "Default" def __init__( self, experiment_id, name, artifact_location, lifecycle_stage, tags=None, creation_time=None, last_update_time=None, ): super().__init__() self._experiment_id = experiment_id self._name = name self._artifact_location = artifact_location self._lifecycle_stage = lifecycle_stage self._tags = {tag.key: tag.value for tag in (tags or [])} self._creation_time = creation_time self._last_update_time = last_update_time @property def experiment_id(self): """String ID of the experiment.""" return self._experiment_id @property def name(self): """String name of the experiment.""" return self._name def _set_name(self, new_name): self._name = new_name @property def artifact_location(self): """String corresponding to the root artifact URI for the experiment.""" return self._artifact_location @property def lifecycle_stage(self): """Lifecycle stage of the experiment. Can either be 'active' or 'deleted'.""" return self._lifecycle_stage @property def tags(self): """Tags that have been set on the experiment.""" return self._tags def _add_tag(self, tag): self._tags[tag.key] = tag.value @property def creation_time(self): return self._creation_time def _set_creation_time(self, creation_time): self._creation_time = creation_time @property def last_update_time(self): return self._last_update_time def _set_last_update_time(self, last_update_time): self._last_update_time = last_update_time
[docs] @classmethod def from_proto(cls, proto): experiment = cls( proto.experiment_id, proto.name, proto.artifact_location, proto.lifecycle_stage, # `creation_time` and `last_update_time` were added in MLflow 1.29.0. Experiments # created before this version don't have these fields and `proto.creation_time` and # `proto.last_update_time` default to 0. We should only set `creation_time` and # `last_update_time` if they are non-zero. creation_time=proto.creation_time or None, last_update_time=proto.last_update_time or None, ) for proto_tag in proto.tags: experiment._add_tag(ExperimentTag.from_proto(proto_tag)) return experiment
[docs] def to_proto(self): experiment = ProtoExperiment() experiment.experiment_id = self.experiment_id experiment.name = self.name experiment.artifact_location = self.artifact_location experiment.lifecycle_stage = self.lifecycle_stage if self.creation_time: experiment.creation_time = self.creation_time if self.last_update_time: experiment.last_update_time = self.last_update_time experiment.tags.extend( [ProtoExperimentTag(key=key, value=val) for key, val in self._tags.items()] ) return experiment