ó
    pyüi¿e  ã                   ó  • % S SK rS SKrS SKrS SK Jr  S SKJrJrJrJ	r	J
r
Jr  S SKJrJr  S SKJrJrJrJrJrJrJrJrJrJr   S SKJrJr  S
SKJ r J!r!J"r"  \\/S4   r#\" S5      r$\" S\%\&\4   S9r'\(" 5       r)\S\\$   S\\$   4S j5       r*\SS.S\+S\\\$   /\\$   4   4S jj5       r*S>SS.S\\$   S-  S\+S\\$   \\\$   /\\$   4   -  4S jjjr*S\\'   S\%SS4S jr,\S\\'   S\4S j5       r-S\\'   S\%\&\4   4S jr.\\SSSSS4S\/\#   \#-  S\\-  S\/ \4   \-  S \+S!\+S"\+S-  S#\+S$\%S-  S%\S\4S& jjr0S\#4S' jr1S(\&S)\S*\SS4S+ jr2S(\&S)\SS4S, jr3S(\&S)\S-\4\S.4   SS4S/ jr5S(\&S)\S-\4\S.4   SS4S0 jr6S(\&S)\S-\4\S.4   SS4S1 jr7S(\&S)\S-\4\S.4   SS4S2 jr8S(\&S)\S-\4\S.4   SS4S3 jr9S(\&S)\S-\4\S.4   SS4S4 jr:S(\&S)\S-\4\S.4   SS4S5 jr;S(\&S)\S*\SS4S6 jr<S7\S\#4S8 jr=S\S\+4S9 jr>S:\S\+4S; jr?\\5\\6\/\7\%\8\4\9\@\:\R‚                  R„                  \;0rC\%\\\&\\4\S.4   /S4   4   \DS<'   \5\C\RŠ                  '   / S=QrFg! \ a/     S SKJrJr   GN! \ a    \" SS0 5      r\" S	S0 5      r  GN5f = ff = f)?é    N)ÚCallable)Ú_MISSING_TYPEÚMISSINGÚFieldÚfieldÚfieldsÚmake_dataclass)Ú	lru_cacheÚwraps)
Ú	AnnotatedÚAnyÚ
ForwardRefÚLiteralÚTypeÚTypeVarÚUnionÚget_argsÚ
get_originÚoverload)ÚNotRequiredÚRequiredr   © r   é   )Ú#StrictDataclassClassValidationErrorÚStrictDataclassDefinitionErrorÚ#StrictDataclassFieldValidationErrorÚTÚTypedDictType)ÚboundÚclsÚreturnc                 ó   • g ©Nr   )r    s    ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/huggingface_hub/dataclasses.pyÚstrictr%   0   s   € Ø%(ó    F©Úaccept_kwargsr(   c                 ó   • g r#   r   r'   s    r$   r%   r%   4   s   € ØLOr&   c                ób   ^• S[         [           S[         [           4U4S jjnU b  U" U 5      $ U$ )a  
Decorator to add strict validation to a dataclass.

This decorator must be used on top of `@dataclass` to ensure IDEs and static typing tools
recognize the class as a dataclass.

Can be used with or without arguments:
- `@strict`
- `@strict(accept_kwargs=True)`

Args:
    cls:
        The class to convert to a strict dataclass.
    accept_kwargs (`bool`, *optional*):
        If True, allows arbitrary keyword arguments in `__init__`. Defaults to False.

Returns:
    The enhanced dataclass with strict validation on field assignment.

Example:
```py
>>> from dataclasses import dataclass
>>> from huggingface_hub.dataclasses import as_validated_field, strict, validated_field

>>> @as_validated_field
>>> def positive_int(value: int):
...     if not value >= 0:
...         raise ValueError(f"Value must be positive, got {value}")

>>> @strict(accept_kwargs=True)
... @dataclass
... class User:
...     name: str
...     age: int = positive_int(default=10)

# Initialize
>>> User(name="John")
User(name='John', age=10)

# Extra kwargs are accepted
>>> User(name="John", age=30, lastname="Doe")
User(name='John', age=30, *lastname='Doe')

# Invalid type => raises
>>> User(name="John", age="30")
huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
    TypeError: Field 'age' expected int, got str (value: '30')

# Invalid value => raises
>>> User(name="John", age=-1)
huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
    ValueError: Value must be positive, got -1
```
r    r!   c           	      ó  >^ ^^^• [        T S5      (       d  [        ST R                   S35      e0 n[        T 5       H©  n/ nUR	                  [        U5      5        UR                  R                  S5      nUb^  [        U[        5      (       d  U/nU H/  n[        U5      (       a  M  [        SUR                   SU S35      e   UR                  U5        X1UR                  '   M«     UT l        T R                  mS[        S	[         S
[        SS 4U4S jjnUT l        T(       aŸ  T R"                  n[%        U5      S[        SS 4U 4S jj5       nUT l        [        T S5      (       d  S[        SS 4S jn	U	T l        T R(                  m[%        T5      S[         4U U4S jj5       n
T R*                  R,                  SL a  U
T l        / n[/        T 5       H“  nUR1                  S5      (       d  M  [3        T U5      n[5        U5      (       d  M9  [7        [8        R:                  " U5      R<                  5      S:w  a  [        ST R                   SU S35      eUR	                  U5        M•     UT l        S[@        SS 4U 4S jjnSUl!        [        T S5      (       a5  [3        T RD                  SS5      (       d  [        ST R                   S35      eUT l"        T R"                  m[%        T5      SU U4S jj5       n[G        T SU5        T $ )NÚ__dataclass_fields__zClass 'z.' must be a dataclass before applying @strict.Ú	validatorzInvalid validator for field 'ú': z.. Must be a callable taking a single argument.ÚselfÚnameÚvaluer!   c                 ó´   >• U R                   R                  U/ 5       H  n U" U5        M     T" XU5        g! [        [        4 a  n[	        XS9UeSnAff = f)z1Custom __setattr__ method for strict dataclasses.)r   ÚcauseN)Ú__validators__ÚgetÚ
ValueErrorÚ	TypeErrorr   )r/   r0   r1   r-   ÚeÚoriginal_setattrs        €r$   Ú__strict_setattr__Ú0strict.<locals>.wrap.<locals>.__strict_setattr__‹   sc   ø€ ð "×0Ñ0×4Ñ4°T¸2Ö>�	ðZÙ˜eÖ$ñ ?ñ ˜T¨Õ/øô	 #¤IÐ.ó ZÜ=ÀDÑRÐXYÐYûðZús   ¢8¸AÁ
AÁAÚkwargsc                 ó(  >• [        T5       Vs1 s H  o3R                  iM     nnUR                  5        VVs0 s H  u  pVXT;   d  M  XV_M     nnn[        U5      S:”  a%  [	        STR
                   S[        U5       S35      e[        T5       H¼  nUR                  U;   a$  [        XR                  XsR                     5        M7  UR                  [        La"  [        XR                  UR                  5        Ml  UR                  [        La&  [        XR                  UR                  5       5        M¥  [        SUR                   S35      e   0 nUR                  5        H  u  pšX”;  d  M  X¨U	'   M     U R                  " S0 UD6  g s  snf s  snnf )Nr   zWhen `accept_kwargs=True`, z, accepts only keyword arguments, but found `z` positional args.zMissing required field - 'Ú'r   )r   r0   ÚitemsÚlenr6   Ú__name__ÚsetattrÚdefaultr   Údefault_factoryr7   Ú__post_init__)r/   Úargsr<   ÚfÚdataclass_fieldsÚkÚvÚstandard_kwargsÚadditional_kwargsr0   r1   r    s              €r$   Ú__init__Ú&strict.<locals>.wrap.<locals>.__init__�   sT  ø€ ô 5;¸3´KÓ#@²K¨q§F¤F±KÐ Ð#@Ø4:·L±L´NÔ"\²N©D¨AÀaÑF[£4 1¢4±N�Ñ"\ô �t“9˜q“=Ü$Ø5°c·l±l°^ð D&Ü&)¨$£i [Ð0BðDóð ô
   ž�AØ—v‘v Ó0Ü §f¡f¨o¿f¹fÑ.EÖFØŸ™¬'Ò1Ü §f¡f¨a¯i©iÖ8Ø×*Ñ*´'Ò9Ü §f¡f¨a×.?Ñ.?Ó.AÖBä'Ð*DÀQÇVÁVÀHÈAÐ(NÓOÐOñ %ð %'Ð!Ø#)§<¡<¦>‘K�DØÕ3Ø27¨$Ó/ñ $2ð ×"Ò"Ñ7Ð%6Ó7ùò= $AùÛ"\s   �F	¹FÁFrE   c                 óN   • UR                  5        H  u  p#[        XU5        M     g)z2Default __post_init__ to accept additional kwargs.N)r?   rB   )r/   r<   r0   r1   s       r$   rE   Ú+strict.<locals>.wrap.<locals>.__post_init__Å   s   € à'-§|¡|¦~™˜Ü ¨EÖ2ò (6r&   c                 óø   >• T" U 5      nU R                   R                  5        VVs/ s H   u  p#UTR                  ;  d  M  SU SU< 3PM"     nnnSR                  U5      nU(       a  US S  SU S3$ U$ s  snnf )NÚ*Ú=z, éÿÿÿÿÚ))Ú__dict__r?   r,   Újoin)r/   Ústandard_reprrI   rJ   rL   Úadditional_reprr    Úoriginal_reprs         €€r$   Ú__repr__Ú&strict.<locals>.wrap.<locals>.__repr__Ï   sœ   ø€ ñ !.¨dÓ 3�ð !%§¡× 3Ñ 3Ô 5ô%ò !6™˜Ø × 8Ñ 8Ñ8ó "�a˜�s˜!˜A™5“MÙ 5ð "ñ %ð #'§)¡)Ð,=Ó">�ö GX˜-¨¨Ð,Ð-¨R°Ð/@ÀÐBÐjÐ]jÐjùó%s   §A6ÁA6TÚ	validate_r   z' has a class validator 'z¤' that takes more than one argument. Class validators must take only 'self' as an argument. Methods starting with 'validate_' are considered to be class validators.c                 ó˜   >• TR                    H  n U" U 5        M     g! [        [        4 a  n[        UR                  US9UeSnAff = f)z%Run class validators on the instance.)r-   r3   N)Ú__class_validators__r6   r7   r   rA   )r/   r-   r8   r    s      €r$   ÚvalidateÚ&strict.<locals>.wrap.<locals>.validate÷   sP   ø€ à ×5Ô5�	ðlÙ˜d–Oò 6øô #¤IÐ.ó lÜ=È	×HZÑHZÐbcÑdÐjkÐkûðlús   ’ŸA	¯AÁA	r`   Ú"__is_defined_by_strict_decorator__Fzµ' already implements a method called 'validate'. This method name is reserved when using the @strict decorator on a dataclass. If you want to keep your own method, please rename it.c                 ó@   >• T" U /UQ70 UD6  TR                  U 5        g)z*Run class validators after initialization.N)r`   )r/   rF   r<   r    Úinitial_inits      €€r$   Úinit_with_validateÚ0strict.<locals>.wrap.<locals>.init_with_validate  s#   ø€ ñ ˜Ð/ Ò/¨Ò/Ø�L‰L˜Õr&   rM   )r!   N)$Úhasattrr   rA   r   ÚappendÚ_create_type_validatorÚmetadatar5   Ú
isinstanceÚlistÚ_is_validatorr0   Úextendr4   Ú__setattr__r   ÚstrrM   r   rE   r[   Ú__dataclass_params__ÚreprÚdirÚ
startswithÚgetattrÚcallabler@   ÚinspectÚ	signatureÚ
parametersr_   r   rb   r`   rB   )r    Úfield_validatorsrG   Ú
validatorsÚcustom_validatorr-   r:   Úoriginal_initrM   rE   r[   Úclass_validatorsr0   Úmethodr`   re   rd   rZ   r9   r(   s   `               @@@€r$   ÚwrapÚstrict.<locals>.wrapp   s  ü€ Ü�sÐ2×3Ñ3Ü0Ø˜#Ÿ,™,˜Ð'UÐVóð ð
 :<ÐÜ˜–ˆAØˆJØ×ÑÔ4°QÓ7Ô8Ø Ÿz™zŸ~™~¨kÓ:ÐØÑ+Ü!Ð"2´D×9Ñ9Ø(8Ð'9Ð$Û!1�IÜ(¨×3Ó3Ü<Ø;¸A¿F¹F¸8À3ÀyÀkÐQð  Aóð ñ "2ð
 ×!Ñ!Ð"2Ô3Ø'1˜QŸV™VÓ$ñ ð .ˆÔð Ÿ?™?Ðð
	0¤Sð 
	0´ð 
	0¼Cð 
	0ÀD÷ 
	0ð -ˆŒæàŸL™LˆMä�=Ó!ð 8´ð  8¸ö  8ó "ð 8ðD $ˆCŒLô ˜3 ×0Ñ0ð3´#ð 3¸$ô 3ð
 %2�Ô!ð  ŸL™LˆMä�=Ó!ðk¤#÷ kó "ðkð  ×'Ñ'×,Ñ,°Ò4Ø'�”ð Ðä˜–HˆDØ—?‘? ;×/Ñ/ÙÜ˜S $Ó'ˆFÜ˜F×#Ñ#ÙÜ”7×$Ò$ VÓ,×7Ñ7Ó8¸AÓ=Ü4Ø˜cŸl™l˜^Ð+DÀTÀFð K>ð >óð ð
 ×#Ñ# FÖ+ñ ð $4ˆÔ ð	lœ1ð 	l ÷ 	lð 7;ˆÔ3ä�3˜
×#Ñ#Ü˜3Ÿ<™<Ð)MÈu×UÑUÜ4Ø˜cŸl™l˜^ð ,Nð Nóð ð  ˆŒð —|‘|ˆä	ˆ|Ó	÷	ó 
ð	ô
 	��ZÐ!3Ô4àˆ
r&   )r   r   )r    r(   r€   s    ` r$   r%   r%   8   s8   ø€ ðph”$”q‘'ð hœd¤1™g÷ hðV ™‰4�‹9Ð1¨TÐ1r&   ÚschemaÚdatac                 ó*   • [        U 5      nU" S0 UD6  g)an  
Validate that a dictionary conforms to the types defined in a TypedDict class.

Under the hood, the typed dict is converted to a strict dataclass and validated using the `@strict` decorator.

Args:
    schema (`type[TypedDictType]`):
        The TypedDict class defining the expected structure and types.
    data (`dict`):
        The dictionary to validate.

Raises:
    `StrictDataclassFieldValidationError`:
        If any field in the dictionary does not conform to the expected type.

Example:
```py
>>> from typing import Annotated, TypedDict
>>> from huggingface_hub.dataclasses import validate_typed_dict

>>> def positive_int(value: int):
...     if not value >= 0:
...         raise ValueError(f"Value must be positive, got {value}")

>>> class User(TypedDict):
...     name: str
...     age: Annotated[int, positive_int]

>>> # Valid data
>>> validate_typed_dict(User, {"name": "John", "age": 30})

>>> # Invalid type for age
>>> validate_typed_dict(User, {"name": "John", "age": "30"})
huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
    TypeError: Field 'age' expected int, got str (value: '30')

>>> # Invalid value for age
>>> validate_typed_dict(User, {"name": "John", "age": -1})
huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
    ValueError: Value must be positive, got -1
```
Nr   )Ú!_build_strict_cls_from_typed_dict)r‚   rƒ   Ú
strict_clss      r$   Úvalidate_typed_dictr‡     s   € ôX 3°6Ó:€Jñ Ñ�Ór&   c                 óœ  • [        U 5      n[        U SS5      (       d’  UR                  5        H~  u  p#[        U5      nU[        L aH  [        U5      tpV[        U5      (       d	  [        U   n[        [        U/[        U5      -   5         X'   Ma  [        U5      (       a  Ms  [        U   X'   M€     / nUR                  5        Hi  u  p#[        U5      [        L a3  [        U5      tpVUR                  " X%[        [        SUS   0S945        MJ  UR                  " X#[        [        S945        Mk     [        [        U R                  U5      5      $ )NÚ	__total__Tr-   r   )rC   rj   )rC   )Ú_get_typed_dict_annotationsru   r?   r   r   r   Ú_is_required_or_notrequiredr   Útuplerl   rh   r   Ú_TYPED_DICT_DEFAULT_VALUEr%   r	   rA   )r‚   Ú
type_hintsÚkeyr1   ÚoriginÚbaseÚmetar   s           r$   r…   r…   P  s"  € ô -¨VÓ4€Jô �6˜;¨×-Ñ-Ø$×*Ñ*Ö,‰JˆCÜ Ó&ˆFàœÒ"Ü& u›o��Ü2°4×8Ñ8Ü& tÑ,�DÜ"+¬E°4°&¼4À»:Ñ2EÓ,FÑ"G�
“Ü0°×7Ó7Ü"-¨eÑ"4�
“ñ -ð €FØ ×&Ñ&Ö(‰
ˆÜ�eÓ¤	Ò)Ü" 5›/ˆKˆDØ�MŠM˜3¤eÔ4MÐYdÐfjÐklÑfmÐXnÑ&oÐpÖqà�MŠM˜3¤uÔ5NÑ'OÐPÖQñ )ô ”. §¡°&Ó9Ó:Ð:r&   c           	      óö   •  SSK nUR                  U 5      $ ! [         aW    U R                  R	                  S0 5      R                  5        VVs0 s H  u  p#X#b  UO
[        S5      _M     Os  snnf snns $ f = f)z0Extract type annotations from a TypedDict class.r   NÚ__annotations__)ÚannotationlibÚget_annotationsÚImportErrorrV   r5   r?   Útype)r‚   r•   r0   r1   s       r$   rŠ   rŠ   o  sz   € ð
ãà×,Ñ,¨VÓ4Ð4øÜó 
ð
  &Ÿ™×2Ñ2Ð3DÀbÓI×OÑOÔQô	
ò  R‘�ð Ñ,‘%´$°t³*Ò<ÚQùö	
ò 	
ð
ús   ‚ —7A8ÁA+Á*A8Á7A8Tr-   rC   rD   Úinitrr   ÚhashÚcomparerj   r<   c                 ój   • [        U [        5      (       d  U /n Uc  0 nXS'   [        SUUUUUUUS.UD6$ )a  
Create a dataclass field with a custom validator.

Useful to apply several checks to a field. If only applying one rule, check out the [`as_validated_field`] decorator.

Args:
    validator (`Callable` or `list[Callable]`):
        A method that takes a value as input and raises ValueError/TypeError if the value is invalid.
        Can be a list of validators to apply multiple checks.
    **kwargs:
        Additional arguments to pass to `dataclasses.field()`.

Returns:
    A field with the validator attached in metadata
r-   ©rC   rD   r™   rr   rš   r›   rj   r   )rk   rl   r   )	r-   rC   rD   r™   rr   rš   r›   rj   r<   s	            r$   Úvalidated_fieldrž     s\   € ô4 �i¤×&Ñ&Ø�Kˆ	ØÑØˆØ%ˆ[ÑÜð 	ØØ'ØØØØØñ	ð ñ	ð 	r&   c                 óÔ   ^ • [         [         SSSSS4S[        [        -  S[        / [        4   [        -  S[        S[        S[        S-  S[        S	[
        S-  S
[        4U 4S jjjnU$ )zô
Decorates a validator function as a [`validated_field`] (i.e. a dataclass field with a custom validator).

Args:
    validator (`Callable`):
        A method that takes a value as input and raises ValueError/TypeError if the value is invalid.
TNrC   rD   r™   rr   rš   r›   rj   r<   c                 ó,   >• [        T4U UUUUUUS.UD6$ )Nr�   )rž   )	rC   rD   r™   rr   rš   r›   rj   r<   r-   s	           €r$   Ú_innerÚ"as_validated_field.<locals>._inner³  s9   ø€ ô Øð

àØ+ØØØØØñ

ð ñ

ð 
	
r&   )r   r   r   r   ÚboolÚdict)r-   r¡   s   ` r$   Úas_validated_fieldr¥   ª  s’   ø€ ô (/Ü=DØØØ ØØ $ñ
Ü”}Ñ$ð
ä! "¤c 'Ñ*¬]Ñ:ð
ô ð
ô ð	
ô
 �T‰kð
ô ð
ô ˜‘+ð
ô ÷
ð 
ð, €Mr&   r0   r1   Úexpected_typec                 ó  • [        U5      n[        U5      nU[        L a  gUc  [        X5        g[        R                  U5      =n(       a
  U" XU5        g[        U[        5      (       a  [        XU5        g[        U[        5      (       d  [        U[        5      (       a  gU[        L a(  U[        L a  [        SU  S35      e[        XUS   5        gU[        L a  U[        L a  g[        XUS   5        g[        SU  SU 35      e)z.Validate that 'value' matches 'expected_type'.NúField 'z' is required but missing.r   zUnsupported type for field 'r.   )r   r   r   Ú_validate_noneÚ_BASIC_TYPE_VALIDATORSr5   rk   r˜   Ú_validate_simple_typer   rp   r   r�   r7   Útype_validatorr   )r0   r1   r¦   r�   rF   r-   s         r$   r¬   r¬   Ì  sñ   € ä˜Ó&€FÜ�MÓ"€DàœÒØØ	Ñ	Ü�tÕ#Ü,×0Ñ0°Ó8Ð	8ˆÕ	8Ù�$˜tÕ$Ü	�M¤4×	(Ñ	(Ü˜d¨=Õ9Ü	�M¤:×	.Ñ	.´*¸]ÌC×2PÑ2PØØ	”8Ò	ØÔ-Ò-Ü˜g d VÐ+EÐFÓGÐGÜ�t D¨¡GÕ,Ø	”;Ò	ØÔ-Ò-ØÜ�t D¨¡GÕ,äÐ6°t°f¸CÀ¸ÐOÓPÐPr&   c                 óR   • Ub$  [        SU  S[        U5      R                   35      eg)z¦Validate None type.

'None' is not a type, it's a special value. Type should be `NoneType` instead.
But in type annotations 'None' is accepted so we must support it.
Nr¨   z' expected None, got )r7   r˜   rA   )r0   r1   s     r$   r©   r©   ç  s3   € ð ÑÜ˜' $ Ð'<¼TÀ%»[×=QÑ=QÐ<RÐSÓTÐTð r&   rF   .c                 óô   • / nU H  n [        XU5          g   [        SU  S[	        U5       SU SSR                  U5       35      e! [         a%  nUR                  [        U5      5         SnAMm  SnAff = f)z8Validate that value matches one of the types in a Union.Nr¨   z' with value z doesn't match any type in z
. Errors: z; )r¬   r7   rh   rp   rr   rW   )r0   r1   rF   ÚerrorsÚtr8   s         r$   Ú_validate_unionr±   ñ  s‡   € à€FÛˆð	"Ü˜4¨Ô*Ùñ ô Ø
�$��}¤T¨%£[ MÐ1LÈTÈFÐR\Ð]a×]fÑ]fÐgmÓ]nÐ\oÐpóð øô ó 	"Ø�M‰Mœ#˜a›&×!Ò!ûð	"ús   ‰AÁ
A7ÁA2Á2A7c                 óÔ  • [        U[        5      (       aB  X Vs/ s H  n[        U[        5      (       d  M  UPM     sn;  a  [        SU  SU SU 35      eg[        U[        5      (       aY  X Vs/ s H3  n[        U[        5      (       d  M  [        U[        5      (       a  M1  UPM5     sn;  a  [        SU  SU SU 35      egX;  a  [        SU  SU SU 35      egs  snf s  snf )zValidate Literal type.r¨   z' expected one of ú, got N)rk   r£   r7   Úint)r0   r1   rF   Úargs       r$   Ú_validate_literalr¶      sé   € ä�%œ×ÑØ¨ÓFª ´
¸3Ä×0EŸ©ÑFÓFÜ˜g d VÐ+=¸d¸VÀ6È%ÈÐQÓRÐRð Gä	�Eœ3×	Ñ	Ø¨Ócª ´
¸3Ä×0D›ÌZÐX[Ô]a×MbŸ©ÑcÓcÜ˜g d VÐ+=¸d¸VÀ6È%ÈÐQÓRÐRð dà	Ó	Ü˜' $ Ð'9¸$¸¸vÀeÀWÐMÓNÐNð 
ùò Gùò ds   šC ·C Á1C%ÂC%Â%C%c           	      ó  • [        U[        5      (       d$  [        SU  S[        U5      R                   35      eUS   n[        U5       H  u  pE [        U  SU S3XS5        M     g	! [         a  n[        SU SU  S35      UeS	nAff = f)
zValidate list[T] type.r¨   z' expected a list, got r   Ú[Ú]úInvalid item at index z
 in list 'r>   N)rk   rl   r7   r˜   rA   Ú	enumerater¬   ©r0   r1   rF   Ú	item_typeÚiÚitemr8   s          r$   Ú_validate_listrÀ     s�   € ä�eœT×"Ñ"Ü˜' $ Ð'>¼tÀE»{×?SÑ?SÐ>TÐUÓVÐVð �Q‘€IÜ˜UÖ#‰ˆð	RÜ˜d˜V 1 Q C q˜>¨4Ö;ò $øô ó 	RÜÐ4°Q°C°zÀ$ÀÀqÐIÓJÐPQÐQûð	Rús   ÁA'Á'
B	Á1BÂB	c                 ó:  • [        U[        5      (       d$  [        SU  S[        U5      R                   35      eUu  p4UR                  5        H(  u  pV [        U  S3XS5        [        U  SU< S3Xd5        M*     g! [         a  n[        SU  S35      UeSnAff = f)	zValidate dict[K, V] type.r¨   z' expected a dict, got z.keyr¸   r¹   zInvalid key or value in dict 'r>   N)rk   r¤   r7   r˜   rA   r?   r¬   )r0   r1   rF   Úkey_typeÚ
value_typerI   rJ   r8   s           r$   Ú_validate_dictrÄ     s§   € ä�eœT×"Ñ"Ü˜' $ Ð'>¼tÀE»{×?SÑ?SÐ>TÐUÓVÐVð  Ñ€HØ—‘–‰ˆð	MÜ˜d˜V 4˜=¨!Ô6Ü˜d˜V 1 Q¡E¨Ð+¨QÖ;ò øô ó 	MÜÐ<¸T¸FÀ!ÐDÓEÈ1ÐLûð	Mús   Á"A;Á;
BÂBÂBc           
      óx  • [        U[        5      (       d$  [        SU  S[        U5      R                   35      e[        U5      S:X  a7  US   [        L a+  [        U5       H  u  p4 [        U  SU S3XBS   5        M     g[        U5      [        U5      :w  a&  [        SU  S[        U5       S[        U5       35      e[        [        X5      5       H  u  nu  pF [        U  SU S3XF5        M     g! [         a  n[        SU S	U  S
35      UeSnAff = f! [         a  n[        SU S	U  S
35      UeSnAff = f)zValidate Tuple type.r¨   z' expected a tuple, got é   r   r¸   r¹   r   rº   z in tuple 'r>   Nz' expected a tuple of length r³   )
rk   rŒ   r7   r˜   rA   r@   ÚEllipsisr»   r¬   Úzip)r0   r1   rF   r¾   r¿   r8   Úexpecteds          r$   Ú_validate_tuplerÊ   )  sT  € ä�eœU×#Ñ#Ü˜' $ Ð'?ÄÀUÃ×@TÑ@TÐ?UÐVÓWÐWô ˆ4ƒy�Aƒ~˜$˜q™'¤XÒ-Ü  Ö'‰GˆAðWÜ $  q¨¨¨1˜~¨t¸!±WÖ=ò (ô 
ˆT‹”c˜%“jÓ	 Ü˜' $ Ð'DÄSÈÃYÀKÈvÔVYÐZ_ÓV`ÐUaÐbÓcÐcä#,¬S°Ó-=Ö#>ÑˆAÑ�ðWÜ $  q¨¨¨1˜~¨tÖ>ò $?øô ó WÜÐ"8¸¸¸;ÀtÀfÈAÐ NÓOÐUVÐVûðWûô ó WÜÐ"8¸¸¸;ÀtÀfÈAÐ NÓOÐUVÐVûðWús0   Á&C2ÃDÃ2
DÃ<DÄDÄ
D9Ä!D4Ä4D9c                 ó  • [        U[        5      (       d$  [        SU  S[        U5      R                   35      eUS   n[        U5       H  u  pE [        U  S3XS5        M     g! [         a  n[        SU  S35      UeSnAff = f)zValidate set[T] type.r¨   z' expected a set, got r   z itemzInvalid item in set 'r>   N)rk   Úsetr7   r˜   rA   r»   r¬   r¼   s          r$   Ú_validate_setrÍ   @  s�   € ä�eœS×!Ñ!Ü˜' $ Ð'=¼dÀ5»k×>RÑ>RÐ=SÐTÓUÐUð �Q‘€IÜ˜UÖ#‰ˆð	DÜ˜d˜V 5˜>¨4Ö;ò $øô ó 	DÜÐ3°D°6¸Ð;Ó<À!ÐCûð	Dús   ÁA$Á$
BÁ.A>Á>Bc           	      óP  • [        U[        R                  R                  5      (       d$  [	        SU  S[        U5      R                   35      eU(       d  gUS   n[        U5       H  u  pE [        U  SU S3XS5        M     g! [         a  n[	        SU SU  S	35      UeSnAff = f)
z&Validate Sequence or Sequence[T] type.r¨   z' expected a Sequence, got Nr   r¸   r¹   rº   z in sequence 'r>   )	rk   ÚcollectionsÚabcÚSequencer7   r˜   rA   r»   r¬   r¼   s          r$   Ú_validate_sequencerÒ   N  s¯   € ä�eœ[Ÿ_™_×5Ñ5×6Ñ6Ü˜' $ Ð'BÄ4ÈÃ;×CWÑCWÐBXÐYÓZÐZö Øð �Q‘€IÜ˜UÖ#‰ˆð	VÜ˜d˜V 1 Q C q˜>¨4Ö;ò $øô ó 	VÜÐ4°Q°C°~ÀdÀVÈ1ÐMÓNÐTUÐUûð	Vús   Á,BÂ
B%ÂB Â B%c                 óX  • U[         L aS  [        U[        5      (       a>  [        SU  SUR                   S[        U5      R                   S[        U5       S3	5      e[        X5      (       d>  [        SU  SUR                   S[        U5      R                   S[        U5       S3	5      eg)z&Validate simple type (int, str, etc.).r¨   z' expected r³   z	 (value: rU   N)r´   rk   r£   r7   rA   r˜   rr   )r0   r1   r¦   s      r$   r«   r«   `  s¶   € àœÒ¤
¨5´$× 7Ñ 7ÜØ�d�V˜; }×'=Ñ'=Ð&>¸fÄTÈ%Ã[×EYÑEYÐDZÐZcÔdhÐinÓdoÐcpÐpqÐró
ð 	
ô �e×+Ñ+ÜØ�d�V˜; }×'=Ñ'=Ð&>¸fÄTÈ%Ã[×EYÑEYÐDZÐZcÔdhÐinÓdoÐcpÐpqÐró
ð 	
ð ,r&   r   c                 ó(   ^ • S[         SS4U 4S jjnU$ )z-Create a type validator function for a field.r1   r!   Nc                 óH   >• [        TR                  U TR                  5        g r#   )r¬   r0   r˜   )r1   r   s    €r$   r-   Ú)_create_type_validator.<locals>.validatorp  s   ø€ Ü�u—z‘z 5¨%¯*©*Õ5r&   )r   )r   r-   s   ` r$   ri   ri   l  s   ø€ ð6œð 6 ÷ 6ð Ðr&   c                 óâ  • [        U 5      (       d  g[        R                  " U 5      n[        UR                  R                  5       5      n[        U5      S:X  a  gUS   R                  [        R                  R                  [        R                  R                  [        R                  R                  4;  a  gUSS  H-  nUR                  [        R                  R                  :X  d  M-    g   g)zìCheck if a function is a validator.

A validator is a Callable that can be called with a single positional argument.
The validator can have more arguments with default values.

Basically, returns True if `validator(value)` is possible.
Fr   r   NT)rv   rw   rx   rl   ry   Úvaluesr@   ÚkindÚ	ParameterÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYÚVAR_POSITIONALrC   Úempty)r-   rx   ry   Ú	parameters       r$   rm   rm   v  sÅ   € ô �I×ÑØä×!Ò! )Ó,€IÜ�i×*Ñ*×1Ñ1Ó3Ó4€JÜ
ˆ:ƒ˜!ÓØØ�!�}×ÑÜ×Ñ×/Ñ/Ü×Ñ×)Ñ)Ü×Ñ×(Ñ(ð"ó ð
 Ø  “^ˆ	Ø×Ñ¤× 1Ñ 1× 7Ñ 7Õ7Ùñ $ð r&   Ú	type_hintc                 ó^   • U [         [        4;   =(       d    [        U 5      [         [        4;   $ )z2Helper to check if a type is Required/NotRequired.)r   r   r   )rà   s    r$   r‹   r‹   ‘  s'   € àœ¤;Ð/Ñ/×e´J¸yÓ4IÌhÔXcÐMdÑ4dÐer&   rª   )r%   r‡   rž   ÚValidator_Tr   r   r   r#   )GÚcollections.abcrÏ   rw   Útypesr   Údataclassesr   r   r   r   r   r	   Ú	functoolsr
   r   Útypingr   r   r   r   r   r   r   r   r   r   r   r   r—   Útyping_extensionsr˜   r¯   r   r   r   râ   r   r¤   rp   r   Úobjectr�   r%   r£   r‡   r…   rŠ   rl   rž   r¥   r¬   r©   rŒ   r±   r¶   rÀ   rÄ   rÊ   rÍ   rÒ   r«   ri   rm   r‹   rÌ   rÐ   rÑ   rª   r”   Ú	UnionTypeÚ__all__r   r&   r$   Ú<module>rì      sÑ  ðÜ Û Û Ý $ß T× Tß &÷÷ ÷ ð
2ç,÷ñ ð ˜�u˜d�{Ñ#€ÙˆCƒL€Ù˜¨t°C¸°H©~Ñ>€á"›HÐ ð 
Ø (��Q‘Ð (˜D ™GÓ (ó 
Ø (ð 
Ø$)Ò O˜TÐ O¨h¸¸Q¹°yÀ$ÀqÁ'Ð7IÑ.JÔ Oó 
Ø Oðc2Àò c2��Q‘˜$‘ð c2¸ð c2È$ÈqÉ'ÐT\Ð^bÐcdÑ^eÐ]fÐhlÐmnÑhoÐ]oÑTpÑJpö c2ðL/  ]Ñ 3ð /¸4ð /ÀDô /ðd ð;¨d°=Ñ.Að ;Àdó ;ó ð;ð<
¨¨]Ñ(;ð 
ÀÀSÈ#ÀXÁô 
ð$ $+Ø9@ØØØØØ ñ(Ø�KÑ  ;Ñ.ð(à�=Ñ ð(ð ˜b #˜gÑ&¨Ñ6ð(ð ð	(ð
 ð(ð �‰+ð(ð ð(ð �T‰kð(ð ð(ð 	õ(ðV +ô ðDQ˜ð Q Sð Q¸ð QÀô Qð6U˜ð U Sð U¨Tô Uð˜#ð  cð °°s¸C°x±ð ÀTô ð	O˜Cð 	O¨ð 	O°5¸¸c¸±?ð 	OÀtô 	OðR˜ð R Sð R°°c¸3°h±ð RÀDô RðM˜ð M Sð M°°c¸3°h±ð MÀDô MðW˜#ð W cð W°°s¸C°x±ð WÀTô Wð.D˜ð D Cð D¨u°S¸#°X©ð DÀ4ô DðV˜Sð V¨ð V°E¸#¸s¸(±Oð VÈô Vð$	
 ð 	
¨Cð 	
Àð 	
Èô 	
ð %ð ¨Kô ð˜Sð  Tô ð6f¨3ð f°4ô fð 
ˆ?ØÐØˆ.Øˆ.Ø	ˆ?ØˆØ‡O�O×ÑÐ0ðRÐ ˜˜S (¨C°°e¸CÀ¸H±oÐ+FÈÐ+LÑ"MÐMÑNó ð +:Ð �u—‘Ñ 'ò�øðY ó 2ð2ç;Ò;øØó 2á˜
 B¨Ó+ˆÙ˜=¨"¨bÓ1Œð2úð	2ús*   ÁI ÉJÉI$É$JÉ>JÊJÊJ