# coding: utf-8

"""
    node-server

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

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

from datetime import date, datetime  # noqa: F401
import decimal  # noqa: F401
import functools  # noqa: F401
import io  # noqa: F401
import re  # noqa: F401
import typing  # noqa: F401
import typing_extensions  # noqa: F401
import uuid  # noqa: F401

import frozendict  # noqa: F401

from openapi_client import schemas  # noqa: F401


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

    Do not edit the class manually.
    """


    class MetaOapg:
        required = {
            "outputs",
            "metadata",
            "preprocess",
            "inputs",
            "custom_loss_names",
            "prediction_types",
            "visualizers",
        }
        
        class properties:
        
            @staticmethod
            def preprocess() -> typing.Type['DatasetPreprocess']:
                return DatasetPreprocess
            
            
            class inputs(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['DatasetInputInstance']:
                        return DatasetInputInstance
            
                def __new__(
                    cls,
                    arg: typing.Union[typing.Tuple['DatasetInputInstance'], typing.List['DatasetInputInstance']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'inputs':
                    return super().__new__(
                        cls,
                        arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'DatasetInputInstance':
                    return super().__getitem__(i)
            
            
            class metadata(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['DatasetMetadataInstance']:
                        return DatasetMetadataInstance
            
                def __new__(
                    cls,
                    arg: typing.Union[typing.Tuple['DatasetMetadataInstance'], typing.List['DatasetMetadataInstance']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'metadata':
                    return super().__new__(
                        cls,
                        arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'DatasetMetadataInstance':
                    return super().__getitem__(i)
            
            
            class outputs(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['DatasetOutputInstance']:
                        return DatasetOutputInstance
            
                def __new__(
                    cls,
                    arg: typing.Union[typing.Tuple['DatasetOutputInstance'], typing.List['DatasetOutputInstance']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'outputs':
                    return super().__new__(
                        cls,
                        arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'DatasetOutputInstance':
                    return super().__getitem__(i)
            
            
            class visualizers(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['VisualizerInstance']:
                        return VisualizerInstance
            
                def __new__(
                    cls,
                    arg: typing.Union[typing.Tuple['VisualizerInstance'], typing.List['VisualizerInstance']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'visualizers':
                    return super().__new__(
                        cls,
                        arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'VisualizerInstance':
                    return super().__getitem__(i)
            
            
            class prediction_types(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['PredictionTypeInstance']:
                        return PredictionTypeInstance
            
                def __new__(
                    cls,
                    arg: typing.Union[typing.Tuple['PredictionTypeInstance'], typing.List['PredictionTypeInstance']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'prediction_types':
                    return super().__new__(
                        cls,
                        arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'PredictionTypeInstance':
                    return super().__getitem__(i)
            
            
            class custom_loss_names(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    items = schemas.StrSchema
            
                def __new__(
                    cls,
                    arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, ]], typing.List[typing.Union[MetaOapg.items, str, ]]],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'custom_loss_names':
                    return super().__new__(
                        cls,
                        arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> MetaOapg.items:
                    return super().__getitem__(i)
            __annotations__ = {
                "preprocess": preprocess,
                "inputs": inputs,
                "metadata": metadata,
                "outputs": outputs,
                "visualizers": visualizers,
                "prediction_types": prediction_types,
                "custom_loss_names": custom_loss_names,
            }
        additional_properties = schemas.NotAnyTypeSchema
    
    outputs: MetaOapg.properties.outputs
    metadata: MetaOapg.properties.metadata
    preprocess: 'DatasetPreprocess'
    inputs: MetaOapg.properties.inputs
    custom_loss_names: MetaOapg.properties.custom_loss_names
    prediction_types: MetaOapg.properties.prediction_types
    visualizers: MetaOapg.properties.visualizers
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["outputs"]) -> MetaOapg.properties.outputs: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["metadata"]) -> MetaOapg.properties.metadata: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["preprocess"]) -> 'DatasetPreprocess': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["inputs"]) -> MetaOapg.properties.inputs: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["custom_loss_names"]) -> MetaOapg.properties.custom_loss_names: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["prediction_types"]) -> MetaOapg.properties.prediction_types: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["visualizers"]) -> MetaOapg.properties.visualizers: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["outputs"], typing_extensions.Literal["metadata"], typing_extensions.Literal["preprocess"], typing_extensions.Literal["inputs"], typing_extensions.Literal["custom_loss_names"], typing_extensions.Literal["prediction_types"], typing_extensions.Literal["visualizers"], ]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["outputs"]) -> MetaOapg.properties.outputs: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["metadata"]) -> MetaOapg.properties.metadata: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["preprocess"]) -> 'DatasetPreprocess': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["inputs"]) -> MetaOapg.properties.inputs: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["custom_loss_names"]) -> MetaOapg.properties.custom_loss_names: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["prediction_types"]) -> MetaOapg.properties.prediction_types: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["visualizers"]) -> MetaOapg.properties.visualizers: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["outputs"], typing_extensions.Literal["metadata"], typing_extensions.Literal["preprocess"], typing_extensions.Literal["inputs"], typing_extensions.Literal["custom_loss_names"], typing_extensions.Literal["prediction_types"], typing_extensions.Literal["visualizers"], ]):
        return super().get_item_oapg(name)

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        outputs: typing.Union[MetaOapg.properties.outputs, list, tuple, ],
        metadata: typing.Union[MetaOapg.properties.metadata, list, tuple, ],
        preprocess: 'DatasetPreprocess',
        inputs: typing.Union[MetaOapg.properties.inputs, list, tuple, ],
        custom_loss_names: typing.Union[MetaOapg.properties.custom_loss_names, list, tuple, ],
        prediction_types: typing.Union[MetaOapg.properties.prediction_types, list, tuple, ],
        visualizers: typing.Union[MetaOapg.properties.visualizers, list, tuple, ],
        _configuration: typing.Optional[schemas.Configuration] = None,
    ) -> 'DatasetSetup':
        return super().__new__(
            cls,
            *args,
            outputs=outputs,
            metadata=metadata,
            preprocess=preprocess,
            inputs=inputs,
            custom_loss_names=custom_loss_names,
            prediction_types=prediction_types,
            visualizers=visualizers,
            _configuration=_configuration,
        )

from openapi_client.model.dataset_input_instance import DatasetInputInstance
from openapi_client.model.dataset_metadata_instance import DatasetMetadataInstance
from openapi_client.model.dataset_output_instance import DatasetOutputInstance
from openapi_client.model.dataset_preprocess import DatasetPreprocess
from openapi_client.model.prediction_type_instance import PredictionTypeInstance
from openapi_client.model.visualizer_instance import VisualizerInstance
