# coding: utf-8

"""
    SPIRVSmith-Server

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

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

import re  # noqa: F401
import sys  # noqa: F401
import typing  # noqa: F401
import functools  # noqa: F401

from frozendict import frozendict  # noqa: F401

import decimal  # noqa: F401
from datetime import date, datetime  # noqa: F401
from frozendict import frozendict  # noqa: F401

from spirvsmith_server_sdk.schemas import (  # noqa: F401
    AnyTypeSchema,
    ComposedSchema,
    DictSchema,
    ListSchema,
    StrSchema,
    IntSchema,
    Int32Schema,
    Int64Schema,
    Float32Schema,
    Float64Schema,
    NumberSchema,
    UUIDSchema,
    DateSchema,
    DateTimeSchema,
    DecimalSchema,
    BoolSchema,
    BinarySchema,
    NoneSchema,
    none_type,
    Configuration,
    Unset,
    unset,
    ComposedBase,
    ListBase,
    DictBase,
    NoneBase,
    StrBase,
    IntBase,
    Int32Base,
    Int64Base,
    Float32Base,
    Float64Base,
    NumberBase,
    UUIDBase,
    DateBase,
    DateTimeBase,
    BoolBase,
    BinaryBase,
    Schema,
    _SchemaValidator,
    _SchemaTypeChecker,
    _SchemaEnumMaker
)


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

    Do not edit the class manually.
    """
    _required_property_names = set((
        'mutations_config',
        'enable_ext_glsl_std_450',
        'w_memory_operation',
        'w_logical_operation',
        'w_arithmetic_operation',
        'w_control_flow_operation',
        'w_function_operation',
        'w_bitwise_operation',
        'w_conversion_operation',
        'w_composite_operation',
        'w_scalar_type',
        'w_container_type',
        'w_composite_constant',
        'w_scalar_constant',
        'p_statement',
        'p_picking_statement_operand',
        'mutation_rate',
    ))

    @classmethod
    @property
    def mutations_config(cls) -> typing.Type['MutationsConfig']:
        return MutationsConfig
    enable_ext_glsl_std_450 = BoolSchema
    w_memory_operation = IntSchema
    w_logical_operation = IntSchema
    w_arithmetic_operation = IntSchema
    w_control_flow_operation = IntSchema
    w_function_operation = IntSchema
    w_bitwise_operation = IntSchema
    w_conversion_operation = IntSchema
    w_composite_operation = IntSchema
    w_scalar_type = IntSchema
    w_container_type = IntSchema
    w_composite_constant = IntSchema
    w_scalar_constant = IntSchema
    p_statement = NumberSchema
    p_picking_statement_operand = NumberSchema
    mutation_rate = NumberSchema


    def __new__(
        cls,
        *args: typing.Union[dict, frozendict, ],
        mutations_config: mutations_config,
        enable_ext_glsl_std_450: enable_ext_glsl_std_450,
        w_memory_operation: w_memory_operation,
        w_logical_operation: w_logical_operation,
        w_arithmetic_operation: w_arithmetic_operation,
        w_control_flow_operation: w_control_flow_operation,
        w_function_operation: w_function_operation,
        w_bitwise_operation: w_bitwise_operation,
        w_conversion_operation: w_conversion_operation,
        w_composite_operation: w_composite_operation,
        w_scalar_type: w_scalar_type,
        w_container_type: w_container_type,
        w_composite_constant: w_composite_constant,
        w_scalar_constant: w_scalar_constant,
        p_statement: p_statement,
        p_picking_statement_operand: p_picking_statement_operand,
        mutation_rate: mutation_rate,
        _configuration: typing.Optional[Configuration] = None,
        **kwargs: typing.Type[Schema],
    ) -> 'FuzzingStrategy':
        return super().__new__(
            cls,
            *args,
            mutations_config=mutations_config,
            enable_ext_glsl_std_450=enable_ext_glsl_std_450,
            w_memory_operation=w_memory_operation,
            w_logical_operation=w_logical_operation,
            w_arithmetic_operation=w_arithmetic_operation,
            w_control_flow_operation=w_control_flow_operation,
            w_function_operation=w_function_operation,
            w_bitwise_operation=w_bitwise_operation,
            w_conversion_operation=w_conversion_operation,
            w_composite_operation=w_composite_operation,
            w_scalar_type=w_scalar_type,
            w_container_type=w_container_type,
            w_composite_constant=w_composite_constant,
            w_scalar_constant=w_scalar_constant,
            p_statement=p_statement,
            p_picking_statement_operand=p_picking_statement_operand,
            mutation_rate=mutation_rate,
            _configuration=_configuration,
            **kwargs,
        )

from spirvsmith_server_sdk.model.mutations_config import MutationsConfig
