# coding: utf-8

"""
    Curia Platform API

    These are the docs for the curia platform API. To test, generate an authorization token first.  # noqa: E501

    OpenAPI spec version: 0.0.1
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

class Timeline(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """
    """
    Attributes:
      swagger_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.
    """
    swagger_types = {
        'id': 'str',
        'type': 'str',
        'stage': 'str',
        'evidence_start_at': 'datetime',
        'outcome_end_at': 'datetime',
        'evidence_period': 'float',
        'delay_period': 'float',
        'timeline_results': 'list[str]',
        'intervention_period': 'float',
        'athena_execution_id': 'str',
        'outcome_period': 'float',
        'intervention_ratio': 'float',
        'timeline_uri': 'str',
        'aggregation': 'str',
        'project_id': 'str',
        'model_id': 'str',
        'intervention_id': 'str',
        'train_timeline_id': 'str',
        'impactability_timeline_id': 'str',
        'outcome_queries': 'list[str]',
        'model_jobs': 'list[ModelJob]',
        'timeline_code_filter_groups': 'list[TimelineCodeFilterGroup]',
        'timeline_feature_filter_groups': 'list[TimelineFeatureFilterGroup]',
        'feature_sub_categories': 'list[str]',
        'created_at': 'datetime',
        'updated_at': 'datetime',
        'version': 'float'
    }

    attribute_map = {
        'id': 'id',
        'type': 'type',
        'stage': 'stage',
        'evidence_start_at': 'evidenceStartAt',
        'outcome_end_at': 'outcomeEndAt',
        'evidence_period': 'evidencePeriod',
        'delay_period': 'delayPeriod',
        'timeline_results': 'timelineResults',
        'intervention_period': 'interventionPeriod',
        'athena_execution_id': 'athenaExecutionId',
        'outcome_period': 'outcomePeriod',
        'intervention_ratio': 'interventionRatio',
        'timeline_uri': 'timelineUri',
        'aggregation': 'aggregation',
        'project_id': 'projectId',
        'model_id': 'modelId',
        'intervention_id': 'interventionId',
        'train_timeline_id': 'trainTimelineId',
        'impactability_timeline_id': 'impactabilityTimelineId',
        'outcome_queries': 'outcomeQueries',
        'model_jobs': 'modelJobs',
        'timeline_code_filter_groups': 'timelineCodeFilterGroups',
        'timeline_feature_filter_groups': 'timelineFeatureFilterGroups',
        'feature_sub_categories': 'featureSubCategories',
        'created_at': 'createdAt',
        'updated_at': 'updatedAt',
        'version': 'version'
    }

    def __init__(self, id=None, type=None, stage=None, evidence_start_at=None, outcome_end_at=None, evidence_period=None, delay_period=None, timeline_results=None, intervention_period=None, athena_execution_id=None, outcome_period=None, intervention_ratio=None, timeline_uri=None, aggregation=None, project_id=None, model_id=None, intervention_id=None, train_timeline_id=None, impactability_timeline_id=None, outcome_queries=None, model_jobs=None, timeline_code_filter_groups=None, timeline_feature_filter_groups=None, feature_sub_categories=None, created_at=None, updated_at=None, version=None):  # noqa: E501
        """Timeline - a model defined in Swagger"""  # noqa: E501
        self._id = None
        self._type = None
        self._stage = None
        self._evidence_start_at = None
        self._outcome_end_at = None
        self._evidence_period = None
        self._delay_period = None
        self._timeline_results = None
        self._intervention_period = None
        self._athena_execution_id = None
        self._outcome_period = None
        self._intervention_ratio = None
        self._timeline_uri = None
        self._aggregation = None
        self._project_id = None
        self._model_id = None
        self._intervention_id = None
        self._train_timeline_id = None
        self._impactability_timeline_id = None
        self._outcome_queries = None
        self._model_jobs = None
        self._timeline_code_filter_groups = None
        self._timeline_feature_filter_groups = None
        self._feature_sub_categories = None
        self._created_at = None
        self._updated_at = None
        self._version = None
        self.discriminator = None
        if id is not None:
            self.id = id
        self.type = type
        self.stage = stage
        self.evidence_start_at = evidence_start_at
        self.outcome_end_at = outcome_end_at
        self.evidence_period = evidence_period
        self.delay_period = delay_period
        if timeline_results is not None:
            self.timeline_results = timeline_results
        if intervention_period is not None:
            self.intervention_period = intervention_period
        if athena_execution_id is not None:
            self.athena_execution_id = athena_execution_id
        self.outcome_period = outcome_period
        if intervention_ratio is not None:
            self.intervention_ratio = intervention_ratio
        if timeline_uri is not None:
            self.timeline_uri = timeline_uri
        self.aggregation = aggregation
        self.project_id = project_id
        self.model_id = model_id
        if intervention_id is not None:
            self.intervention_id = intervention_id
        if train_timeline_id is not None:
            self.train_timeline_id = train_timeline_id
        if impactability_timeline_id is not None:
            self.impactability_timeline_id = impactability_timeline_id
        if outcome_queries is not None:
            self.outcome_queries = outcome_queries
        if model_jobs is not None:
            self.model_jobs = model_jobs
        if timeline_code_filter_groups is not None:
            self.timeline_code_filter_groups = timeline_code_filter_groups
        if timeline_feature_filter_groups is not None:
            self.timeline_feature_filter_groups = timeline_feature_filter_groups
        if feature_sub_categories is not None:
            self.feature_sub_categories = feature_sub_categories
        if created_at is not None:
            self.created_at = created_at
        if updated_at is not None:
            self.updated_at = updated_at
        if version is not None:
            self.version = version

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


        :return: The id of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this Timeline.


        :param id: The id of this Timeline.  # noqa: E501
        :type: str
        """

        self._id = id

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


        :return: The type of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """Sets the type of this Timeline.


        :param type: The type of this Timeline.  # noqa: E501
        :type: str
        """
        if type is None:
            raise ValueError("Invalid value for `type`, must not be `None`")  # noqa: E501

        self._type = type

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


        :return: The stage of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._stage

    @stage.setter
    def stage(self, stage):
        """Sets the stage of this Timeline.


        :param stage: The stage of this Timeline.  # noqa: E501
        :type: str
        """
        if stage is None:
            raise ValueError("Invalid value for `stage`, must not be `None`")  # noqa: E501

        self._stage = stage

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


        :return: The evidence_start_at of this Timeline.  # noqa: E501
        :rtype: datetime
        """
        return self._evidence_start_at

    @evidence_start_at.setter
    def evidence_start_at(self, evidence_start_at):
        """Sets the evidence_start_at of this Timeline.


        :param evidence_start_at: The evidence_start_at of this Timeline.  # noqa: E501
        :type: datetime
        """
        if evidence_start_at is None:
            raise ValueError("Invalid value for `evidence_start_at`, must not be `None`")  # noqa: E501

        self._evidence_start_at = evidence_start_at

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


        :return: The outcome_end_at of this Timeline.  # noqa: E501
        :rtype: datetime
        """
        return self._outcome_end_at

    @outcome_end_at.setter
    def outcome_end_at(self, outcome_end_at):
        """Sets the outcome_end_at of this Timeline.


        :param outcome_end_at: The outcome_end_at of this Timeline.  # noqa: E501
        :type: datetime
        """
        if outcome_end_at is None:
            raise ValueError("Invalid value for `outcome_end_at`, must not be `None`")  # noqa: E501

        self._outcome_end_at = outcome_end_at

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


        :return: The evidence_period of this Timeline.  # noqa: E501
        :rtype: float
        """
        return self._evidence_period

    @evidence_period.setter
    def evidence_period(self, evidence_period):
        """Sets the evidence_period of this Timeline.


        :param evidence_period: The evidence_period of this Timeline.  # noqa: E501
        :type: float
        """
        if evidence_period is None:
            raise ValueError("Invalid value for `evidence_period`, must not be `None`")  # noqa: E501

        self._evidence_period = evidence_period

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


        :return: The delay_period of this Timeline.  # noqa: E501
        :rtype: float
        """
        return self._delay_period

    @delay_period.setter
    def delay_period(self, delay_period):
        """Sets the delay_period of this Timeline.


        :param delay_period: The delay_period of this Timeline.  # noqa: E501
        :type: float
        """
        if delay_period is None:
            raise ValueError("Invalid value for `delay_period`, must not be `None`")  # noqa: E501

        self._delay_period = delay_period

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


        :return: The timeline_results of this Timeline.  # noqa: E501
        :rtype: list[str]
        """
        return self._timeline_results

    @timeline_results.setter
    def timeline_results(self, timeline_results):
        """Sets the timeline_results of this Timeline.


        :param timeline_results: The timeline_results of this Timeline.  # noqa: E501
        :type: list[str]
        """

        self._timeline_results = timeline_results

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


        :return: The intervention_period of this Timeline.  # noqa: E501
        :rtype: float
        """
        return self._intervention_period

    @intervention_period.setter
    def intervention_period(self, intervention_period):
        """Sets the intervention_period of this Timeline.


        :param intervention_period: The intervention_period of this Timeline.  # noqa: E501
        :type: float
        """

        self._intervention_period = intervention_period

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


        :return: The athena_execution_id of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._athena_execution_id

    @athena_execution_id.setter
    def athena_execution_id(self, athena_execution_id):
        """Sets the athena_execution_id of this Timeline.


        :param athena_execution_id: The athena_execution_id of this Timeline.  # noqa: E501
        :type: str
        """

        self._athena_execution_id = athena_execution_id

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


        :return: The outcome_period of this Timeline.  # noqa: E501
        :rtype: float
        """
        return self._outcome_period

    @outcome_period.setter
    def outcome_period(self, outcome_period):
        """Sets the outcome_period of this Timeline.


        :param outcome_period: The outcome_period of this Timeline.  # noqa: E501
        :type: float
        """
        if outcome_period is None:
            raise ValueError("Invalid value for `outcome_period`, must not be `None`")  # noqa: E501

        self._outcome_period = outcome_period

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


        :return: The intervention_ratio of this Timeline.  # noqa: E501
        :rtype: float
        """
        return self._intervention_ratio

    @intervention_ratio.setter
    def intervention_ratio(self, intervention_ratio):
        """Sets the intervention_ratio of this Timeline.


        :param intervention_ratio: The intervention_ratio of this Timeline.  # noqa: E501
        :type: float
        """

        self._intervention_ratio = intervention_ratio

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


        :return: The timeline_uri of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._timeline_uri

    @timeline_uri.setter
    def timeline_uri(self, timeline_uri):
        """Sets the timeline_uri of this Timeline.


        :param timeline_uri: The timeline_uri of this Timeline.  # noqa: E501
        :type: str
        """

        self._timeline_uri = timeline_uri

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


        :return: The aggregation of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._aggregation

    @aggregation.setter
    def aggregation(self, aggregation):
        """Sets the aggregation of this Timeline.


        :param aggregation: The aggregation of this Timeline.  # noqa: E501
        :type: str
        """
        if aggregation is None:
            raise ValueError("Invalid value for `aggregation`, must not be `None`")  # noqa: E501

        self._aggregation = aggregation

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


        :return: The project_id of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._project_id

    @project_id.setter
    def project_id(self, project_id):
        """Sets the project_id of this Timeline.


        :param project_id: The project_id of this Timeline.  # noqa: E501
        :type: str
        """
        if project_id is None:
            raise ValueError("Invalid value for `project_id`, must not be `None`")  # noqa: E501

        self._project_id = project_id

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


        :return: The model_id of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._model_id

    @model_id.setter
    def model_id(self, model_id):
        """Sets the model_id of this Timeline.


        :param model_id: The model_id of this Timeline.  # noqa: E501
        :type: str
        """
        if model_id is None:
            raise ValueError("Invalid value for `model_id`, must not be `None`")  # noqa: E501

        self._model_id = model_id

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


        :return: The intervention_id of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._intervention_id

    @intervention_id.setter
    def intervention_id(self, intervention_id):
        """Sets the intervention_id of this Timeline.


        :param intervention_id: The intervention_id of this Timeline.  # noqa: E501
        :type: str
        """

        self._intervention_id = intervention_id

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


        :return: The train_timeline_id of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._train_timeline_id

    @train_timeline_id.setter
    def train_timeline_id(self, train_timeline_id):
        """Sets the train_timeline_id of this Timeline.


        :param train_timeline_id: The train_timeline_id of this Timeline.  # noqa: E501
        :type: str
        """

        self._train_timeline_id = train_timeline_id

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


        :return: The impactability_timeline_id of this Timeline.  # noqa: E501
        :rtype: str
        """
        return self._impactability_timeline_id

    @impactability_timeline_id.setter
    def impactability_timeline_id(self, impactability_timeline_id):
        """Sets the impactability_timeline_id of this Timeline.


        :param impactability_timeline_id: The impactability_timeline_id of this Timeline.  # noqa: E501
        :type: str
        """

        self._impactability_timeline_id = impactability_timeline_id

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


        :return: The outcome_queries of this Timeline.  # noqa: E501
        :rtype: list[str]
        """
        return self._outcome_queries

    @outcome_queries.setter
    def outcome_queries(self, outcome_queries):
        """Sets the outcome_queries of this Timeline.


        :param outcome_queries: The outcome_queries of this Timeline.  # noqa: E501
        :type: list[str]
        """

        self._outcome_queries = outcome_queries

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


        :return: The model_jobs of this Timeline.  # noqa: E501
        :rtype: list[ModelJob]
        """
        return self._model_jobs

    @model_jobs.setter
    def model_jobs(self, model_jobs):
        """Sets the model_jobs of this Timeline.


        :param model_jobs: The model_jobs of this Timeline.  # noqa: E501
        :type: list[ModelJob]
        """

        self._model_jobs = model_jobs

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


        :return: The timeline_code_filter_groups of this Timeline.  # noqa: E501
        :rtype: list[TimelineCodeFilterGroup]
        """
        return self._timeline_code_filter_groups

    @timeline_code_filter_groups.setter
    def timeline_code_filter_groups(self, timeline_code_filter_groups):
        """Sets the timeline_code_filter_groups of this Timeline.


        :param timeline_code_filter_groups: The timeline_code_filter_groups of this Timeline.  # noqa: E501
        :type: list[TimelineCodeFilterGroup]
        """

        self._timeline_code_filter_groups = timeline_code_filter_groups

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


        :return: The timeline_feature_filter_groups of this Timeline.  # noqa: E501
        :rtype: list[TimelineFeatureFilterGroup]
        """
        return self._timeline_feature_filter_groups

    @timeline_feature_filter_groups.setter
    def timeline_feature_filter_groups(self, timeline_feature_filter_groups):
        """Sets the timeline_feature_filter_groups of this Timeline.


        :param timeline_feature_filter_groups: The timeline_feature_filter_groups of this Timeline.  # noqa: E501
        :type: list[TimelineFeatureFilterGroup]
        """

        self._timeline_feature_filter_groups = timeline_feature_filter_groups

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


        :return: The feature_sub_categories of this Timeline.  # noqa: E501
        :rtype: list[str]
        """
        return self._feature_sub_categories

    @feature_sub_categories.setter
    def feature_sub_categories(self, feature_sub_categories):
        """Sets the feature_sub_categories of this Timeline.


        :param feature_sub_categories: The feature_sub_categories of this Timeline.  # noqa: E501
        :type: list[str]
        """

        self._feature_sub_categories = feature_sub_categories

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


        :return: The created_at of this Timeline.  # noqa: E501
        :rtype: datetime
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at):
        """Sets the created_at of this Timeline.


        :param created_at: The created_at of this Timeline.  # noqa: E501
        :type: datetime
        """

        self._created_at = created_at

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


        :return: The updated_at of this Timeline.  # noqa: E501
        :rtype: datetime
        """
        return self._updated_at

    @updated_at.setter
    def updated_at(self, updated_at):
        """Sets the updated_at of this Timeline.


        :param updated_at: The updated_at of this Timeline.  # noqa: E501
        :type: datetime
        """

        self._updated_at = updated_at

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


        :return: The version of this Timeline.  # noqa: E501
        :rtype: float
        """
        return self._version

    @version.setter
    def version(self, version):
        """Sets the version of this Timeline.


        :param version: The version of this Timeline.  # noqa: E501
        :type: float
        """

        self._version = version

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

        for attr, _ in six.iteritems(self.swagger_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
        if issubclass(Timeline, dict):
            for key, value in self.items():
                result[key] = 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, Timeline):
            return False

        return self.__dict__ == other.__dict__

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