# 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 V1beta1SuggestionStatus(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 = {
        'algorithm_settings': 'list[V1beta1AlgorithmSetting]',
        'completion_time': 'datetime',
        'conditions': 'list[V1beta1SuggestionCondition]',
        'last_reconcile_time': 'datetime',
        'start_time': 'datetime',
        'suggestion_count': 'int',
        'suggestions': 'list[V1beta1TrialAssignment]'
    }

    attribute_map = {
        'algorithm_settings': 'algorithmSettings',
        'completion_time': 'completionTime',
        'conditions': 'conditions',
        'last_reconcile_time': 'lastReconcileTime',
        'start_time': 'startTime',
        'suggestion_count': 'suggestionCount',
        'suggestions': 'suggestions'
    }

    def __init__(self, algorithm_settings=None, completion_time=None, conditions=None, last_reconcile_time=None, start_time=None, suggestion_count=None, suggestions=None, local_vars_configuration=None):  # noqa: E501
        """V1beta1SuggestionStatus - 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._algorithm_settings = None
        self._completion_time = None
        self._conditions = None
        self._last_reconcile_time = None
        self._start_time = None
        self._suggestion_count = None
        self._suggestions = None
        self.discriminator = None

        if algorithm_settings is not None:
            self.algorithm_settings = algorithm_settings
        if completion_time is not None:
            self.completion_time = completion_time
        if conditions is not None:
            self.conditions = conditions
        if last_reconcile_time is not None:
            self.last_reconcile_time = last_reconcile_time
        if start_time is not None:
            self.start_time = start_time
        if suggestion_count is not None:
            self.suggestion_count = suggestion_count
        if suggestions is not None:
            self.suggestions = suggestions

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

        AlgorithmSettings defines HP or NAS algorithm settings which suggestion gRPC service returns. These settings overwrites Experiment's settings before the gRPC request. It can be empty if settings haven't been changed.  # noqa: E501

        :return: The algorithm_settings of this V1beta1SuggestionStatus.  # noqa: E501
        :rtype: list[V1beta1AlgorithmSetting]
        """
        return self._algorithm_settings

    @algorithm_settings.setter
    def algorithm_settings(self, algorithm_settings):
        """Sets the algorithm_settings of this V1beta1SuggestionStatus.

        AlgorithmSettings defines HP or NAS algorithm settings which suggestion gRPC service returns. These settings overwrites Experiment's settings before the gRPC request. It can be empty if settings haven't been changed.  # noqa: E501

        :param algorithm_settings: The algorithm_settings of this V1beta1SuggestionStatus.  # noqa: E501
        :type: list[V1beta1AlgorithmSetting]
        """

        self._algorithm_settings = algorithm_settings

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


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

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


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

        self._completion_time = completion_time

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

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

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

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

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

        :param conditions: The conditions of this V1beta1SuggestionStatus.  # noqa: E501
        :type: list[V1beta1SuggestionCondition]
        """

        self._conditions = conditions

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


        :return: The last_reconcile_time of this V1beta1SuggestionStatus.  # 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 V1beta1SuggestionStatus.


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

        self._last_reconcile_time = last_reconcile_time

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


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

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


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

        self._start_time = start_time

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

        Number of suggestion results  # noqa: E501

        :return: The suggestion_count of this V1beta1SuggestionStatus.  # noqa: E501
        :rtype: int
        """
        return self._suggestion_count

    @suggestion_count.setter
    def suggestion_count(self, suggestion_count):
        """Sets the suggestion_count of this V1beta1SuggestionStatus.

        Number of suggestion results  # noqa: E501

        :param suggestion_count: The suggestion_count of this V1beta1SuggestionStatus.  # noqa: E501
        :type: int
        """

        self._suggestion_count = suggestion_count

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

        Suggestion results  # noqa: E501

        :return: The suggestions of this V1beta1SuggestionStatus.  # noqa: E501
        :rtype: list[V1beta1TrialAssignment]
        """
        return self._suggestions

    @suggestions.setter
    def suggestions(self, suggestions):
        """Sets the suggestions of this V1beta1SuggestionStatus.

        Suggestion results  # noqa: E501

        :param suggestions: The suggestions of this V1beta1SuggestionStatus.  # noqa: E501
        :type: list[V1beta1TrialAssignment]
        """

        self._suggestions = suggestions

    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, V1beta1SuggestionStatus):
            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, V1beta1SuggestionStatus):
            return True

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