# coding: utf-8

"""
    Katib

    Swagger description for Katib  # noqa: E501

    The version of the OpenAPI document: v1beta1-0.1
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from kubeflow.katib.configuration import Configuration


class V1beta1ExperimentStatus(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'completion_time': 'datetime',
        'conditions': 'list[V1beta1ExperimentCondition]',
        'current_optimal_trial': 'V1beta1OptimalTrial',
        'early_stopped_trial_list': 'list[str]',
        'failed_trial_list': 'list[str]',
        'killed_trial_list': 'list[str]',
        'last_reconcile_time': 'datetime',
        'metrics_unavailable_trial_list': 'list[str]',
        'pending_trial_list': 'list[str]',
        'running_trial_list': 'list[str]',
        'start_time': 'datetime',
        'succeeded_trial_list': 'list[str]',
        'trial_metrics_unavailable': 'int',
        'trials': 'int',
        'trials_early_stopped': 'int',
        'trials_failed': 'int',
        'trials_killed': 'int',
        'trials_pending': 'int',
        'trials_running': 'int',
        'trials_succeeded': 'int'
    }

    attribute_map = {
        'completion_time': 'completionTime',
        'conditions': 'conditions',
        'current_optimal_trial': 'currentOptimalTrial',
        'early_stopped_trial_list': 'earlyStoppedTrialList',
        'failed_trial_list': 'failedTrialList',
        'killed_trial_list': 'killedTrialList',
        'last_reconcile_time': 'lastReconcileTime',
        'metrics_unavailable_trial_list': 'metricsUnavailableTrialList',
        'pending_trial_list': 'pendingTrialList',
        'running_trial_list': 'runningTrialList',
        'start_time': 'startTime',
        'succeeded_trial_list': 'succeededTrialList',
        'trial_metrics_unavailable': 'trialMetricsUnavailable',
        'trials': 'trials',
        'trials_early_stopped': 'trialsEarlyStopped',
        'trials_failed': 'trialsFailed',
        'trials_killed': 'trialsKilled',
        'trials_pending': 'trialsPending',
        'trials_running': 'trialsRunning',
        'trials_succeeded': 'trialsSucceeded'
    }

    def __init__(self, completion_time=None, conditions=None, current_optimal_trial=None, early_stopped_trial_list=None, failed_trial_list=None, killed_trial_list=None, last_reconcile_time=None, metrics_unavailable_trial_list=None, pending_trial_list=None, running_trial_list=None, start_time=None, succeeded_trial_list=None, trial_metrics_unavailable=None, trials=None, trials_early_stopped=None, trials_failed=None, trials_killed=None, trials_pending=None, trials_running=None, trials_succeeded=None, local_vars_configuration=None):  # noqa: E501
        """V1beta1ExperimentStatus - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._completion_time = None
        self._conditions = None
        self._current_optimal_trial = None
        self._early_stopped_trial_list = None
        self._failed_trial_list = None
        self._killed_trial_list = None
        self._last_reconcile_time = None
        self._metrics_unavailable_trial_list = None
        self._pending_trial_list = None
        self._running_trial_list = None
        self._start_time = None
        self._succeeded_trial_list = None
        self._trial_metrics_unavailable = None
        self._trials = None
        self._trials_early_stopped = None
        self._trials_failed = None
        self._trials_killed = None
        self._trials_pending = None
        self._trials_running = None
        self._trials_succeeded = None
        self.discriminator = None

        if completion_time is not None:
            self.completion_time = completion_time
        if conditions is not None:
            self.conditions = conditions
        if current_optimal_trial is not None:
            self.current_optimal_trial = current_optimal_trial
        if early_stopped_trial_list is not None:
            self.early_stopped_trial_list = early_stopped_trial_list
        if failed_trial_list is not None:
            self.failed_trial_list = failed_trial_list
        if killed_trial_list is not None:
            self.killed_trial_list = killed_trial_list
        if last_reconcile_time is not None:
            self.last_reconcile_time = last_reconcile_time
        if metrics_unavailable_trial_list is not None:
            self.metrics_unavailable_trial_list = metrics_unavailable_trial_list
        if pending_trial_list is not None:
            self.pending_trial_list = pending_trial_list
        if running_trial_list is not None:
            self.running_trial_list = running_trial_list
        if start_time is not None:
            self.start_time = start_time
        if succeeded_trial_list is not None:
            self.succeeded_trial_list = succeeded_trial_list
        if trial_metrics_unavailable is not None:
            self.trial_metrics_unavailable = trial_metrics_unavailable
        if trials is not None:
            self.trials = trials
        if trials_early_stopped is not None:
            self.trials_early_stopped = trials_early_stopped
        if trials_failed is not None:
            self.trials_failed = trials_failed
        if trials_killed is not None:
            self.trials_killed = trials_killed
        if trials_pending is not None:
            self.trials_pending = trials_pending
        if trials_running is not None:
            self.trials_running = trials_running
        if trials_succeeded is not None:
            self.trials_succeeded = trials_succeeded

    @property
    def completion_time(self):
        """Gets the completion_time of this V1beta1ExperimentStatus.  # noqa: E501


        :return: The completion_time of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: datetime
        """
        return self._completion_time

    @completion_time.setter
    def completion_time(self, completion_time):
        """Sets the completion_time of this V1beta1ExperimentStatus.


        :param completion_time: The completion_time of this V1beta1ExperimentStatus.  # noqa: E501
        :type: datetime
        """

        self._completion_time = completion_time

    @property
    def conditions(self):
        """Gets the conditions of this V1beta1ExperimentStatus.  # noqa: E501

        List of observed runtime conditions for this Experiment.  # noqa: E501

        :return: The conditions of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[V1beta1ExperimentCondition]
        """
        return self._conditions

    @conditions.setter
    def conditions(self, conditions):
        """Sets the conditions of this V1beta1ExperimentStatus.

        List of observed runtime conditions for this Experiment.  # noqa: E501

        :param conditions: The conditions of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[V1beta1ExperimentCondition]
        """

        self._conditions = conditions

    @property
    def current_optimal_trial(self):
        """Gets the current_optimal_trial of this V1beta1ExperimentStatus.  # noqa: E501


        :return: The current_optimal_trial of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: V1beta1OptimalTrial
        """
        return self._current_optimal_trial

    @current_optimal_trial.setter
    def current_optimal_trial(self, current_optimal_trial):
        """Sets the current_optimal_trial of this V1beta1ExperimentStatus.


        :param current_optimal_trial: The current_optimal_trial of this V1beta1ExperimentStatus.  # noqa: E501
        :type: V1beta1OptimalTrial
        """

        self._current_optimal_trial = current_optimal_trial

    @property
    def early_stopped_trial_list(self):
        """Gets the early_stopped_trial_list of this V1beta1ExperimentStatus.  # noqa: E501

        List of trial names which have been early stopped.  # noqa: E501

        :return: The early_stopped_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._early_stopped_trial_list

    @early_stopped_trial_list.setter
    def early_stopped_trial_list(self, early_stopped_trial_list):
        """Sets the early_stopped_trial_list of this V1beta1ExperimentStatus.

        List of trial names which have been early stopped.  # noqa: E501

        :param early_stopped_trial_list: The early_stopped_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[str]
        """

        self._early_stopped_trial_list = early_stopped_trial_list

    @property
    def failed_trial_list(self):
        """Gets the failed_trial_list of this V1beta1ExperimentStatus.  # noqa: E501

        List of trial names which have already failed.  # noqa: E501

        :return: The failed_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._failed_trial_list

    @failed_trial_list.setter
    def failed_trial_list(self, failed_trial_list):
        """Sets the failed_trial_list of this V1beta1ExperimentStatus.

        List of trial names which have already failed.  # noqa: E501

        :param failed_trial_list: The failed_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[str]
        """

        self._failed_trial_list = failed_trial_list

    @property
    def killed_trial_list(self):
        """Gets the killed_trial_list of this V1beta1ExperimentStatus.  # noqa: E501

        List of trial names which have been killed.  # noqa: E501

        :return: The killed_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._killed_trial_list

    @killed_trial_list.setter
    def killed_trial_list(self, killed_trial_list):
        """Sets the killed_trial_list of this V1beta1ExperimentStatus.

        List of trial names which have been killed.  # noqa: E501

        :param killed_trial_list: The killed_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[str]
        """

        self._killed_trial_list = killed_trial_list

    @property
    def last_reconcile_time(self):
        """Gets the last_reconcile_time of this V1beta1ExperimentStatus.  # noqa: E501


        :return: The last_reconcile_time of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: datetime
        """
        return self._last_reconcile_time

    @last_reconcile_time.setter
    def last_reconcile_time(self, last_reconcile_time):
        """Sets the last_reconcile_time of this V1beta1ExperimentStatus.


        :param last_reconcile_time: The last_reconcile_time of this V1beta1ExperimentStatus.  # noqa: E501
        :type: datetime
        """

        self._last_reconcile_time = last_reconcile_time

    @property
    def metrics_unavailable_trial_list(self):
        """Gets the metrics_unavailable_trial_list of this V1beta1ExperimentStatus.  # noqa: E501

        List of trial names which have been metrics unavailable  # noqa: E501

        :return: The metrics_unavailable_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._metrics_unavailable_trial_list

    @metrics_unavailable_trial_list.setter
    def metrics_unavailable_trial_list(self, metrics_unavailable_trial_list):
        """Sets the metrics_unavailable_trial_list of this V1beta1ExperimentStatus.

        List of trial names which have been metrics unavailable  # noqa: E501

        :param metrics_unavailable_trial_list: The metrics_unavailable_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[str]
        """

        self._metrics_unavailable_trial_list = metrics_unavailable_trial_list

    @property
    def pending_trial_list(self):
        """Gets the pending_trial_list of this V1beta1ExperimentStatus.  # noqa: E501

        List of trial names which are pending.  # noqa: E501

        :return: The pending_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._pending_trial_list

    @pending_trial_list.setter
    def pending_trial_list(self, pending_trial_list):
        """Sets the pending_trial_list of this V1beta1ExperimentStatus.

        List of trial names which are pending.  # noqa: E501

        :param pending_trial_list: The pending_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[str]
        """

        self._pending_trial_list = pending_trial_list

    @property
    def running_trial_list(self):
        """Gets the running_trial_list of this V1beta1ExperimentStatus.  # noqa: E501

        List of trial names which are running.  # noqa: E501

        :return: The running_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._running_trial_list

    @running_trial_list.setter
    def running_trial_list(self, running_trial_list):
        """Sets the running_trial_list of this V1beta1ExperimentStatus.

        List of trial names which are running.  # noqa: E501

        :param running_trial_list: The running_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[str]
        """

        self._running_trial_list = running_trial_list

    @property
    def start_time(self):
        """Gets the start_time of this V1beta1ExperimentStatus.  # noqa: E501


        :return: The start_time of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: datetime
        """
        return self._start_time

    @start_time.setter
    def start_time(self, start_time):
        """Sets the start_time of this V1beta1ExperimentStatus.


        :param start_time: The start_time of this V1beta1ExperimentStatus.  # noqa: E501
        :type: datetime
        """

        self._start_time = start_time

    @property
    def succeeded_trial_list(self):
        """Gets the succeeded_trial_list of this V1beta1ExperimentStatus.  # noqa: E501

        List of trial names which have already succeeded.  # noqa: E501

        :return: The succeeded_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._succeeded_trial_list

    @succeeded_trial_list.setter
    def succeeded_trial_list(self, succeeded_trial_list):
        """Sets the succeeded_trial_list of this V1beta1ExperimentStatus.

        List of trial names which have already succeeded.  # noqa: E501

        :param succeeded_trial_list: The succeeded_trial_list of this V1beta1ExperimentStatus.  # noqa: E501
        :type: list[str]
        """

        self._succeeded_trial_list = succeeded_trial_list

    @property
    def trial_metrics_unavailable(self):
        """Gets the trial_metrics_unavailable of this V1beta1ExperimentStatus.  # noqa: E501

        How many trials are currently metrics unavailable.  # noqa: E501

        :return: The trial_metrics_unavailable of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trial_metrics_unavailable

    @trial_metrics_unavailable.setter
    def trial_metrics_unavailable(self, trial_metrics_unavailable):
        """Sets the trial_metrics_unavailable of this V1beta1ExperimentStatus.

        How many trials are currently metrics unavailable.  # noqa: E501

        :param trial_metrics_unavailable: The trial_metrics_unavailable of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trial_metrics_unavailable = trial_metrics_unavailable

    @property
    def trials(self):
        """Gets the trials of this V1beta1ExperimentStatus.  # noqa: E501

        Trials is the total number of trials owned by the experiment.  # noqa: E501

        :return: The trials of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trials

    @trials.setter
    def trials(self, trials):
        """Sets the trials of this V1beta1ExperimentStatus.

        Trials is the total number of trials owned by the experiment.  # noqa: E501

        :param trials: The trials of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trials = trials

    @property
    def trials_early_stopped(self):
        """Gets the trials_early_stopped of this V1beta1ExperimentStatus.  # noqa: E501

        How many trials are currently early stopped.  # noqa: E501

        :return: The trials_early_stopped of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trials_early_stopped

    @trials_early_stopped.setter
    def trials_early_stopped(self, trials_early_stopped):
        """Sets the trials_early_stopped of this V1beta1ExperimentStatus.

        How many trials are currently early stopped.  # noqa: E501

        :param trials_early_stopped: The trials_early_stopped of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trials_early_stopped = trials_early_stopped

    @property
    def trials_failed(self):
        """Gets the trials_failed of this V1beta1ExperimentStatus.  # noqa: E501

        How many trials have failed.  # noqa: E501

        :return: The trials_failed of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trials_failed

    @trials_failed.setter
    def trials_failed(self, trials_failed):
        """Sets the trials_failed of this V1beta1ExperimentStatus.

        How many trials have failed.  # noqa: E501

        :param trials_failed: The trials_failed of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trials_failed = trials_failed

    @property
    def trials_killed(self):
        """Gets the trials_killed of this V1beta1ExperimentStatus.  # noqa: E501

        How many trials have been killed.  # noqa: E501

        :return: The trials_killed of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trials_killed

    @trials_killed.setter
    def trials_killed(self, trials_killed):
        """Sets the trials_killed of this V1beta1ExperimentStatus.

        How many trials have been killed.  # noqa: E501

        :param trials_killed: The trials_killed of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trials_killed = trials_killed

    @property
    def trials_pending(self):
        """Gets the trials_pending of this V1beta1ExperimentStatus.  # noqa: E501

        How many trials are currently pending.  # noqa: E501

        :return: The trials_pending of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trials_pending

    @trials_pending.setter
    def trials_pending(self, trials_pending):
        """Sets the trials_pending of this V1beta1ExperimentStatus.

        How many trials are currently pending.  # noqa: E501

        :param trials_pending: The trials_pending of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trials_pending = trials_pending

    @property
    def trials_running(self):
        """Gets the trials_running of this V1beta1ExperimentStatus.  # noqa: E501

        How many trials are currently running.  # noqa: E501

        :return: The trials_running of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trials_running

    @trials_running.setter
    def trials_running(self, trials_running):
        """Sets the trials_running of this V1beta1ExperimentStatus.

        How many trials are currently running.  # noqa: E501

        :param trials_running: The trials_running of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trials_running = trials_running

    @property
    def trials_succeeded(self):
        """Gets the trials_succeeded of this V1beta1ExperimentStatus.  # noqa: E501

        How many trials have succeeded.  # noqa: E501

        :return: The trials_succeeded of this V1beta1ExperimentStatus.  # noqa: E501
        :rtype: int
        """
        return self._trials_succeeded

    @trials_succeeded.setter
    def trials_succeeded(self, trials_succeeded):
        """Sets the trials_succeeded of this V1beta1ExperimentStatus.

        How many trials have succeeded.  # noqa: E501

        :param trials_succeeded: The trials_succeeded of this V1beta1ExperimentStatus.  # noqa: E501
        :type: int
        """

        self._trials_succeeded = trials_succeeded

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, V1beta1ExperimentStatus):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, V1beta1ExperimentStatus):
            return True

        return self.to_dict() != other.to_dict()
