
    gƽ             
      	   U d Z ddlmZ ddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z, ddlm-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddlm=Z= ddl>Z>ddl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG ddl>mHZHmIZImJZJmKZKmLZLmMZM ddlNmOZOmPZPmQZQ ddlRmSZSmTZT ddlUmVZVmWZWmXZXmYZY ddlZm[Z[m\Z\m]Z] ddl^m_Z_m`Z`maZambZbmcZc ddldmeZe ddlfmgZg ddlmhZh ddlimjZjmkZkmlZlmmZmmnZn ddlompZpmqZq dd lrmsZs dd!ljmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{ dd"lkm|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZ dd#lmZ dd$lmZmZ dd%lmZ dd&lmZmZmZmZ dd'lmZmZ dd(lmZ dd)lmZmZ dd*lmZ dd+lmZmZ e-r dd,lmZmZ dd-lmZ dd.l)mZ dd/lmZ dd0lmZ ejT                  d1k\  Ze8eee~f   Z e7d2e3      Ze8e|e   e|e   e|e~   f   ZeSZe/e.egeFj                  f   Zeejd                  gZd4ed5<   eejl                  ejn                  jp                  gZd4ed6<   eejv                  ejn                  jx                  gZd4ed7<   eej~                  ejn                  jv                  gZd4ed8<   eej`                  gZd4ed9<   ee e!e"e#e$gZd4ed:<   ej                  ejn                  j                  gZd4ed;<   e	j                  e
j                  e
j                  e
j                  e
j                  e
j                  gZd4ed<<   ejj                  ej                  ejn                  jj                  ejn                  j                  ej                  e>j                  ej                  ej                  ej                  ej                  g
Zej                  ej                  gZd4ed=<   e8e+e*e,ef   Z eKe֫      Ze`e_ebecd>Zd?ed@<   	 	 	 	 	 	 dedAZdfdBZ	 	 	 	 	 	 dgdCZ	 	 	 	 	 	 	 	 dhdDZ	 	 	 	 didEZe0e6e.   eXf   Z	 	 	 	 	 	 	 	 djdFZdkdGZ G dH dI      ZdJ dK dL dM dN dO dP dQ dRZdSedT<   	 	 	 	 	 	 	 	 dldUZdmdVZ	 	 	 	 	 	 	 	 dndWZdodXZdpdYZ G dZ d[eJ      Zdddddd\	 	 	 	 	 	 	 	 	 	 	 	 	 dqd]Z G d^ d_      Zdrd`Z G da db      Z G dc dd      Zy)sz-Convert python types to pydantic-core schema.    )annotationsN)contextmanager)copydeepcopy)Decimal)Enum)Fraction)partial)	Parameter_ParameterKind	signature)IPv4AddressIPv4InterfaceIPv4NetworkIPv6AddressIPv6InterfaceIPv6Network)chain)
attrgetter)FunctionType
LambdaType
MethodType)TYPE_CHECKINGAnyCallableDictFinal
ForwardRefIterableIteratorMappingTypeTypeVarUnioncastoverload)UUID)warn)
CoreSchemaMultiHostUrlPydanticCustomError$PydanticSerializationUnexpectedValuePydanticUndefinedUrlcore_schemato_jsonable_python)LiteralTypeAliasType	TypedDictget_args
get_originis_typeddict   )AliasChoicesAliasGenerator	AliasPath)GetCoreSchemaHandlerGetJsonSchemaHandler)
ConfigDictJsonDictJsonEncoderJsonSchemaExtraCallable)PydanticSchemaGenerationErrorPydanticUndefinedAnnotationPydanticUserError)AfterValidatorBeforeValidatorFieldValidatorModesPlainValidatorWrapValidator)JsonSchemaValue)version_short)PydanticDeprecatedSince20   )_core_utils_decorators_discriminated_union_known_annotated_metadata_typing_extra)ConfigWrapperConfigWrapperStack)update_core_metadata)collect_invalid_schemasdefine_expected_missing_refsget_refget_type_refis_function_with_inner_schema%is_list_like_schema_with_items_schemasimplify_schema_referencesvalidate_core_schema)	DecoratorDecoratorInfosFieldSerializerDecoratorInfoFieldValidatorDecoratorInfoModelSerializerDecoratorInfoModelValidatorDecoratorInfoRootValidatorDecoratorInfoValidatorDecoratorInfoget_attribute_from_basesinspect_field_serializerinspect_model_serializerinspect_validator)extract_docstrings_from_cls)collect_dataclass_fieldstakes_validated_data_argument)PydanticRecursiveRef)get_standard_typevars_maphas_instance_in_typerecursively_defined_type_refsreplace_types)import_cached_base_modelimport_cached_field_info)MockCoreSchema)NamespacesTuple
NsResolver)CallbackGetCoreSchemaHandler)lenient_issubclasssmart_deepcopy)ComputedFieldInfo	FieldInfo	BaseModel)Discriminator)StandardDataclass)GetJsonSchemaFunction)      FieldDecoratorInfoType)boundz
list[type]TUPLE_TYPES
LIST_TYPES	SET_TYPESFROZEN_SET_TYPES
DICT_TYPESIP_TYPESSEQUENCE_TYPES
PATH_TYPESDEQUE_TYPES)beforeafterplainwrapzbdict[FieldValidatorModes, type[BeforeValidator | AfterValidator | PlainValidator | WrapValidator]]_mode_to_validatorc                R    d| j                   v ry| j                   D ]	  }||k(  s	 y y)zCheck if field name is in validator fields.

    Args:
        info: The field info.
        field: The field name to check.

    Returns:
        `True` if field name is in validator fields, `False` otherwise.
    *TF)fields)infofieldv_field_names      X/var/www/openai/venv/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py)check_validator_fields_against_field_namer      s1     dkk5  $     c           	        t        |      }| D ]{  }d|j                  j                  v r|j                  j                  du r5|j                  j                  D ].  }||vst	        d|j
                   d|j                   dd       } y)	av  Check if the defined fields in decorators exist in `fields` param.

    It ignores the check for a decorator if the decorator has `*` as field or `check_fields=False`.

    Args:
        decorators: An iterable of decorators.
        fields: An iterable of fields name.

    Raises:
        PydanticUserError: If one of the field names does not exist in `fields` param.
    r   Fz*Decorators defined with incorrect fields: .zO (use check_fields=False if you're inheriting from the model and intended this)zdecorator-missing-fieldcodeN)setr   r   check_fieldsrC   cls_refcls_var_name)
decoratorsr   decr   s       r   check_decorator_fields_existr      s     [F#((//!88  E)XX__EF"'@QsO_O_N`ef2  % r   c                Z    | D cg c]  }t        |j                  |      s| c}S c c}w N)r   r   )validator_functionsr   r   s      r   $filter_field_decorator_info_by_fieldr      s0     /m.C2[\_\d\dfk2lC.mmms   ((c                   |s| S | d   dk(  rt        | d   ||      | d<   | S | d   dk(  r.| j                  d      x}t        | d   |   ||      | d   |<   | S t        |       r6| j                  dt	        j
                               }t        |||      | d<   | S | d   dk(  r6| j                  dt	        j
                               }t        |||      | d<   | S t        d	| d          )
Ntypenullableschematuplevariadic_item_indexitems_schemadictvalues_schemazO`@validator(..., each_item=True)` cannot be applied to fields with a schema of )apply_each_item_validatorsgetapply_validatorsrZ   r/   
any_schema	TypeError)r   each_item_validators
field_namer   inner_schemas        r   r   r      s.     
 f~#5fX6FH\^hix	7	"#)::.C#DDQ:J~&':;$;F>"#67 M 
/v	6zz.+2H2H2JK!1,@TV`!a~ M 
6	!zz/;3I3I3KL"2<AUWa"b
 M ]^dek^l]mn
 	
r   c                *   | j                   | j                  t        | j                        xs | j                  dk(  xs d t	        | j
                        d}|j                         D ci c]  \  }}|	|| }}}|xs d | j                  fS c c}}w )N )titledescription
deprecatedexamples)r   r   boolr   r0   r   itemsjson_schema_extra)r   json_schema_updateskvs       r   )_extract_json_schema_info_from_field_infor     s     ''4??+Lt"/DL&t}}5	 -@,E,E,GY,GDAq1=1a4,GY'4)?)?@@ Zs   *
B5Bc                "   | s|S d|v r|S |gt        |d|j                  j                        dd D ]Y  }| j                  |      }|t	        j
                  dt                dt               t        j                  |d      |d<   |c S  |S )	a  Iterate over the json_encoders and add the first matching encoder to the schema.

    Args:
        json_encoders: A dictionary of types and their encoder functions.
        tp: The type to check for a matching encoder.
        schema: The schema to add the encoder to.
    serialization__mro__Nz=`json_encoders` is deprecated. See https://docs.pydantic.dev/z</concepts/serialization/#custom-serializers for alternativesjson	when_used)
getattr	__class__r   r   warningsr(   rJ   rK   r/   $plain_serializer_function_ser_schema)json_encoderstpr   baseencoders        r   ,_add_custom_serialization_from_json_encodersr     s     &  Hgb)R\\-A-AB3BGH##D)?KMOK\  ]Y  Z%	
 #."R"RSZfl"m I Mr   c                    | | S |S )aB  Return the first argument if it is not None, otherwise return the second argument.

    Use case: serialization_alias (argument a) and alias (argument b) are both defined, and serialization_alias is ''.
    This function will return serialization_alias, which is the first argument, even though it is an empty string.
     )abs     r   _get_first_non_nullr   5  s     1$1$r   c                      e Zd ZdZdZ	 	 dK	 	 	 	 	 	 	 dLdZdM fdZedNd       ZedOd       Z	edPd       Z
dQd	ZdRd
ZdQdZdQdZdSdZdTdZdUdZdTdZdVdZ	 	 	 	 	 	 dWdZ G d de      ZdXdZdXdZdYdZ	 dZ	 	 	 	 	 d[dZd\dZdXdZd]dZd^dZd]dZe d_d       Z!e d`d        Z!dadbd!Z!d]d"Z"dcd#Z#ddd$Z$ddd%Z%ded&Z&dd'	 	 	 	 	 	 	 	 	 dfd(Z'	 	 	 	 	 	 	 	 dgd)Z(	 	 	 	 	 	 	 	 dhd*Z)e*	 	 	 	 	 	 	 	 did+       Z+e*	 	 	 	 	 	 djd,       Z,e*	 	 	 	 	 	 	 	 dkd-       Z-	 	 	 	 	 	 	 	 dld.Z.dmd/Z/dnd0Z0dod1Z1dpd2Z2dqd3Z3e4jj                  df	 	 	 	 	 	 	 	 	 drd4Z6dsd5Z7dtd6Z8dtd7Z9dmd8Z:dud9Z;dvd:Z<dwd;Z=dxd<Z>dtd=Z?	 	 	 	 	 	 dyd>Z@dzd?ZAd{d@ZB	 	 	 	 	 	 d|dAZCd}dBZD	 	 	 	 	 	 d~dCZEdD f	 	 	 	 	 	 	 ddEZFddFZG	 	 	 	 	 	 ddGZH	 	 	 	 	 	 	 	 ddHZI	 	 	 	 	 	 ddIZJ	 	 	 	 	 	 ddJZK xZLS )GenerateSchemaz\Generate core schema for a Pydantic model, dataclass and types like `str`, `datetime`, ... .)_config_wrapper_stack_ns_resolver_typevars_mapfield_name_stackmodel_type_stackdefsNc                    t        |      | _        |xs
 t               | _        || _        t               | _        t               | _        t               | _
        y r   )rS   r   ru   r   r   _FieldNameStackr   _ModelTypeStackr   _Definitionsr   )selfconfig_wrapperns_resolvertypevars_maps       r   __init__zGenerateSchema.__init__J  sG     &8%G"'7:<) / 1 / 1 N	r   c                Z    t         |           t        j                  dt        d       y )NzeSubclassing `GenerateSchema` is not supported. The API is highly subject to change in minor versions.r7   )
stacklevel)super__init_subclass__r   r(   UserWarning)clsr   s    r   r   z GenerateSchema.__init_subclass__X  s#    !#s	
r   c                .    | j                   j                  S r   )r   tailr   s    r   _config_wrapperzGenerateSchema._config_wrapper`  s    ))...r   c                .    | j                   j                  S r   )r   types_namespacer   s    r   _types_namespacezGenerateSchema._types_namespaced  s      000r   c                .    | j                   j                  S r   )r   arbitrary_types_allowedr   s    r   _arbitrary_typeszGenerateSchema._arbitrary_typesh  s    ##;;;r   c                J    t        j                  | j                  |            S r   )r/   list_schemagenerate_schemar   
items_types     r   _list_schemazGenerateSchema._list_scheman  s    &&t';';J'GHHr   c                j    t        j                  | j                  |      | j                  |            S r   )r/   dict_schemar   )r   	keys_typevalues_types      r   _dict_schemazGenerateSchema._dict_schemaq  s,    &&t';';I'FH\H\]hHijjr   c                J    t        j                  | j                  |            S r   )r/   
set_schemar   r  s     r   _set_schemazGenerateSchema._set_schemat  s    %%d&:&::&FGGr   c                J    t        j                  | j                  |            S r   )r/   frozenset_schemar   r  s     r   _frozenset_schemaz GenerateSchema._frozenset_schemaw  s    ++D,@,@,LMMr   c           	       
 t        j                  j                               
t              j                  sd nt        j                  j                        }|dk(  rd }j                  |dj                         D ci c]  \  }}|	|| c}}d t        t              rdt        j                  d      }nft        t              rdt        j                  d      }n>t        t              rdt        j                  d      }nt        j                  d       }
rdfd}t!        j"                  dd       t$        j"                  j&                  u }t        j(                  
|rd nj"                  d	|gi
      }| j*                  j,                  r!t        j.                  t1        d      ||      }|S d
fd}	t        j2                  d	|	gi      S c c}}w )NzAn enumeration.)r   r   intstrfloatc                    | S r   r   xs    r   <lambda>z-GenerateSchema._enum_schema.<locals>.<lambda>  s    XYr   c                \     ||       }|j                  |      }|j                         |S r   )resolve_ref_schemaupdate)r   handlerjson_schemaoriginal_schema
js_updatess       r   get_json_schemaz4GenerateSchema._enum_schema.<locals>.get_json_schema  s0    %fo")"<"<["I&&z2""r   __func__pydantic_js_functions)sub_typemissingrefmetadatavalue)r   c                     |t        j                              }|j                  |      }|j                         |S )N)r!  r#  )r/   enum_schemar  r  )	_r  r  r  casesenum_ref	enum_typer  r!  s	       r   get_json_schema_no_casesz=GenerateSchema._enum_schema.<locals>.get_json_schema_no_cases  sD    %k&=&=iYago&pq")"<"<["I&&z2""r   r$  )r   r)   r  r<   returnrI   )r  r<   r.  rI   )list__members__valuesrX   __doc__inspectcleandoc__name__r   
issubclassr  r/   simple_ser_schemar  r  r   r   	_missing_r   r  r'  r   use_enum_values no_info_after_validator_functionr   is_instance_schema)r   r+  r   r   r   value_ser_typer  default_missingr'  r,  r)  r*  r  r!  s    `        @@@@r   _enum_schemazGenerateSchema._enum_schemaz  s   	 5 5 < < >?	*"+"3"3d9I9I)J[J[9\,,K(11+N
'1'7'7'9K'9tq!Q]ad'9K
:>i%H4?4Q4QRW4XN	3'H(::5AN	5)H(::7CN )MMkZN# &i&9&9:tLPTP^P^PgPggO%11! /Y5H5H1O3DEK ##33)JJw'N # # 1114L3MN s Ls   

G0G0c                   ddl m}m} t        dt        dt
        dt        dt        dt        didfd	}t        j                  t        j                  |         t        j                  t        j                  t        j                               t        j                        
      t        j                   |dd      dfdgi      S )NrL   )IP_VALIDATOR_LOOKUPIpTypeipv4ipv4networkipv4interfaceipv6ipv6networkipv6interfacec           	         t        | t        f      st        d dt        |        d|  d      |j                  dk(  r| S t        |       S )Nz
Expected `z` but got `z` with value `'z-'` - serialized value may not be as expected.python)
isinstancer  r,   r   mode)ipr   r   s     r   ser_ipz)GenerateSchema._ip_schema.<locals>.ser_ip  sW    b2s),: KRzLyz  yyH$	r7Nr   r  python_schemaTalways)info_argr   r   c                    d   dS )Nstringr   formatr   )_1_2ip_type_json_schema_formatr   s     r   r  z+GenerateSchema._ip_schema.<locals>.<lambda>  s    (VpqsVt9ur   
lax_schemastrict_schemar   r$  )rL  r   r   zcore_schema.SerializationInfor.  zstr | IpType)_validatorsr@  rA  r   r   r   r   r   r   r/   lax_or_strict_schema no_info_plain_validator_functionjson_or_python_schemar:  
str_schemar;  r   )r   r   r@  rA  rM  rX  s    `   @r   
_ip_schemazGenerateSchema._ip_schema  s    < ???
"	 //"CCDWXZD[\%;;'HH[McMcMef)<<R@ &JJ6\`ltu'*u)v

 
	
r   c           	        ddl m} t        j                  t        j                  |      t        j
                  t        j                  |      t        j                  t                    t        j                  d      dd gi      S )	z7Support for [`fractions.Fraction`][fractions.Fraction].rL   )fraction_validatorrN  rP  r   r   c                    dddS )NrS  fractionrT  r   rV  rW  s     r   r  z1GenerateSchema._fraction_schema.<locals>.<lambda>  s
    \f?gr   rY  )	r\  rc  r/   r]  r^  r_  r;  r	   to_string_ser_schema)r   rc  s     r   _fraction_schemazGenerateSchema._fraction_schema  sp    3 //"CCDVW%;;'HHI[\)<<XF
 &::XN-0g/hi	
 		
r   c                    t        |t              s't        |dt               t	        j
                         S t	        j                  |      S )Na   is not a Python type (it may be an instance of an object), Pydantic will allow any object with no validation since we cannot even enforce that the input is an instance of the given type. To get rid of this error wrap the type with `pydantic.SkipValidation`.)rJ  r   r(   r   r/   r   r;  )r   r   s     r   _arbitrary_type_schemaz%GenerateSchema._arbitrary_type_schema  sL    "d#& Z Z  ))++--b11r   c                     t        d|d      )N,Unable to generate pydantic-core schema for a  . Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it.

If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.)rA   r   objs     r   _unknown_type_schemaz#GenerateSchema._unknown_type_schema   s#    +:3' Bf f
 	
r   c                    ||S 	 t        j                  ||      S # t         j                  $ r t        j                  ||       |cY S w xY wr   )rO   apply_discriminatorMissingDefinitionForUnionRefset_discriminator_in_metadata)r   r   discriminators      r   _apply_discriminator_to_unionz,GenerateSchema._apply_discriminator_to_union  s_      M	';;  $@@ 	 >> M	s    +A
	A
c                      e Zd Zy)GenerateSchema.CollectedInvalidN)r5  
__module____qualname__r   r   r   CollectedInvalidrw    s    r   rz  c                    | j                  |      }t        |      }t        |      r| j                         t	        j
                  |      }t        |      }|S r   )collect_definitionsr[   rU   rz  rO   apply_discriminatorsr\   )r   r   s     r   clean_schemazGenerateSchema.clean_schema   sR    ))&1+F3"6*''))%::6B%f-r   c                *   t        d|j                  dd             }|r|| j                  j                  |<   d|v rt	        j
                  |d         }t	        j                  |t        | j                  j                  j                                     S )N
str | Noner#  )	r%   r   r   definitionsr/   definition_reference_schemadefinitions_schemar/  r1  )r   r   r#  s      r   r|  z"GenerateSchema.collect_definitions)  s|    <E4!89)/DII!!#&F? <<VE]KF--&&--/0
 	
r   c                    |j                  di       }|j                  dg       }||vr|j                  |       ||d<   y )Nr$  r   )r   
setdefaultappend)r   metadata_schemajs_functionr$  r   s        r   _add_js_functionzGenerateSchema._add_js_function4  sK    "&&z26 ( 3 34KR P
 33!((5&.
#r   Tc                &   d}|r| j                  ||      }||}|| j                  |      }t        ||      }|4t        || j                  j
                        }|r| j                  ||       t        | j                  j                  ||      }|S )a  Generate core schema.

        Args:
            obj: The object to generate core schema for.
            from_dunder_get_core_schema: Whether to generate schema from either the
                `__get_pydantic_core_schema__` function or `__pydantic_core_schema__` property.

        Returns:
            The generated core schema.

        Raises:
            PydanticUndefinedAnnotation:
                If it is not possible to evaluate forward reference.
            PydanticSchemaGenerationError:
                If it is not possible to generate pydantic-core schema.
            TypeError:
                - If `alias_generator` returns a disallowed type (must be str, AliasPath or AliasChoices).
                - If V1 style validator with `each_item=True` applied on a wrong field.
            PydanticUserError:
                - If `typing.TypedDict` is used instead of `typing_extensions.TypedDict` on Python < 3.12.
                - If `__modify_schema__` method is used instead of `__get_pydantic_json_schema__`.
        N)
_generate_schema_from_property_generate_schema_inner!_extract_get_pydantic_json_schemaresolve_original_schemar   r  r  r   r   r   )r   rn  from_dunder_get_core_schemar   from_propertymetadata_js_functionr  s          r   r   zGenerateSchema.generate_schema?  s    6 %)& ??SIM(&>005F@fM+5fdii>S>STO%%o7KL=d>R>R>`>`begmnr   c                	   | j                   j                  |      5 \  }}||cddd       S t        |di       }|j                  }|j                  }t        t        |j                  j                         |j                  j                         |j                  j                               h |j                         |j                                t        |j                  d      }|j                  |j                        }|j                   j                         }	| j"                  j%                  |      5  | j&                  j%                  |      5  d}
|j)                  d      dk(  r|j*                  d   |u sJ |j*                  d	   t,        u sJ |j*                  dd	 D ]  }t        |d
i       j)                  dd      }|#t/        |t0              r6t3        j4                  t3        j6                  |dd      g| j8                   }t;        |      }|t<        t>        fvrtA        d      | jC                  |d      d   }t3        jD                  |      r| jG                  |      }
 n t        |di       j)                  d      }|jH                  r]| jK                  d|d   |      }|d   }tM        ||	d      }tO        jP                  |||t        |dd      dt        |dd      ||      }n	tO        jR                  |jU                         D ci c]  \  }}|| jW                  |||       c}}|j                         D cg c]  }| jY                  ||j                          c}|
|j                        }t[        ||j\                  j                         d      }t_        |ta                     }||}tM        ||	d      }tO        jP                  |||t        |dd      dt        |dd      ||      }| jc                  ||jd                  j                               }tM        ||	d      }|| j                   jf                  |<   tO        jh                  |      cddd       cddd       cddd       S c c}}w c c}w # 1 sw Y   nxY wddd       n# 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)z%Generate schema for a Pydantic model.N__pydantic_fields__F)checkr   extra_fields_behaviorallowr   r   __annotations____pydantic_extra__T)is_argumentis_classzEThe type annotation for `__pydantic_extra__` must be `Dict[str, ...]`requiredrL   __pydantic_generic_metadata__originrootr   inner__pydantic_custom_init____pydantic_post_init__)generic_origincustom_init
root_model	post_initconfigr#  )computed_fieldsextras_schema
model_nameouter)5r   get_schema_or_refr   __pydantic_decorators__r  r   r   field_validatorsr1  field_serializers
validatorskeysrR   model_configcore_configr5  model_validatorsr   pushr   r   r   objectrJ  r  rQ   eval_type_backport_make_forward_refr   r5   r   r   rA    _get_args_resolving_forward_refsis_anyr   __pydantic_root_model___common_field_schemaapply_model_validatorsr/   model_schemamodel_fields_schemar   _generate_md_field_schema_computed_field_schemar   root_validatorsrV   ro   _apply_model_serializersmodel_serializersr  r  )r   r   	model_refmaybe_schemar   r   r  r   r  r  r  candidate_clsextras_annotationr   extra_items_typer  
root_fieldr   r  r   r   dfields_schemanew_inner_schemar   s                            r   _model_schemazGenerateSchema._model_scheman  s   YY((-1J)\'# .- S"7<F44J(88O(//66800779))002
 :&++-9/"6"6"89 +3+;+;5IN(443<<4HK)::AAC++00@$BSBSBXBXY\B] $??#:;wF;;q>S000;;r?f444),Sb)9,3MCTVX,Y,],]0$-) -8)*;SA4A4T4T$1$C$C(9uW[%&5" &*%:%:	5" 1 ",,=!>B!$5&C$k'" !" 04/T/T 1)- 0U 0  0!, $1#7#78H#I040D0DEU0V %/ *:2 :AFegi9j9n9now9x..!%!:!:66&>S]!^J#-h#7L#9,HXZa#bL#.#;#;$'5$+C1KT$R#'")#/G"N*%	$L =H<[<[Y_YeYeYghYgQUQRTUD::1aLLYgh &5%;%;%=)%= !77:;W;WX%=) '4#&<<=M $4M:C]C]CdCdCfhl#mL'CLRoRq'r$'3'7#9,HXZa#bL#.#;#;$'5$+C1KT$R#(")#/G"N*%	$L 66|ZEaEaEhEhEjk/8H'R39		%%i0">>yIY C^B]@@' .-F i)c C^B]@@@' .--su   R6DR69R!A3R	BRB;RR8R#R0C5R%	R!.	R6RRR!	R6!R*	&R66R?c                p    |d   dk(  r-| j                   j                  }|d   D ]
  }|||d   <    |d   S |S )zuUnpack all 'definitions' schemas into `GenerateSchema.defs.definitions`
        and return the inner schema.
        r   r  r#  r   )r   r  )r   r   r  ss       r   _unpack_refs_defsz GenerateSchema._unpack_refs_defs  sL     &>]*))//KM*()AeH% +(##r   c                X    | j                   j                         }|t        dd      |S )Nz(`typing.Self` is invalid in this contextzinvalid-self-typer   )r   r   rC   rm  s     r   _resolve_self_typez!GenerateSchema._resolve_self_type  s/    ##'');#$NUhii
r   c                   t        j                  |      r| j                  |      }| j                  j	                  |      5 \  }}||cddd       S 	 ddd       ||u rd}nd}t        |dd      x}  ||t        | j                  | |            }nt        |d      r0|j                  j                  d      x}t        |t              s|}nt        |dd      x}	}d	d
lm}
 t        ||
      rt!        d|j"                   dt$               nt!        dt&               t)        j*                   |	       D cg c]  }t)        j,                  |       c}      }ny| j/                  |      }t1        |      r|d   j3                  dd      }|r||d<   nt5        |      }|r.|| j                  j6                  |<   t)        j8                  |      S |S # 1 sw Y   xY wc c}w )a0  Try to generate schema from either the `__get_pydantic_core_schema__` function or
        `__pydantic_core_schema__` property.

        Note: `__get_pydantic_core_schema__` takes priority so it can
        decide whether to use a `__pydantic_core_schema__` attribute, or generate a fresh schema.
        Nunpackzto-def__get_pydantic_core_schema__)ref_mode__dict____pydantic_core_schema____get_validators__r   r{   zeMixing V1 models and V2 models (or constructs, like `TypeAdapter`) is not supported. Please upgrade `z` to V2.zc`__get_validators__` is deprecated and will be removed, use `__get_pydantic_core_schema__` instead.r   r#  )rQ   is_selfr  r   r  r   rv   r  hasattrr  r   rJ  rs   pydantic.v1r|   r6  r(   r5  r   rK   r/   chain_schema"with_info_plain_validator_functionr  rY   poprW   r  r  )r   rn  sourcer(  r  r  
get_schemar   existing_schemar  BaseModelV1r   r#  s                r   r  z-GenerateSchema._generate_schema_from_property  s      %))#.CYY((-1B!\'# .-' . &=HH "#'EtLLJY4T5P5PRVaijF C$ %(LL$4$45O$PP]?$F#C)=tDDjQ<#{+{|  }I  }I  |J  JR  S
 y- !--jtjv.wjvef{/]/]^_/`jv.wxF ''/(0"&&ud3C #u&/C)/DII!!#&::3??m .-H /xs   G8G Gc                ,   	 t        j                  |g| j                   }t        |t              rt	        |j                  d|       | j                  rt        || j                        }|S # t        $ r}t	        j
                  |      |d }~ww xY w)Nz%Unable to evaluate forward reference )rQ   r  r   	NameErrorrB   from_name_errorrJ  r   __forward_arg__r   rp   )r   rn  es      r   _resolve_forward_refz#GenerateSchema._resolve_forward_ref$  s    	H223O9N9NOC
 c:&-c.A.AEjknjoCpqqT%7%78C
  	H-==a@aG	Hs    A/ /	B8BBc                     y r   r   )r   rn  r  s      r   r  z/GenerateSchema._get_args_resolving_forward_refs:  s    fir   c                     y r   r   rm  s     r   r  z/GenerateSchema._get_args_resolving_forward_refs=  s    TWr   c                     t        |      }|rDt        j                  dk\  rddlm} t        ||      r	d |D        }t         fd|D              }|S |rt        d| d      |S )Nr   	   r   )GenericAliasc              3  j   K   | ]+  }t        |t              rt        j                  |      n| - y wr   )rJ  r  rQ   r  ).0r   s     r   	<genexpr>zBGenerateSchema._get_args_resolving_forward_refs.<locals>.<genexpr>H  s/     jei`a*QPSBTM;;A>Z[[eis   13c              3  d   K   | ]'  }t        |t              rj                  |      n| ) y wr   )rJ  r   r  )r  r   r   s     r   r  zBGenerateSchema._get_args_resolving_forward_refs.<locals>.<genexpr>I  s/     hcg^_Az9R2215XYYcgs   -0z	Expected z+ to have generic parameters but it had none)r4   sysversion_infotypesr  rJ  r   r   )r   rn  r  argsr  s   `    r   r  z/GenerateSchema._get_args_resolving_forward_refs@  sl    }6).c<0jeijDhcghhD  iu,WXYYr   c                >    | j                  |      }|st        S |d   S )Nr   )r  r   )r   rn  r  s      r   _get_first_arg_or_anyz$GenerateSchema._get_first_arg_or_anyN  s#    44S9JAwr   c                    | j                  |      }|st        t        fS t        |      dk  rt        |      }t	        d| d      |d   |d   fS )Nr7   z Expected two type arguments for z, got 1r   rL   )r  r   lenr5   r   )r   rn  r  r  s       r   _get_first_two_args_or_anyz)GenerateSchema._get_first_two_args_or_anyT  s[    44S9:t9q=_F>vhgNOOAwQr   c                :   t        j                  |      r| j                  |      S t        |t              r|S t        |t
              rt        |      }t        |t              r | j                  | j                  |            S t               }t        ||      r6| j                  j                  |      5  | j                  |      cd d d        S t        |t              r t        j                   |j"                        S | j%                  |      S # 1 sw Y   JxY w)N)
schema_ref)rQ   is_annotated_annotated_schemarJ  r   r  r   r   r  rq   rw   r   r  r  rl   r/   r  type_ref
match_type)r   rn  r|   s      r   r  z%GenerateSchema._generate_schema_inner]  s    %%c*))#..c4 Jc3S/Cc:&''(A(A#(FGG,.	c9-&&++C0))#. 10 c/0::cllSSs## 10s   5DDc                   |t         u rt        j                         S |t        u rt        j                         S |t
        u rt        j                         S |t        u rt        j                         S |t        u rt        j                         S |t        u rt        j                         S t        j                  |      s|t        u rt        j                          S |t"        j$                  u rt        j&                         S |t"        j"                  u rt        j(                         S |t"        j*                  u rt        j,                         S |t"        j.                  u rt        j0                         S |t2        u rt        j4                         S |t6        u rt        j8                         S |t:        u rt        j<                         S |t>        u r| jA                         S |tB        u rt        jD                         S ||t        jF                  u rt        jH                         S |tJ        v r| jM                  |      S |tN        v r| jQ                  |      S |tR        v r| jU                  tV              S |tX        v r| j[                  tV              S |t\        v r| j_                  tV              S |t`        v r| jc                  tV              S |td        v r| jg                  tV        tV              S t        jh                  |      r| jk                  |      S |tl        u r| jo                         S t        jp                  |      rt        jr                         S t        jt                  |      r| jw                  |      S ty        |      r| j{                  |d      S t        j|                  |      r| j                  |d      S t        j                  |      r| j                  |j                        S |t        j                  u r| j                  |      S t        j                  |      r| j                         S t        |t        j                        r| j                  |      S t        j                  |      r<|t        u rt        j                          S | j                  | j                  |            S t        |t              r| j                  |      S t        j                  |      r!t        |t              r| j                  |      S t        j                  |      r| j                         S t        j                  |      r| j                  |d      S t        |      }|| j                  ||      S | j                  |d      }||\  }}| j                  ||      S | j                  r| j                  |      S | j                  |      S )a  Main mapping of types to schemas.

        The general structure is a series of if statements starting with the simple cases
        (non-generic primitive types) and then handling generics and other more complex cases.

        Each case either generates a schema directly, calls into a public user-overridable method
        (like `GenerateSchema.tuple_variable_schema`) or calls into a private method that handles some
        boilerplate before calling into the user-facing method (e.g. `GenerateSchema._tuple_schema`).

        The idea is that we'll evolve this into adding more and more user facing methods over time
        as they get requested and we figure out what the right API for them is.
        Nr   )br  r/   r`  bytesbytes_schemar  
int_schemar  float_schemar   bool_schemacomplexcomplex_schemarQ   r  r  r   datetimedatedate_schemadatetime_schematimetime_schema	timedeltatimedelta_schemar   decimal_schemar'   uuid_schemar.   
url_schemar	   rh  r*   multi_host_url_schemaNoneTypenone_schemar   ra  r   _tuple_schemar   r  r   r   r  r   r  r   _sequence_schemar   r  is_type_alias_type_type_alias_type_schemar   _type_schemais_callablecallable_schema
is_literal_literal_schemar6   _typed_dict_schemais_namedtuple_namedtuple_schemais_new_typer   __supertype__rePattern_pattern_schemais_hashable_hashable_schemarJ  typingr#   _unsubstituted_typevar_schemais_finalvarr   r  VALIDATE_CALL_SUPPORTED_TYPES_call_schemar3  isclassr6  r   r>  is_zoneinfo_type_zoneinfo_schemadataclassesis_dataclass_dataclass_schemar5   _match_generic_type0_get_prepare_pydantic_annotations_for_known_type_apply_annotationsr   rj  ro  )r   rn  r  ressource_typer   s         r   r  zGenerateSchema.match_typev  s    #:))++E\++--CZ))++E\++--D[**,,G^--//!!#&#-))++HMM!**,,H%%%..00HMM!**,,H&&&//11G^--//D[**,,CZ))++H_((**L 4466[C=#9#99**,,H_??3''K%%c**J$$S))I##C(($$))#..N"((--J$$S#..--c2//44D[$$&&&&s+..00%%c*'',,#**355((-**355&&s+''(9(9::BJJ'',,&&s+((**V^^,55c::&&s+e|"--//''**3/  :;$$S))__S!jd&;$$S))++C0((**##C())#t44C++C88CCCL?'*$K**;DD  ..s33((--r   c                   t        j                  |      r| j                  ||      S t        j                  |      r| j                  ||      S | j                  ||      }||S t        j                  |      r| j                  |      S t        j                  |      r| j                  |      S |t        v r| j                  |      S |t        v r | j                  | j                  |            S |t         v r | j#                  | j                  |            S |t$        v r | j'                  | j                  |            S |t(        v r | j*                  | j-                  |       S t/        |      r| j1                  ||      S |t2        j4                  t6        fv r| j9                  |      S |t:        v r | j=                  | j                  |            S |t2        j>                  t@        jB                  j>                  t2        jD                  t@        jB                  jD                  hv r| jG                  |      S |tH        jJ                  t2        jJ                  fv r| jM                  |      S | jO                  |d      }||\  }}| jQ                  ||      S | jR                  r| jU                  |      S | jW                  |      S )Nr   ),r6  r7  r8  rQ   r%  r&  r  r  r  origin_is_union_union_schemar   r  r   r  r  r   r  r   r  r   r  r  r6   r$  r.  r"   r   _subclass_schemar   r  r   collectionsabc	Generator_iterable_schemar)  r*  r+  r:  r;  r   rj  ro  )r   rn  r  r  r<  r=  r   s          r   r9  z"GenerateSchema._match_generic_type  sw   
 ##F+))#v66&&v.**377;;FCH$  ++F3//44**62%%c**{"%%c**z!$$T%?%?%DEEy ##D$>$>s$CDD''))$*D*DS*IJJz!$4$$d&E&Ec&JKK&!**377T**((--~%(()C)CC)HII)A)A6CSCSU`UdUdUnUnoo((--

FNN33'',,CCCL?'*$K**;DD  ..v66((--r   r  c          	         | j                  |||      }t        j                  |d   |j                         sdn||d   |d   |d   |d         S )zAPrepare a TypedDictField to represent a model or typeddict field.r   Fserialization_excludevalidation_aliasserialization_aliasr$  )r  rG  rH  rI  r$  )r  r/   typed_dict_fieldis_required)r   name
field_infor   r  common_fields         r   _generate_td_field_schemaz(GenerateSchema._generate_td_field_schema  sf     00z:N++"","8"8":U"./F"G)*<= ,-B C!*-
 	
r   c           	         | j                  |||      }t        j                  |d   |d   |d   |d   |d   |d         S )z0Prepare a ModelField to represent a model field.r   rG  rH  rI  frozenr$  rG  rH  rI  rQ  r$  )r  r/   model_fieldr   rL  rM  r   rN  s        r   r  z(GenerateSchema._generate_md_field_schema(  s^     00z:N&&""./F"G)*<= ,-B C)!*-
 	
r   c                    | j                  |||      }t        j                  ||d   |j                  |j                  xs d|j
                  rdnd|d   |d   |d   |d   |d   	
      S )
zJPrepare a DataclassField to represent the parameter/field, of a dataclass.r   NFrG  rH  rI  rQ  r$  )init	init_onlykw_onlyrG  rH  rI  rQ  r$  )r  r/   dataclass_fieldrV  init_varrX  rT  s        r   _generate_dc_field_schemaz(GenerateSchema._generate_dc_field_schema9  s     00z:N**" ))1T&..DE"./F"G)*<= ,-B C)!*-
 	
r   c                   |j                   4|j                   dk  s%|j                  |j                  |j                  d\  }}}t	        | t
              r| j                  |      \  }}}nCt	        | t              r3 | |      }t	        |t              st        d|  d|j                         |j                   |j                   dk  rd|_         |j                   dk(  r)t        ||      |_        t        ||      |_        ||_        |j                  ||_        |j                  t        ||      |_        |j                  t        ||      |_        yyy)a  Apply an alias_generator to aliases on a FieldInfo instance if appropriate.

        Args:
            alias_generator: A callable that takes a string and returns a string, or an AliasGenerator instance.
            field_info: The FieldInfo instance to which the alias_generator is (maybe) applied.
            field_name: The name of the field from which to generate the alias.
        NrL   NNNalias_generator  must return str, not )alias_priorityaliasrH  rI  rJ  r9   generate_aliasesr   r  r   r   r   )alias_generatorrM  r   ra  rH  rI  s         r   $_apply_alias_generator_to_field_infoz3GenerateSchema._apply_alias_generator_to_field_infoN  sm    %%-((A-'**2--5;K8E#%8/>:?N?_?_`j?k<')<OX6'
3!%-#&66GG]^c^m^m]n$opp
 ((0J4M4MQR4R,-
) ((A-1DEXZ_1`
..ABRTY.Z
+#(
  '#(
 --51DEXZ_1`
.**2.ABRTY.Z
+ 39 6r   c                   |j                   |j                   dk  s|j                  d\  }}}t        | t              r| j	                  |      \  }}}nCt        | t
              r3 | |      }t        |t              st        d|  d|j                         |j                   |j                   dk  rd|_         |j                   dk(  rt        ||      |_        yyy)a  Apply an alias_generator to alias on a ComputedFieldInfo instance if appropriate.

        Args:
            alias_generator: A callable that takes a string and returns a string, or an AliasGenerator instance.
            computed_field_info: The ComputedFieldInfo instance to which the alias_generator is (maybe) applied.
            computed_field_name: The name of the computed field from which to generate the alias.
        NrL   r]  r^  r_  )
r`  ra  rJ  r9   rb  r   r  r   r   r   )rc  computed_field_infocomputed_field_namera  rH  rI  s         r   -_apply_alias_generator_to_computed_field_infoz<GenerateSchema._apply_alias_generator_to_computed_field_info  s    $  ..6"11Q6"((0;K8E#%8/>:?N?_?_`s?t<')<OX6'(;<!%-#&66GG]^c^m^m]n$opp
 #119=P=_=_cd=d56#2
 #11Q6,?@SUZ,[#) 7) 1r   c                    |j                   xs | j                   }|y|j                  < |||      }t        |t              st	        d| d|j
                         ||_        yy)ae  Apply a field_title_generator on a FieldInfo or ComputedFieldInfo instance if appropriate
        Args:
            config_wrapper: The config of the model
            field_info: The FieldInfo or ComputedField instance to which the title_generator is (maybe) applied.
            field_name: The name of the field from which to generate the title.
        Nzfield_title_generator r_  )field_title_generatorr   rJ  r  r   r   )r   rM  r   rj  r   s        r   *_apply_field_title_generator_to_field_infoz9GenerateSchema._apply_field_title_generator_to_field_info  sw     !+ @ @ hNDhDh (#)*jAEeS)"89N8OOefkfufuev wxx$J $r   c                    t               }j                  s	 t        j                  j                  g j
                   }t        | j                        }d_        t        |t              s |j                  |      }|j                  _        |j                  j                         D ]0  \  }}	|j                  vs|j                   vs$t#        ||	       2 g |j$                  j$                  _        j                  j$                  }}
d fd}g }t'        |j(                  j+                         |      D ]=  }|j-                  t.        |j0                  j2                     j5                  |             ?  j6                  j9                  |      5  j:                   j=                  |
||z   |      }n j=                  |
||z         }d d d        t'        |j>                  j+                         |      }tA        |      rd_!        |D 	cg c]  }	|	j0                  jD                  du s|	 }}	|D 	cg c]	  }	|	|vs|	 }}	tG        ||      }tI        |||      }jK                         stM        |      } jO                  |t'        |jP                  j+                         |            } jS                   jT                  |       tW              \  }}i }tY        |||        jT                  jZ                  }| j]                  ||       t_        j`                  tb        td        f      rj`                  jg                         }nj`                  }ti        |jj                  rdnd |jl                  jn                  |      S # t        $ r}t        j                  |      |d }~ww xY w# 1 sw Y   xY wc c}	w c c}	w )NTc                @    j                  | j                        } | S r   )ru  rt  )r   rM  r   s    r   set_discriminatorz>GenerateSchema._common_field_schema.<locals>.set_discriminator  s     77
@X@XYFMr   )transform_inner_schemapydantic_js_updatespydantic_js_extrarR  r   r)   r.  r)   )8rr   	evaluatedrQ   	eval_type
annotationr   r  rB   r  rp   r   rn   rl   from_annotation_attributes_setr   metadata_lookupsetattrr$  r   r  r1  r  r   r   rK  _from_decoratorr   r  rt  r;  r  $_validators_require_validate_defaultvalidate_default	each_itemr   r   rK  wrap_default_apply_field_serializersr  rk  r   r   rT   rc  rd  rJ  rH  r8   r:   convert_to_aliases_common_fieldexcluderI  rQ  )r   rL  rM  r   rz   evaluated_typer  new_field_infor   r   r=  r   rn  validators_from_decorators	decoratorr   this_field_validatorsr   rq  rr  core_metadatarc  rH  s   ` `                    r   r  z#GenerateSchema._common_field_schema  s    -.	##L!.!8!89N9N!gQUQfQf!g +>4;M;MNN#'J '8LM!:!:!:>!J(6(A(A
% +::@@BDAq
 
 : ::q
HbHb?b
Aq1 C 'W(?(?&V*BUBU&V
##-#8#8*:M:M[	
 &("=j>Y>Y>`>`>bdhiI&--.@ATAT.U.e.efo.pq j ""''-''300/I!Ibs 1  00"<< . !EZEZEZEaEaEcei j/0EF*.J'+@]+@aAFFDTDTX\D\+@],A c,AqQNbEb,A c+F4H$O!&*?F
 %%'!*f5F..89U9U9\9\9^`de
 	778L8LjZ^_1Z[e1f..(*/BVg	
 ..>>&55ozSWXj11L)3LM)::MMO)::*4*<*<$$- * > >$$"
 	
c  L1AA!D!KL> .-$  ^ cs;   *N  :OO:O	OO	O'N==OOc                   | j                  |d      }g }d}|D ]9  }||t        j                  u rd}|j                  | j	                  |             ; t        |      dk(  r|d   }ntg }|D ]X  }|j                  di       j                  t        j                        }	|	|j                  ||	f       H|j                  |       Z t        j                  |      }|rt        j                  |      }|S )zGenerate schema for a Union.Tr  FrL   r   r$  )r  rQ   r  r  r   r  r   rM   TAGGED_UNION_TAG_KEYr/   union_schemanullable_schema)
r   
union_typer  choicesr   argr  choices_with_tagschoicetags
             r   r@  zGenerateSchema._union_schema$  s    44Z$4O$&C{c]%;%;;t33C89	  w<1
AKM!jjR044[5U5UV?%,,fc];%,,V4 " (():;A++A.Ar   c                p   | j                   j                  |      5 \  }}||cd d d        S t        |      xs |}t        |      }| j                  j                  |      5  	 t        j                  |j                  g| j                   }t        ||      }| j                  |      }|d   dk7  sJ ||d<   d d d        | j                   j                  |<   t!        j"                  |      cd d d        S # t        $ r}t        j                  |      |d }~ww xY w# 1 sw Y   gxY w# 1 sw Y   y xY w)Nr   r  r#  )r   r  r5   rm   r   r  rQ   ru  	__value__r   r  rB   r  rp   r   r  r/   r  )	r   rn  r#  r  r  r   rv  r  r   s	            r   r  z&GenerateSchema._type_alias_type_schema?  s$   YY((-1D#|'# .- %/sO$:sF4S9L""''/P!.!8!89I9I!bDLaLa!bJ +:|D
--j9f~666 #u 0 *0DII!!#&::3?# .- ! P5EEaHaOP 0/ .-sL   D,5D,"D $*C9,D :5D,9	DDDD  D)	%D,,D5c                    t        j                  |      }|s
J d|        t        j                  |      }| j                  j
                  r)t        d |D              rt        j                  d |      }|S )zGenerate schema for a Literal.z(literal "expected" cannot be empty, obj=c              3  <   K   | ]  }t        |t                y wr   )rJ  r   )r  r   s     r   r  z1GenerateSchema._literal_schema.<locals>.<genexpr>Y  s     7^U]PQ
1d8KU]s   c                >    t        | t              r| j                  S | S r   )rJ  r   r%  )r   s    r   r  z0GenerateSchema._literal_schema.<locals>.<lambda>[  s    Z4%8!''?a?r   )rQ   literal_valuesr/   literal_schemar   r9  anyr:  )r   literal_typeexpectedr   s       r   r#  zGenerateSchema._literal_schemaS  sp     //=RCL>RRx++H5//C7^U]7^4^ AA?F r   c                :   t               }| j                  j                  |      5  | j                  j	                  |      5 \  }}||cddd       cddd       S t        |      }||}t        s%t        |      j                  dk(  rt        dd      	 t        |d      }| j                  j                  |      5  | j                  j                  |j                        }|j                   }	i }
t#        j$                  |      }| j                  j&                  rt)        |d	      }nd}	 t+        j,                  || j.                  
      }|j7                         D ]  \  }}t9        ||      }||	v }t+        j:                  |      rd}| j=                  |d      d   }n-t+        j>                  |      rd}| j=                  |d      d   } |j@                  |      }||jB                  ||v r
||   |_!        | jE                  | j                  ||       | jG                  ||||      |
|<    tI        jJ                  |
||jL                  jO                         D cg c]  }| jQ                  ||jR                          c}||      }| jU                  ||jV                  jO                               }tY        ||jZ                  jO                         d      }|| j                  j\                  |<   tI        j^                  |      cddd       cddd       cddd       S # t        $ r d}Y w xY w# t0        $ r}t3        j4                  |      |d}~ww xY wc c}w # 1 sw Y   nxY w	 ddd       n# 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)a  Generate schema for a TypedDict.

        It is not possible to track required/optional keys in TypedDict without __required_keys__
        since TypedDict.__new__ erases the base classes (it replaces them with just `dict`)
        and thus we can track usage of total=True/False
        __required_keys__ was added in Python 3.9
        (https://github.com/miss-islington/cpython/blob/1e9939657dd1f8eb9f596f77c1084d2d351172fc/Doc/library/typing.rst?plain=1#L1546-L1548)
        however it is buggy
        (https://github.com/python/typing_extensions/blob/ac52ac5f2cb0e00e7988bae1e2a1b8257ac88d6d/src/typing_extensions.py#L657-L666).

        On 3.11 but < 3.12 TypedDict does not preserve inheritance information.

        Hence to avoid creating validators that do not do what users expect we only
        support typing.TypedDict on Python >= 3.12 or typing_extension.TypedDict on all versions
        Nr.  zXPlease use `typing_extensions.TypedDict` instead of `typing.TypedDict` on Python < 3.12.ztyped-dict-versionr   __pydantic_config__r  T)use_inspectr   r  r   F)r   r  r#  r  all)0rr   r   r  r   r  rm   _SUPPORTS_TYPEDDICTr   rx  rC   re   AttributeErrorr   r   r  r5  __required_keys__r^   builduse_attribute_docstringsri   rQ   get_cls_type_hintsr   r  rB   r  r   rp   rK  r  is_not_requiredrw  r   rk  rO  r/   typed_dict_schemar  r1  r  r  r  r  r  r  r  r  )r   typed_dict_clsr  rz   typed_dict_refr  r   r  r  required_keysr   r   field_docstringsr   r  r   rv  r  rM  r  	td_schemar   s                         r   r$  z!GenerateSchema._typed_dict_schema`  s     -.	""''79T9TUc9d i
'# :e9d77 5^DL!!'&4+?+J+Jh+V'n- 
 -E^Uj,k ++008"22>>^E\E\>]0>0P0P@B+11.A
''@@'B>_c'd$'+$P"/"B"B>_c_p_p"qK /:.?.?.A*J
!.z<!HJ)]:H$00<#'%)%J%J&%) &K & &
 '66zB#(%)%J%J&%) &K & &

 ";!:!::!FJ(4&22:&*::1A*1M
.CCDDXDXZdfpq)-)G)G"J
X *H *F:&3 /B: (99& ",!;!;!B!B!D%!DA 33Az7S7ST!D% '&		 66y*B^B^BeBeBgh/
8S8S8Z8Z8\^cd8>		%%n5">>~N} 981 :e9d77* " & ! P5EEaHaOPF%g 9881 :e9d9d777s   NM<		N:M<L(#M<>A0M&/!L:DM&##M!BM&	M<	N(L73M<6L77M<:	M	M	M	M&&M/+M<3	N<N	NNc                   | j                   j                  |      5  | j                  j                  |      5 \  }}||cddd       cddd       S t	        |      }||}	 t        j                  || j                        }|s|j                  D ci c]	  }|t         }}|r-|j                         D 	
ci c]  \  }	}
|	t        |
|       }}	}
t        j                   |j                         D 	
cg c]A  \  }	}
| j#                  |	|
|j$                  j'                  |	t(        j*                              C c}
}	ddi      }t        j,                  |||      cddd       cddd       S # t        $ r}t        j                  |      |d}~ww xY wc c}w c c}
}	w c c}
}	w # 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)z!Generate schema for a NamedTuple.Nr  )default'pydantic_js_prefer_positional_argumentsTr-  )r#  )r   r  r   r  rm   rQ   r  r   r  rB   r  _fieldsr   r   rp   r/   arguments_schema_generate_parameter_schema_field_defaultsr   r   emptycall_schema)r   namedtuple_clsr  namedtuple_refr  r   r   r  r   r   rv  r  s               r   r&  z!GenerateSchema._namedtuple_schema  s   ""''79T9TUc9d i
'# :e9d77 5^DL!!'L+>>~[_[l[lm ?M?U?U.V?U!q#v?U.V 3>2C2C2E2E.
J j, GG2E  
  +;; 3>2C2C2E 3F.
J 33"" . > > B B:y _ 4 
 3F DTJ
  **+;^Q_`G :e9d77  L1AA!D!KL /W3 :e9d777sv   F=F(	F=F("!E0F(F!F(8F
%F(4AF":#F(	F=0	F9FFF((F1	-F==Gc                   t               }|t        j                  u r |j                  |      }n |j                  ||      }|j
                  J d       | j                  j                  |      5  | j                  |j
                  |g      }ddd       |j                         st        |      }t        j                  |      }|||d<   |j                  |j                  |d<   |S | j                  j                  }	t!        |	t"              r"|	j                  |	j                  |      |d<   |S t!        |	t$              r |	|      |d<   |S # 1 sw Y   xY w)zXPrepare a ArgumentsParameter to represent a field in a namedtuple or function signature.Nz<field.annotation should not be None when generating a schemarK  ra  )rr   r   r  rw  from_annotated_attributerv  r   r  r;  rK  r  r/   arguments_parameterra  r   rc  rJ  r9   r   )
r   rL  rv  r  rK  rz   r   r   parameter_schemarc  s
             r   r  z)GenerateSchema._generate_parameter_schema  sY    -.	ioo%-I--j9E6I66z7KE+k-kk+""''-,,U-=-=wGF .   "!%0F&::4H'+V$;;"(-W%   #22BBO/>:?T?T?`,;,A,A$,G )   OX6,;D,A )# .-s   1EEc                ^   t        |      | j                  |      }r|rt        fd|D              }|sG|t        v r*t	        j
                  t	        j                         gd      S t	        j
                  g       S |d   t        u rCt        |      dk(  r*t	        j
                  | j                  |d         gd      S t        d      t        |      dk(  r|d   dk(  rt	        j
                  g       S t	        j
                  |D cg c]  }| j                  |       c}      S c c}w )	zIGenerate schema for a Tuple, e.g. `tuple[int, str]` or `tuple[int, ...]`.c              3  6   K   | ]  }t        |        y wr   )rp   )r  paramr   s     r   r  z/GenerateSchema._tuple_schema.<locals>.<genexpr>  s     R6%==6s   r   )r   r   r7   z&Variable tuples can only have one typerL   r   )rm   r  r   r   r/   tuple_schemar   Ellipsisr  r   
ValueError)r   
tuple_typeparamsr  r   s       @r   r  zGenerateSchema._tuple_schema  s    1<66zBFR6RRF [("//1G1G1I0J`abb #//33BZ8#6{a"//1E1EfQi1P0Qghii !!IJJ[A&)r/ ++B//++V\,]V\UT-A-A%-HV\,]^^,]s   D*c                `    t        j                  t        j                  t              dd      S )Nis_typezInput should be a type)custom_error_typecustom_error_message)r/   custom_error_schemar;  r   r   s    r   r  zGenerateSchema._type_schema1  s)    ..**40'!9
 	
r   c                    t         j                  dk  rJ d       ddlmm d	fd}dd gi}t        j                  |t        j                         |      S )
z/Generate schema for a zone_info.ZoneInfo objectr  Unreachabler   )ZoneInfoZoneInfoNotFoundErrorc               x    t        |       r| S 	  |       S # t        t        f$ r t        ddd| i      w xY w)Nzoneinfo_strzinvalid timezone: {value}r%  )rJ  r  r   r+   )r%  r  r  s    r   validate_str_is_valid_iana_tzzFGenerateSchema._zoneinfo_schema.<locals>.validate_str_is_valid_iana_tzA  sQ    %*i&):yA i).:UX_afWghhis     9r   c                    dddS )NrS  zoneinforT  r   rf  s     r   r  z1GenerateSchema._zoneinfo_schema.<locals>.<lambda>I  s
    hZd=er   r   r$  )r%  r   r.  r  )r  r  r  r  r  r/   r^  rg  )r   r  r$  r  r  s      @@r   r5  zGenerateSchema._zoneinfo_schema8  s]     f$'-'5 	=	i ,.e-fg;;)%::<
 	
r   c           	         | j                  |d      }t        j                  |D cg c]$  }| j                  t        j
                  |         & c}      S c c}w )z*Generate schema for `Type[Union[X, ...]]`.Tr  )r  r/   r  r   r.  r"   )r   r  r  s      r   _union_is_subclass_schemaz(GenerateSchema._union_is_subclass_schemaP  sR    44Z$4O'']a(b]aUY)=)=fkk$>O)P]a(bcc(bs   )Ac           	     (   | j                  |      }t        j                  |      xs |}t        j                  |      r| j	                         S t        j
                  |      r,| j                  t        j                  |j                           S t        |t        j                        r|j                  rbt        j                  t        |j                              r| j                  |j                        S t!        j"                  |j                        S |j$                  rMt!        j&                  |j$                  D cg c]$  }| j                  t        j                  |         & c}      S | j	                         S t        j                  t        |            r| j                  |      S t        j(                  |      r| j+                  |      }t-        j.                  |      st1        d|      t!        j"                  |      S c c}w )z-Generate schema for a Type, e.g. `Type[int]`.zExpected a class, got )r  rQ   annotated_typer  r  r  r   r.  r"   r  rJ  r#   	__bound__r?  r5   r  r/   is_subclass_schema__constraints__r  r  r  r3  r3  r   )r   type_
type_paramcs       r   rA  zGenerateSchema._subclass_schemaU  s   //6
 #11*=K

+$$&&--j9''J4H4H(IJJ
FNN3## 00J<P<P1QR99*:N:NOO"55j6J6JKK++"//CMC]C]^C]aT))&++a.9C]^  ((****:j+AB11*==$$Z0!44Z@
??:."8 GHH11*== _s   )Hc                   ddl m} | j                  |      }t        j                  |      }t        |      }t        j                  t        j                  d      }t        j                  |      s1ddlm} t        j                  |t        j                  ||      g      }t        j                  ||d      }t        j                   |||      S )	z5Generate schema for a Sequence, e.g. `Sequence[int]`.rL   )serialize_sequence_via_listSequence)cls_repr)sequence_validatorT)r   rQ  )r  rO  r   )_serializersr  r   r/   r   rx   r;  r.  r  rQ   r  r\  r  r  no_info_wrap_validator_function#wrap_serializer_function_ser_schemar_  )	r   r  r  item_type_schemar   r  rO  r  r   s	            r   r  zGenerateSchema._sequence_schemau  s    =//
;!--.>?$[1#66vQ[\##J/7'44 K KL^`k lmM $GG'0@4
 00#=P]
 	
r   c                l    | j                  |      }t        j                  | j                  |            S )z$Generate a schema for an `Iterable`.)r  r/   generator_schemar   )r   r  	item_types      r   rE  zGenerateSchema._iterable_schema  s.    ..u5	++D,@,@,KLLr   c                   ddl m} dd gi}t        j                  t	        d      dt        j
                               }|t        j                  u s|t        j                  u r"t        j                  |j                  ||      S | j                  |d	
      d   }|t        u r"t        j                  |j                  ||      S |t        u r"t        j                  |j                  ||      S t!        d|d      )NrL   )r\  r   c                    dddS )NrS  regexrT  r   rf  s     r   r  z0GenerateSchema._pattern_schema.<locals>.<lambda>  s
    hZa=br   patternr   )r   return_schemar  Tr  r   rl  r   )r   r\  r/   r   r   r`  r.  r*  r)  r^  pattern_either_validatorr  r  pattern_str_validatorr  pattern_bytes_validatorrA   )r   pattern_typer\  r$  serr  s         r   r+  zGenerateSchema._pattern_schema  s   !+.b-cd>>y!V;CYCYC[
 6>>)\RZZ-G??44CRZ  55 6 
  C<??11x  e^??333QY  02^_k^nno0pqqr   c           
     V   t        j                  t        j                  t        j                  t        j                         t        j
                  t        j                  j                        g      t        j
                  t        j                  j                              dd      S )NrN  r,  zInput should be hashable)r   r  r  )	r/   r  r_  r  r   r;  rB  rC  Hashabler   s    r   r-  zGenerateSchema._hashable_schema  sy    ..44'44 ++-{/M/MkooNfNf/gh *<<[__=U=UV	 ,!;	
 		
r   c                     j                   j                  |      5   j                  j                  |      5 \  }}||cddd       cddd       S t	        |      }||}t        |dd      }ddlm}  j                  j                  |      5   j                  j                  |      5   ||      rJt        |j                        }|r@|j                         D ]  }	 |	j                  |g j                    ! nt        ||      } j                   j"                  dk(  r7|j%                         D ]$  \  }
}	|	j&                  du st)        d|
 d	d
       |j*                  j-                  d      xs t/        j0                  |      t3         fd|j%                         D        d       }t5        |d      }t5        |d      }t7        j8                  |j:                  |j<                  j                         D cg c]  } j?                  |j@                          c}|      }tC        |jD                  j                         d      }jF                  j                         }tI        ||d      } j                   jK                  |j:                        }t7        jL                  |||||t        jN                  |      D 	cg c]  }	|	jP                   c}	|| j                  jR                  jT                  	      } jW                  |jX                  j                               }tI        ||d      }| j                  jZ                  |<   t7        j\                  |      cddd       cddd       cddd       cddd       S c c}w c c}	w # 1 sw Y   nxY wddd       n# 1 sw Y   nxY wddd       n# 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)z Generate schema for a dataclass.Nr  r7   )is_pydantic_dataclass)r   r  FzField zd has `init=False` and dataclass has config setting `extra="allow"`. This combination is not allowed.z dataclass-init-false-extra-allowr   r  c              3  J   K   | ]  \  }}j                  ||        y wr   )r[  )r  r   r   r   r   s      r   r  z3GenerateSchema._dataclass_schema.<locals>.<genexpr>  s'     aR`$!QT33Aq*ER`s    #c                (    | j                  d      duS )NrX  Fr   )r   s    r   r  z2GenerateSchema._dataclass_schema.<locals>.<lambda>  s    !%%	"2%"?r   )key__post_init__	__slots__)r  collect_init_onlyr  r  )r  r  r#  r   slotsr  rQ  r  )/r   r  r   r  rm   r   r6  r  r   r   r   r  r1  apply_typevars_mapr   rj   r   extrar   rV  rC   r  r   r^   r  sortedr  r/   dataclass_args_schemar5  r  r  r  r   r  r  r  r  dataclass_schemar   rL  r   rQ  r  r  r  r  )r   	dataclassr  dataclass_refr  r   r  r  r   r   r   r  has_post_init	has_slotsr  args_schemar   r  r  	dc_schemar   r   s   `                    @r   r8  z GenerateSchema._dataclass_schema  s    ""''	2DII4O4OPY4Z _
'# 5[4Z22 5Y?L!"	
 Y(=tDF;""''	2D4N4N4S4STZ4[(3%i&C&CDF#%+]]_E4E44\ZDDYDYZ &5 6!%1F
 ''--8-3\\^)
E ::."3"( 5C !D%G#  .< '//334MNqR`RfRfgpRq
 aRXR^R^R`a? !(	? C#I{;	)??&& ",!;!;!B!B!D%!DA 33Az7S7ST!D% '4  0Z=W=W=^=^=`bfg#-#>#>#E#E#G 5lDTV]^"22>>YEWEW>X'88 #)+%4?4F4Fy4QR4Q5EJJ4QR#&  55::AA	 66y*B^B^BeBeBgh/8H'R7=		%%m4">>}MC 5\4[22% 5[4Z22j%( So 5\4[222% 5[4Z4Z222s   OO	O=ON1-BN	B9N	#N'B&N	N BN	-	N16	O?	O
N	N%!N1(	O1N:6O=	OO	OO$c                .   t        |      }| j                  \  }}t        j                  |||      }t        j
                  dt        j                  dt        j                  di}g }d}d}	d}
|j                  j                         D ]  \  }}|j                  |j                  u rt        j                  t        t              }n||   }|j                  |j                         }|0| j#                  |||j$                  |      }|j'                  |       |j                   t        j(                  k(  r| j+                  |      }|j                   t        j,                  k(  sJ |j                          t        j.                  |      }|t1        |      st3        d|j4                  d      |j                  j                         D ch c]%  \  }}|j                   t        j
                  k7  s$|' }}}|j7                  |j8                        }|rOt3        d	|j4                  d
t;        |      dk\  rdnd ddj=                  d t?        |      D               d      d}
| jA                  |d      }	d}
| j+                  |      }	
 d}| jB                  }|jD                  r+|jF                  }||j                  ur| j+                  |      }tI        jJ                  tI        jL                  |||
|	|jN                        ||      S c c}}w )zsGenerate schema for a Callable.

        TODO support functional validators once we support them in Config
        )globalnslocalnspositional_onlypositional_or_keywordkeyword_onlyNz"Expected a `TypedDict` class, got zunpack-typed-dictr   zTyped dictionary z overlaps with parameterr7   r  r    z, c              3  2   K   | ]  }t        |        y wr   )repr)r  ps     r   r  z.GenerateSchema._call_schema.<locals>.<genexpr>D  s     (U:TQa:Ts   zoverlapping-unpack-typed-dictzunpacked-typed-dictuniform)var_args_schemavar_kwargs_modevar_kwargs_schemapopulate_by_name)r  )(r   r   rQ   get_function_type_hintsr   POSITIONAL_ONLYPOSITIONAL_OR_KEYWORDKEYWORD_ONLY
parametersr   rv  r  r.  r%   r   r   kindr  r  r  VAR_POSITIONALr   VAR_KEYWORDunpack_typer6   rC   r5  intersectionr  r  joinr  r$  r   validate_returnreturn_annotationr/   r  r  r  )r   functionsigr  r  
type_hintsmode_lookuparguments_listr  r  r  rL  r  rv  parameter_mode
arg_schemar$  non_pos_only_param_namesoverlapping_paramsr  r   return_hints                         r   r2  zGenerateSchema._call_schema  s   
 ! 11'"::8h`gh
 %%'8++-D""Nr
 @B9=;?<@~~++-GD!||syy(#[[c2
'-
(__QVV4N)!<<T:qyyZhi
%%j19333"&"6"6z"Bvv!6!66>>6+77
C*'4/@AUAU@XY`s  -0NN,@,@,B0,BqaffPYPiPiFi,B - 0 *B)N)N{OjOj)k&)//0D0D/GG_&)*<&=&BsK1#yy(U&AS:T(UUVX "A	  '<O(,(?(?T(R%&/O(,(<(<Z(H%K .N 8<--))//K#))+ $ 4 4[ A&&(( / /"3!/!@!@ '

 
	
30s   %L3Lc                >   t        |t        j                        sJ |j                  }|j                  }	 |j                         }|d ut        |      dk7  z   |z   dkD  rt        d      |r| j                  |j                        S |r"| j                  t        j                  |         S |r@| j                  |      }t        j                  d t        j                                |d<   |S t        j                          S # t        $ r t        |dd       d u}Y w xY w)N__default__r   rL   zZPydantic does not support mixing more than one of TypeVar bounds, constraints and defaultsc                     ||       S r   r   )r  hs     r   r  z>GenerateSchema._unsubstituted_typevar_schema.<locals>.<lambda>y  s    QqTr   )r   r   )rJ  r.  r#   r  r  has_defaultr  r   r  NotImplementedErrorr   r4  r@  r$   r/   r  r   )r   typevarr   constraintstypevar_has_defaultr   s         r   r/  z,GenerateSchema._unsubstituted_typevar_schemaa  s"   '6>>222!!--	T")"5"5"7
 #k"2a"78;NNQRR%l  ''(;(;<<%%fll;&?@@))%0F&1&U&U!+*@*@*B'F?# M))++)  	T")'=$"Gt"S	Ts   D DDc                   	 t        j                  |j                  |j                  j                  | j
                  j                        }|t        u rt        dd      t        || j                        }t        j                  |j                  |      |_        | j!                  |      }| j#                  |t%        |j'                         |j(                              }| j*                  j,                  }|(| j/                  ||j                  |j(                         | j1                  | j*                  |j                  |j(                         t3        |j                        \  }}i }	t5        |	ddi|r|ni |	       t7        j8                  |j(                  ||j                  j:                  |	
      S # t        $ r}t        j                  |      |d }~ww xY w)Nr  zComputed field is missing return type annotation or specifying `return_type` to the `@computed_field` decorator (e.g. `@computed_field(return_type=int|str)`)zmodel-field-missing-annotationr   )return_type)rc  rf  rg  readOnlyTrp  )r  ra  r$  )rN   get_function_return_typefuncr   r>  r   localsr  rB   r  r-   rC   rp   r   r6  replacer   r  r   r1  r   r   rc  rh  rk  r   rT   r/   computed_fieldra  )
r   r  r  r>  r  return_type_schemarc  rq  rr  r  s
             r   r  z%GenerateSchema._computed_field_schema  s   
	H &>>**D4I4I4P4PK
 ++#d5  $K1C1CD $$QVVE!11+>!::01B1I1I1KQ^^\

 ..>>&>> /QVVabaoao ?  	778L8LaffVWVdVde1Z[\[a[a1b..(*!+T jM`6Ifh j/	

 ))NN*<AFFLL[h
 	
E  	H-==a@aG	Hs   A
F: :	GGGc                    t               }| j                  |d      ^}}| j                  ||      }|D ]  }t        ||      st	        ||      } |S )zdGenerate schema for an Annotated type, e.g. `Annotated[int, Field(...)]` or `Annotated[int, Gt(0)]`.Tr  )rr   r  r;  rJ  r  )r   r  rz   r=  r   r   rv  s          r   r  z GenerateSchema._annotated_schema  sh    ,.	$($I$I %J %
!k ((kB &J*i0%j&9 & r   c                    ddl m}m}m} 	 t	        |       t        |      xs |}|t        v r	 |||      S |t        v r	 |||      S |t        v r	 |||      S y # t
        $ r Y y w xY w)NrL   ))deque_schema_prepare_pydantic_annotations)mapping_like_prepare_pydantic_annotations(path_schema_prepare_pydantic_annotations)
_std_types_schemarH  rI  rJ  hashr   r5   r   r   MAPPING_TYPES)r   rn  r   rH  rI  rJ  
obj_origins          r   r:  z?GenerateSchema._get_prepare_pydantic_annotations_for_known_type  s~    	
 	
	I  _+
#;CMM;&<S+NN=(<S+NN!  		s   A 	A&%A&c                    | S r   r   r  s    r   r  zGenerateSchema.<lambda>  s    qr   c                    t        t        j                  |            } j                  t	        |            }||\  }g }d fd}t        |       }|D ]  }| j                  |||      }  |      }	|r|	j                  di       }
t        |
|       t         j                  j                  |	      S )a  Apply arguments from `Annotated` or from `FieldInfo` to a schema.

        This gets called by `GenerateSchema._annotated_schema` but differs from it in that it does
        not expect `source_type` to be an `Annotated` object, it expects it to be  the first argument of that
        (in other words, `GenerateSchema._annotated_schema` just unpacks `Annotated`, this process it).
        c                    j                  |       }|j                  |       }n|}t        | |      }|4t        |j                  j
                        }|j                  ||        |      S r   )r  r  r  r  r   r  r  )rn  r  r   r  r  r   r=  ro  s        r   inner_handlerz8GenerateSchema._apply_annotations.<locals>.inner_handler  s{     ??[QM$44S9&#DS&#Q #/"9&$))BWBW"X".))/;OP)&11r   r$  ) pydantic_js_annotation_functionsrn  r   r.  r)   )r/  rP   expand_grouped_metadatar:  r   rv   _get_wrapped_inner_schemar  rT   r   r   r   )r   r=  r   ro  r<  rS  rR  get_inner_schemarv  r   r  s   `` `       r   r;  z!GenerateSchema._apply_annotations  s     4LL[YZCCKQVWbQcd?'*$KHJ(	2 8tL%J!#== *.N  & "+.+"--j"=M Qqr;D<P<P<^<^`kmsttr   c                   t               }t        ||      rM|j                  D ]  }| j                  ||      } |j                  | j                  ||j                        }|S |d   dk(  r?|j                  dt        j                               }| j                  ||      }|r||d<   |S |}|j                  dd       }|X|j                         }|dt        |       z   }|| j                  j                  v r| j                  j                  |   S ||d<   n|d   dk(  r|d   }|| j                  j                  v rn| j                  j                  |   j                         }|dt        |       z   }|| j                  j                  v r| j                  j                  |   S ||d<   t        j                  ||j                               }	|	|	S |S )Nr   r   r   r#  r(  definition-refr   )rr   rJ  r$  _apply_single_annotationrt  ru  r   r/   r   r   r  r   r  rP   apply_known_metadata)
r   r   r$  rz   field_metadatar  r  r#  new_refmaybe_updated_schemas
             r   rZ  z'GenerateSchema._apply_single_annotation  s   ,.	h	*"*"3"366v~N #4 %%1;;FHDZDZ[M&>Z'JJx)?)?)ABE11%BE#(x M jj%?[[]FaX/00G$))///yy,,W55#F5MF^//&Cdii+++..s388:!DN#3 44dii333990099 'u8MMhX^XcXcXef+''r   c                    t               }t        ||      rQ|j                  D ]  }| j                  ||      } t	        |      \  }}|j                  di       }t        |||       |S )Nr$  rp  )rr   rJ  r$  $_apply_single_annotation_json_schemar   r  rT   )r   r   r$  rz   r\  rq  rr  r  s           r   r`  z3GenerateSchema._apply_single_annotation_json_schema8  sw     -.	h	*"*"3"3BB6>Z #4 6__g5h2!2"--j"=M 3FZk r   c                \     t        dd       xs d d fd}t        |       S )Nr  c                     ||       S r   r   )r  r  s     r   r  z:GenerateSchema._get_wrapped_inner_schema.<locals>.<lambda>O  s    GFOr   c                     |       }j                  |      }j                  |      }t        |      }|j                  |       |S r   )rZ  r`  r  r  )r  r   r  rv  rW  metadata_get_schemarS  r   s      r   new_handlerz=GenerateSchema._get_wrapped_inner_schema.<locals>.new_handlerR  s\    (1ABF226:FF>>vzRF#DZQW#X #/0778LMMr   )r  r   r.  core_schema.CoreSchema)r   rv   )r   rW  rv  rS  re  rd  s   ```` @r   rV  z(GenerateSchema._get_wrapped_inner_schemaH  s9     6=ZIgim5n 6
3 		 	 ,K>>r   c                   |rt        |      }|d   dk(  r|d   }| j                  ||      |d<   |S t        j                  d|j	                  dd            }|.|| j
                  j                  |<   t        j                  |      }|d   }t        |j                  |j                  j                        \  }}	 t        j                  |j                  |j                  j                  | j                   j"                        }|t*        u rd}
n| j-                  |      }
|j                  j                  d	k(  r=t        j.                  |j                  |||
|j                  j0                  
      |d<   |S |j                  j                  dk(  sJ t        j2                  |j                  |||
|j                  j0                  
      |d<   |S # t$        $ r}	t'        j(                  |	      |	d}	~	ww xY w)z$Apply field serializers to a schema.r   r  r   zstr|Noner#  Nr   r=  r   )is_field_serializerrQ  r  r   r   r   )r   r  r.  r%   r   r   r  r/   r  rf   rA  r   rK  rN   r@  r>  r   rB  r  rB   r  r-   r   r  r   r   )r   r   serializersr   r#  
serializerrh  rQ  r>  r  r  s              r   r  z'GenerateSchema._apply_field_serializers^  s    &\Ff~.%h/#'#@#@{#[x kk*fjj.EF?17DII))#.(DDSIF %RJ,DZ__V`VeVeVjVj,k)L *BBOOZ__%@%@$J_J_JfJf // $ $ 4 4[ A##v-*5*Y*YOO(;%"/(oo77+'   "++w666*5*Z*ZOO(;%"/(oo77+' 3  L1AA!D!KLs   <A
G 	G4G//G4c                   |j                  dd      }|r,t        |      d   }t        |j                  |j                  j
                        }	 t        j                  |j                  |j                  j                  | j                  j                        }|t        u rd}n| j                  |      }|j                  j
                  dk(  r8t!        j"                  |j                  |||j                  j$                        }	n7t!        j&                  |j                  |||j                  j$                        }	|	|d<   |r||d<   |S # t        $ r}t        j                  |      |d}~ww xY w)z$Apply model serializers to a schema.r#  Nr   r=  r   )rQ  r  r   r   )r  r/  rg   rA  r   rK  rN   r@  r>  r   rB  r  rB   r  r-   r   r/   r  r   r   )
r   r   ri  r#  rj  rQ  r>  r  r  
ser_schemas
             r   r  z'GenerateSchema._apply_model_serializers  sE    !**UD1k*2.J/
AUAUVHL *BBOOZ__%@%@$J_J_JfJf
 // $ $ 4 4[ A##v-4?4c4cOO%"/(oo77	5
 )MMOO%"/(oo77	
 '1F?#F5M3  L1AA!D!KLs   A
E 	E/E**E/)NN)r   rR   r   zNsResolver | Noner   zdict[Any, Any] | Noner.  Noner.  rm  )r.  rR   )r.  rt   )r.  r   )r  r   r.  r)   )r  r   r  r   r.  r)   )r+  z
type[Enum]r.  r)   )r   r   r.  r)   )r.  r)   rT  )r   r)   rt  zstr | Discriminator | Noner.  r)   rs  )r  r)   r  zCallable[..., Any]r.  rm  )T)rn  r   r  r   r.  rf  )r   ztype[BaseModel]r.  rf  )rn  r   r.  r   )rn  r   r  r   r.  zcore_schema.CoreSchema | None)rn  r   r  zLiteral[True]r.  tuple[Any, ...])rn  r   r.  tuple[Any, ...] | None)F)rn  r   r  r   r.  rp  )rn  r   r.  ztuple[Any, Any])rn  r   r.  rf  )rn  r   r  r   r.  r)   )
rL  r  rM  rz   r   r^   r  r   r.  zcore_schema.TypedDictField)rL  r  rM  rz   r   r^   r.  zcore_schema.ModelField)rL  r  rM  rz   r   r^   r.  zcore_schema.DataclassField)rc  %Callable[[str], str] | AliasGeneratorrM  rz   r   r  r.  rm  )rc  rq  rf  ry   rg  r  )r   rR   rM  FieldInfo | ComputedFieldInfor   r  r.  rm  )rL  r  rM  rz   r   r^   r.  _CommonField)r  r   r.  rf  )rn  r2   r.  r)   )r  r   r.  r)   )r  r   r  r   r.  rf  )r  r   r  r   r.  rf  )
rL  r  rv  z	type[Any]r  r   rK  zJLiteral['positional_only', 'positional_or_keyword', 'keyword_only'] | Noner.  zcore_schema.ArgumentsParameter)r  r   r.  rf  )r.  rf  )r  r   r.  rf  )r  r   r.  rf  )r  r   r.  zcore_schema.GeneratorSchema)r  r   r.  rf  )r  ztype[StandardDataclass]r  ztype[StandardDataclass] | Noner.  rf  )r)  ValidateCallSupportedTypesr.  zcore_schema.CallSchema)r9  ztyping.TypeVarr.  rf  )r  zDecorator[ComputedFieldInfo]r  z2dict[str, Decorator[FieldSerializerDecoratorInfo]]r.  zcore_schema.ComputedField)r  r   r.  rf  )rn  r   r   ro  r.  ztuple[Any, list[Any]] | None)r=  r   r   z	list[Any]ro  z"Callable[[CoreSchema], CoreSchema]r.  r)   )r   rf  r$  r   r.  rf  )rW  r;   rv  r   rS  zlist[GetJsonSchemaFunction]r.  rv   )r   rf  ri  z-list[Decorator[FieldSerializerDecoratorInfo]]r.  rf  )r   rf  ri  z1Iterable[Decorator[ModelSerializerDecoratorInfo]]r.  rf  )Mr5  rx  ry  r2  r  r   r   propertyr   r   r   r  r  r  r  r>  ra  rh  rj  ro  ru  	Exceptionrz  r~  r|  r  r   r  r  r  r  r  r&   r  r  r  r  r  r9  rO  r  r[  staticmethodrd  rh  rk  r  r@  r  r#  r$  r&  r   r  r  r  r  r5  r  rA  r  rE  r+  r-  r8  r2  r/  r  r  r:  r;  rZ  r`  rV  r  r  __classcell__)r   s   @r   r   r   >  s   fI *..2	#%# '# ,	#
 
#
 / / 1 1 < <
IkHNFP
B
"
2	
 1K	$9 	
	/ -1-- &*- 
 	-^aJF	@D, i iW W $2m.^..l 

 
 #	
 
 
$
&

 
 #	

 
 
"

 
 #	

 
$
* /[>/[LU/[cf/[	/[ /[b (\>(\.(\ !(\ (\T %%%3P%^a%	% %*a
a
%.a
<Ja
	a
F6@(hOT%aV ![_        	  
 Y   
(  D_<

0d
>@
.Mr8

WN0WN:XWN	WNrL
\,<0
'0
 N0
 
#	0
d %4	%D FQ	-u-u -u !C	-u
 
-u^(T,8;	 ?.? ? +F	?
 
&?,6&6 C6 
 	6p),);l)	)r   r   c                .    t        j                  | |      S r   )r/   !no_info_before_validator_functionfr   r(  s      r   r  r    s    0]0]^_ag0hr   c                .    t        j                  | |      S r   )r/   r:  r{  s      r   r  r    s    {/[/[\]_e/fr   c                ,    t        j                  |       S r   )r/   r^  )r|  rV  rW  s      r   r  r    s    K,X,XYZ,[r   c                .    t        j                  | |      S r   )r/   r  r{  s      r   r  r    s    k.Y.YZ[]c.dr   c                2    t        j                  | ||      S N)r   )r/   #with_info_before_validator_functionr|  r   r   s      r   r  r    s    ;;j;j	6j<r   c                2    t        j                  | ||      S r  )r/   "with_info_after_validator_functionr  s      r   r  r    s    +:h:h	6j;r   c                0    t        j                  | |      S r  )r/   r  )r|  r(  r   s      r   r  r    s    [5c5c	j6r   c                2    t        j                  | ||      S r  )r/   !with_info_wrap_validator_functionr  s      r   r  r    s    9f9f	6j:r   ))r   no-info)r   r  )r   r  )r   r  )r   	with-info)r   r  )r   r  )r   r  zMapping[tuple[FieldValidatorModes, Literal['no-info', 'with-info']], Callable[[Callable[..., Any], core_schema.CoreSchema, str | None], core_schema.CoreSchema]]_VALIDATOR_F_MATCHc                    |D ]b  }t        |j                  |j                  j                        }|rdnd}t	        |j                  j                  |f   |j                  | |      } d | S )a  Apply validators to a schema.

    Args:
        schema: The schema to apply validators on.
        validators: An iterable of validators.
        field_name: The name of the field if validators are being applied to a model field.

    Returns:
        The updated schema.
    r  r  )rh   rA  r   rK  r  )r   r  r   	validatorrQ  val_types         r   r   r     s`    "  	$Y^^Y^^5H5HI"*;	#Y^^%8%8($CDY^^U[]gh	  
 Mr   c                B    | D ]  }|j                   j                  s y y)a?  In v1, if any of the validators for a field had `always=True`, the default value would be validated.

    This serves as an auxiliary function for re-implementing that logic, by looping over a provided
    collection of (v1-style) ValidatorDecoratorInfo's and checking if any of them have `always=True`.

    We should be able to drop this function and the associated logic calling it once we drop support
    for v1-style validator decorators. (Or we can extend it and keep it if we add something equivalent
    to the v1-validator `always` kwarg to `field_validator`.)
    TF)r   rP  )r  r  s     r   r|  r|    s#      	>>     r   c                \   | j                  dd      }|D ]  }|dk(  r|j                  j                  dk7  r#|dk(  r|j                  j                  dk(  rBt        |j                  |j                  j                        }|j                  j                  dk(  rF|r"t        j                  |j                  |       } t        j                  |j                  |       } |j                  j                  dk(  rH|r#t        j                  |j                  |       } 	t        j                  |j                  |       } ,|j                  j                  dk(  sJ |r#t        j                  |j                  |       } lt        j                  |j                  |       }  |r|| d<   | S )	a  Apply model validators to a schema.

    If mode == 'inner', only "before" validators are applied
    If mode == 'outer', validators other than "before" are applied
    If mode == 'all', all validators are applied

    Args:
        schema: The schema to apply validators on.
        validators: An iterable of validators.
        mode: The validator mode.

    Returns:
        The updated schema.
    r#  Nr  r   r  r   )r)  r   r   )r  r   rK  rh   rA  r/   r  r  r  rz  r  r:  )r   r  rK  r#  r  rQ  s         r   r  r  	  s\   & jj-C	7?y~~22h>7?y~~22h>$Y^^Y^^5H5HI>>&($FFPYP^P^gmn$DDinnekl^^  H,$HHR[R`R`iop$FFPYP^P^gmn>>&&'111$GGQZQ_Q_hno$EEy~~flm+  , uMr   c                   | j                   r@t        j                  || j                   t        | j                         | j                        S | j
                  t        ur,t        j                  || j
                  | j                        S |S )a  Wrap schema with default schema if default value or `default_factory` are available.

    Args:
        field_info: The field info object.
        schema: The schema to apply default on.

    Returns:
        Updated schema by default value or `default_factory`.
    )default_factorydefault_factory_takes_datar}  )r  r}  )r  r/   with_default_schemark   r}  r  r-   )rM  r   s     r   r  r  3	  s     !!..&66'DZE_E_'`'88	
 	
 
		#4	4..J..A\A\
 	
 r   c                f   t        | dd      }t        | d      r]t               }|duxr% |j                  j                  |t        |dd      fv}|s&t        | dd      }t        d|rd| dnd	 d
d      t        | d      r+t        j                  |       st        | j                  |      S |y|S )z`Extract `__get_pydantic_json_schema__` from a type, handling the deprecated `__modify_schema__`.__get_pydantic_json_schema__N__modify_schema__r  r5  zjThe `__modify_schema__` method is not supported in Pydantic v2. Use `__get_pydantic_json_schema__` insteadz in class ``r   r   zcustom-json-schemar   
__origin__)
r   r  rq   r  r  rC   rQ   r  r  r  )r   r   js_modify_functionr|   has_custom_v2_modify_js_funccls_names         r   r  r  L	  s     %CTJr&',.	 d* W66??&0BJPT(UVW 	% ,r:t4H#=Zb{8*TU=Vhj<kkln)  r< )C)CB)G0GG!r   c                  J    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   y)rs  rf  r   4str | list[str | int] | list[list[str | int]] | NonerH  r  rI  bool | NonerG  rQ  zdict[str, Any]r$  N)r5  rx  ry  r  r   r   r   rs  rs  k	  s&    ""JJ##&&r   rs  )rH  rI  rG  rQ  r$  c                   | |||||dS )Nr   rH  rI  rG  rQ  r$  r   r  s         r   r  r  t	  s      ,2!6 r   c                  *    e Zd ZdZddZedd       Zy)r   z*Keeps track of references and definitions.c                0    t               | _        i | _        y r   )r   seenr  r   s    r   r   z_Definitions.__init__	  s    !e	>@r   c              #  H  K   t        |      }|| j                  v s|| j                  v r|t        j                  |      f y| j                  j                  |       	 |df | j                  j                  |       y# | j                  j                  |       w xY ww)ao  Get a definition for `tp` if one exists.

        If a definition exists, a tuple of `(ref_string, CoreSchema)` is returned.
        If no definition exists yet, a tuple of `(ref_string, None)` is returned.

        Note that the returned `CoreSchema` will always be a `DefinitionReferenceSchema`,
        not the actual definition itself.

        This should be called for any type that can be identified by reference.
        This includes any recursive types.

        At present the following types can be named/recursive:

        - BaseModel
        - Dataclasses
        - TypedDict
        - TypeAliasType
        N)rX   r  r  r/   r  adddiscard)r   r   r#  s      r   r  z_Definitions.get_schema_or_ref	  s     ( 2$))sd&6&66??DEEIIMM#'Dk!		!!#&		!!#&s   AB" B &B"BB"Nrn  )r   r   r.  z3Iterator[tuple[str, None] | tuple[str, CoreSchema]])r5  rx  ry  r2  r   r   r  r   r   r   r   r   	  s    4A ' 'r   r   c                Z    | d   dk(  r|j                  | d   d       S | d   dk(  r| d   S | S )Nr   rY  r   r  r   r  )r   r  s     r   r  r  	  sA    f~))vl3T::	=	(hr   c                  2    e Zd ZdZddZedd       ZddZy)	r   _stackc                    g | _         y r   r  r   s    r   r   z_FieldNameStack.__init__	  s	    !#r   c              #  ~   K   | j                   j                  |       d  | j                   j                          y wr   r  r  r  )r   r   s     r   r  z_FieldNameStack.push	  s)     :&   ;=c                :    | j                   r| j                   d   S y Nr   r  r   s    r   r   z_FieldNameStack.get	      ;;;;r?"r   Nrn  )r   r  r.  Iterator[None])r.  r  r5  rx  ry  r  r   r   r  r   r   r   r   r   r   	  s%    I$  
r   r   c                  2    e Zd ZdZddZedd       ZddZy)	r   r  c                    g | _         y r   r  r   s    r   r   z_ModelTypeStack.__init__	  s	    "$r   c              #  ~   K   | j                   j                  |       d  | j                   j                          y wr   r  )r   type_objs     r   r  z_ModelTypeStack.push	  s)     8$r  c                :    | j                   r| j                   d   S y r  r  r   s    r   r   z_ModelTypeStack.get	  r  r   Nrn  )r  r   r.  r  )r.  ztype | Noner  r   r   r   r   r   	  s%    I%  
r   r   )r   FieldDecoratorInfor   r  r.  r   )r   zIterable[AnyFieldDecorator]r   zIterable[str]r.  rm  )r   z+Iterable[Decorator[FieldDecoratorInfoType]]r   r  r.  z'list[Decorator[FieldDecoratorInfoType]])r   rf  r   z'list[Decorator[ValidatorDecoratorInfo]]r   r  r.  rf  )r   rr  r.  zAtuple[JsonDict | None, JsonDict | JsonSchemaExtraCallable | None])r   zJsonEncoders | Noner   r   r   r)   r.  r)   )r   r   r   r   r.  r   )r   rf  r  zIterable[Decorator[RootValidatorDecoratorInfo]] | Iterable[Decorator[ValidatorDecoratorInfo]] | Iterable[Decorator[FieldValidatorDecoratorInfo]]r   r  r.  rf  )r  z+Iterable[Decorator[ValidatorDecoratorInfo]]r.  r   )r   rf  r  z0Iterable[Decorator[ModelValidatorDecoratorInfo]]rK  z Literal['inner', 'outer', 'all']r.  rf  )rM  rz   r   rf  r.  rf  )r   r   r   r)   r.  zGetJsonSchemaFunction | None)r   rf  rH  r  rI  r  rG  r  rQ  r  r$  r   r.  rs  )r   r)   r  zdict[str, CoreSchema]r.  zCoreSchema | None)r2  
__future__r   _annotationscollections.abcrB  r6  r  r3  ospathlibr)  r  r.  r   
contextlibr   r   r   decimalr   enumr   	fractionsr	   	functoolsr
   r   r   r   	ipaddressr   r   r   r   r   r   	itertoolsr   operatorr   r  r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   uuidr'   r(   typing_extensionspydantic_corer)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   aliasesr8   r9   r:   annotated_handlersr;   r<   r  r=   r>   r?   r@   errorsrA   rB   rC   functional_validatorsrD   rE   rF   rG   rH   r  rI   versionrJ   rK   r   rM   rN   rO   rP   rQ   _configrR   rS   _core_metadatarT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   _docs_extractionri   r  rj   rk   _forward_refrl   	_genericsrm   rn   ro   rp   _import_utilsrq   rr   _mock_val_serrs   _namespace_utilsrt   ru   _schema_generation_sharedrv   _utilsrw   rx   r   ry   rz   mainr|   r}   _dataclassesr~   r   r  r  r  r   AnyFieldDecoratorModifyCoreSchemaWrapHandlerGetCoreSchemaFunctionr   Tupler   r  r/  ListrC  MutableSequencer   r   Set
MutableSetr   	frozenset	FrozenSetr   r   r   r   r  r   PathLikePathPurePath	PosixPathPurePosixPathPureWindowsPathr   MutableMappingOrderedDictDefaultDictdefaultdictCounterrM  dequeDequer   rt  r1  r   r   r   r   r   r   JsonEncodersr   r   r   r  r   r|  r  r  r  rs  r  r   r  r   r   r   r   r   <module>r     sW   3 2     	  	 
   %      8 8 f f   6 6       	 	 	 d c = = K O O b b w w ) # 0 f f 6 0	 	 	    : L . t t M ) 9 C 65 %/@&&'1 13NPllm  !9AST $%)**+-  3  #'B!C[E[E[![\  &,,/Z /[__-L-LM
J Mfjj+//*D*DE	: E )6+;+;[__=P=PQ * Q,
J ,#]Km]hi* i$oo{/G/GH
 HKKLL
J  NN
OOOO""!!

NN ',,fll;Z ; #  !))C D  .Zgh   i

 
*6nDnMPn,n"""A" " 	"J
A
'
AF
A DI{*+&,/9CD%A AP< if[d   2"7
  2 ,",@, +, 	,^2>9  NR&*)-" K $	
 '   &$' $'N & r   