# this file is auto-generated by generate_self_schema.py, DO NOT edit manually
self_schema = {
    'type': 'tagged-union',
    'ref': 'root-schema',
    'discriminator': 'self-schema-discriminator',
    'choices': {
        'plain-string': {
            'type': 'literal',
            'expected': [
                'any',
                'none',
                'str',
                'bytes',
                'dict',
                'int',
                'bool',
                'float',
                'list',
                'tuple',
                'set',
                'frozenset',
                'date',
                'time',
                'datetime',
                'timedelta',
                'callable',
            ],
        },
        'any': {
            'type': 'typed-dict',
            'description': 'AnySchema',
            'fields': {'type': {'schema': {'type': 'literal', 'expected': ['any']}, 'required': True}},
            'extra_behavior': 'forbid',
        },
        'bool': {
            'type': 'typed-dict',
            'description': 'BoolSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['bool']}, 'required': True},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'bytes': {
            'type': 'typed-dict',
            'description': 'BytesSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['bytes']}, 'required': True},
                'max_length': {'schema': 'int', 'required': False},
                'min_length': {'schema': 'int', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'dict': {
            'type': 'typed-dict',
            'description': 'DictSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['dict']}, 'required': True},
                'keys_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'values_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'min_items': {'schema': 'int', 'required': False},
                'max_items': {'schema': 'int', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'float': {
            'type': 'typed-dict',
            'description': 'FloatSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['float']}, 'required': True},
                'multiple_of': {'schema': 'float', 'required': False},
                'le': {'schema': 'float', 'required': False},
                'ge': {'schema': 'float', 'required': False},
                'lt': {'schema': 'float', 'required': False},
                'gt': {'schema': 'float', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'function': {
            'type': 'typed-dict',
            'description': 'FunctionSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['function']}, 'required': True},
                'mode': {'schema': {'type': 'literal', 'expected': ['before', 'after', 'wrap']}, 'required': True},
                'function': {'schema': 'callable', 'required': True},
                'schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'function-plain': {
            'type': 'typed-dict',
            'description': 'FunctionPlainSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['function']}, 'required': True},
                'mode': {'schema': {'type': 'literal', 'expected': ['plain']}, 'required': True},
                'function': {'schema': 'callable', 'required': True},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'int': {
            'type': 'typed-dict',
            'description': 'IntSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['int']}, 'required': True},
                'multiple_of': {'schema': 'int', 'required': False},
                'le': {'schema': 'int', 'required': False},
                'ge': {'schema': 'int', 'required': False},
                'lt': {'schema': 'int', 'required': False},
                'gt': {'schema': 'int', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'list': {
            'type': 'typed-dict',
            'description': 'ListSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['list']}, 'required': True},
                'items_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'min_items': {'schema': 'int', 'required': False},
                'max_items': {'schema': 'int', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'literal': {
            'type': 'typed-dict',
            'description': 'LiteralSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['literal']}, 'required': True},
                'expected': {'schema': {'type': 'list', 'items_schema': 'any'}, 'required': True},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'typed-dict': {
            'type': 'typed-dict',
            'description': 'TypedDictSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['typed-dict']}, 'required': True},
                'fields': {
                    'schema': {
                        'type': 'dict',
                        'keys_schema': 'str',
                        'values_schema': {
                            'type': 'typed-dict',
                            'description': 'TypedDictField',
                            'fields': {
                                'schema': {
                                    'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'},
                                    'required': True,
                                },
                                'required': {'schema': 'bool', 'required': False},
                                'default': {'schema': 'any', 'required': False},
                                'default_factory': {'schema': 'callable', 'required': False},
                                'on_error': {
                                    'schema': {'type': 'literal', 'expected': ['raise', 'omit', 'fallback_on_default']},
                                    'required': False,
                                },
                                'alias': {
                                    'schema': {
                                        'type': 'union',
                                        'choices': [
                                            'str',
                                            {
                                                'type': 'list',
                                                'items_schema': {'type': 'union', 'choices': ['str', 'int']},
                                            },
                                            {
                                                'type': 'list',
                                                'items_schema': {
                                                    'type': 'list',
                                                    'items_schema': {'type': 'union', 'choices': ['str', 'int']},
                                                },
                                            },
                                        ],
                                    },
                                    'required': False,
                                },
                            },
                            'extra_behavior': 'forbid',
                        },
                    },
                    'required': True,
                },
                'strict': {'schema': 'bool', 'required': False},
                'extra_validator': {
                    'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'},
                    'required': False,
                },
                'return_fields_set': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
                'extra_behavior': {
                    'schema': {'type': 'literal', 'expected': ['allow', 'forbid', 'ignore']},
                    'required': False,
                },
                'full': {'schema': 'bool', 'required': False},
                'populate_by_name': {'schema': 'bool', 'required': False},
                'from_attributes': {'schema': 'bool', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'new-class': {
            'type': 'typed-dict',
            'description': 'NewClassSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['new-class']}, 'required': True},
                'class_type': {'schema': 'any', 'required': True},
                'schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': True},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
                'config': {
                    'schema': {
                        'type': 'typed-dict',
                        'description': 'Config',
                        'fields': {
                            'strict': {'schema': 'bool', 'required': False},
                            'config_choose_priority': {'schema': 'int', 'required': False},
                            'config_merge_priority': {'schema': 'int', 'required': False},
                            'typed_dict_extra_behavior': {
                                'schema': {'type': 'literal', 'expected': ['allow', 'forbid', 'ignore']},
                                'required': False,
                            },
                            'typed_dict_full': {'schema': 'bool', 'required': False},
                            'from_attributes': {'schema': 'bool', 'required': False},
                            'revalidate_models': {'schema': 'bool', 'required': False},
                            'populate_by_name': {'schema': 'bool', 'required': False},
                            'str_max_length': {'schema': 'int', 'required': False},
                            'str_min_length': {'schema': 'int', 'required': False},
                            'str_strip_whitespace': {'schema': 'bool', 'required': False},
                            'str_to_lower': {'schema': 'bool', 'required': False},
                            'str_to_upper': {'schema': 'bool', 'required': False},
                        },
                        'extra_behavior': 'forbid',
                    },
                    'required': False,
                },
            },
            'extra_behavior': 'forbid',
        },
        'none': {
            'type': 'typed-dict',
            'description': 'NoneSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['none']}, 'required': True},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'nullable': {
            'type': 'typed-dict',
            'description': 'NullableSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['nullable']}, 'required': True},
                'schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': True},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'recursive-ref': {
            'type': 'typed-dict',
            'description': 'RecursiveReferenceSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['recursive-ref']}, 'required': True},
                'schema_ref': {'schema': 'str', 'required': True},
            },
            'extra_behavior': 'forbid',
        },
        'set': {
            'type': 'typed-dict',
            'description': 'SetSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['set']}, 'required': True},
                'items_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'min_items': {'schema': 'int', 'required': False},
                'max_items': {'schema': 'int', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'frozenset': {
            'type': 'typed-dict',
            'description': 'FrozenSetSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['frozenset']}, 'required': True},
                'items_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'min_items': {'schema': 'int', 'required': False},
                'max_items': {'schema': 'int', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'str': {
            'type': 'typed-dict',
            'description': 'StringSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['str']}, 'required': True},
                'pattern': {'schema': 'str', 'required': False},
                'max_length': {'schema': 'int', 'required': False},
                'min_length': {'schema': 'int', 'required': False},
                'strip_whitespace': {'schema': 'bool', 'required': False},
                'to_lower': {'schema': 'bool', 'required': False},
                'to_upper': {'schema': 'bool', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'tuple-positional': {
            'type': 'typed-dict',
            'description': 'TuplePositionalSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['tuple']}, 'required': True},
                'mode': {'schema': {'type': 'literal', 'expected': ['positional']}, 'required': True},
                'items_schema': {
                    'schema': {'type': 'list', 'items_schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}},
                    'required': True,
                },
                'extra_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'tuple-variable': {
            'type': 'typed-dict',
            'description': 'TupleVariableSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['tuple']}, 'required': True},
                'mode': {'schema': {'type': 'literal', 'expected': ['variable']}, 'required': False},
                'items_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'min_items': {'schema': 'int', 'required': False},
                'max_items': {'schema': 'int', 'required': False},
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'union': {
            'type': 'typed-dict',
            'description': 'UnionSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['union']}, 'required': True},
                'choices': {
                    'schema': {'type': 'list', 'items_schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}},
                    'required': True,
                },
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'tagged-union': {
            'type': 'typed-dict',
            'description': 'TaggedUnionSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['tagged-union']}, 'required': True},
                'choices': {
                    'schema': {
                        'type': 'dict',
                        'keys_schema': 'str',
                        'values_schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'},
                    },
                    'required': True,
                },
                'discriminator': {
                    'schema': {
                        'type': 'union',
                        'choices': [
                            'str',
                            {'type': 'list', 'items_schema': {'type': 'union', 'choices': ['str', 'int']}},
                            {
                                'type': 'list',
                                'items_schema': {
                                    'type': 'list',
                                    'items_schema': {'type': 'union', 'choices': ['str', 'int']},
                                },
                            },
                            'callable',
                        ],
                    },
                    'required': True,
                },
                'strict': {'schema': 'bool', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'date': {
            'type': 'typed-dict',
            'description': 'DateSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['date']}, 'required': True},
                'strict': {'schema': 'bool', 'required': False},
                'le': {'schema': 'date', 'required': False},
                'ge': {'schema': 'date', 'required': False},
                'lt': {'schema': 'date', 'required': False},
                'gt': {'schema': 'date', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'time': {
            'type': 'typed-dict',
            'description': 'TimeSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['time']}, 'required': True},
                'strict': {'schema': 'bool', 'required': False},
                'le': {'schema': 'time', 'required': False},
                'ge': {'schema': 'time', 'required': False},
                'lt': {'schema': 'time', 'required': False},
                'gt': {'schema': 'time', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'datetime': {
            'type': 'typed-dict',
            'description': 'DatetimeSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['datetime']}, 'required': True},
                'strict': {'schema': 'bool', 'required': False},
                'le': {'schema': 'datetime', 'required': False},
                'ge': {'schema': 'datetime', 'required': False},
                'lt': {'schema': 'datetime', 'required': False},
                'gt': {'schema': 'datetime', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'timedelta': {
            'type': 'typed-dict',
            'description': 'TimedeltaSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['timedelta']}, 'required': True},
                'strict': {'schema': 'bool', 'required': False},
                'le': {'schema': 'timedelta', 'required': False},
                'ge': {'schema': 'timedelta', 'required': False},
                'lt': {'schema': 'timedelta', 'required': False},
                'gt': {'schema': 'timedelta', 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'is-instance': {
            'type': 'typed-dict',
            'description': 'IsInstanceSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['is-instance']}, 'required': True},
                'class_': {'schema': 'any', 'required': True},
            },
            'extra_behavior': 'forbid',
        },
        'callable': {
            'type': 'typed-dict',
            'description': 'CallableSchema',
            'fields': {'type': {'schema': {'type': 'literal', 'expected': ['callable']}, 'required': True}},
            'extra_behavior': 'forbid',
        },
        'arguments': {
            'type': 'typed-dict',
            'description': 'ArgumentsSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['arguments']}, 'required': True},
                'arguments_schema': {
                    'schema': {
                        'type': 'list',
                        'items_schema': {
                            'type': 'typed-dict',
                            'description': 'Parameter',
                            'fields': {
                                'name': {'schema': 'str', 'required': True},
                                'mode': {
                                    'schema': {
                                        'type': 'literal',
                                        'expected': ['positional_only', 'positional_or_keyword', 'keyword_only'],
                                    },
                                    'required': False,
                                },
                                'schema': {
                                    'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'},
                                    'required': True,
                                },
                                'default': {'schema': 'any', 'required': False},
                                'default_factory': {'schema': 'callable', 'required': False},
                                'alias': {
                                    'schema': {
                                        'type': 'union',
                                        'choices': [
                                            'str',
                                            {
                                                'type': 'list',
                                                'items_schema': {'type': 'union', 'choices': ['str', 'int']},
                                            },
                                            {
                                                'type': 'list',
                                                'items_schema': {
                                                    'type': 'list',
                                                    'items_schema': {'type': 'union', 'choices': ['str', 'int']},
                                                },
                                            },
                                        ],
                                    },
                                    'required': False,
                                },
                            },
                            'extra_behavior': 'forbid',
                        },
                    },
                    'required': True,
                },
                'populate_by_name': {'schema': 'bool', 'required': False},
                'var_args_schema': {
                    'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'},
                    'required': False,
                },
                'var_kwargs_schema': {
                    'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'},
                    'required': False,
                },
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
        'call': {
            'type': 'typed-dict',
            'description': 'CallSchema',
            'fields': {
                'type': {'schema': {'type': 'literal', 'expected': ['call']}, 'required': True},
                'function': {'schema': 'callable', 'required': True},
                'arguments_schema': {
                    'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'},
                    'required': True,
                },
                'return_schema': {'schema': {'type': 'recursive-ref', 'schema_ref': 'root-schema'}, 'required': False},
                'ref': {'schema': 'str', 'required': False},
            },
            'extra_behavior': 'forbid',
        },
    },
}
