Ë
    -Œ:jTe  ã                   óÈ  — U d dl Zd dlZd dlZd dl mZ d dlmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZ 	 d dlmZmZ d
dlmZm Z m!Z! eegdf   Z" ed«      Z# ede$e%ef   ¬«      Z& e'«       Z(edee#   dee#   fd„«       Z)eddœde*deee#   gee#   f   fd„«       Z)d>ddœdee#   dz  de*dee#   eee#   gee#   f   z  fd„Z)dee&   de$ddfd„Z+edee&   defd„«       Z,dee&   de$e%ef   fd„Z-eedddddfde.e"   e"z  deded e*d!e*d"e*dz  d#e*d$e$dz  d%edefd&„Z/de"fd'„Z0d(e%d)ed*eddfd+„Z1d(e%d)eddfd,„Z2d(e%d)ed-e3ed.f   ddfd/„Z4d(e%d)ed-e3ed.f   ddfd0„Z5d(e%d)ed-e3ed.f   ddfd1„Z6d(e%d)ed-e3ed.f   ddfd2„Z7d(e%d)ed-e3ed.f   ddfd3„Z8d(e%d)ed-e3ed.f   ddfd4„Z9d(e%d)ed-e3ed.f   ddfd5„Z:d(e%d)ed*eddfd6„Z;d7ede"fd8„Z<dede*fd9„Z=d:ede*fd;„Z>ee4ee5e.e6e$e7e3e8e?e9ej€                  j‚                  e:iZBe$eee%ee3ed.f   gdf   f   eCd<<   e4eBejˆ                  <   g d=¢ZEy# e$ r- 	 d dlmZmZ n# e$ r  eddi «      Z ed	di «      ZY nw xY wY �Œw xY w)?é    N)ÚCallable)Ú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                  ó   — y ©Nr   )r   s    ú]/var/www/html/tokenscope/api/venv/lib/python3.12/site-packages/huggingface_hub/dataclasses.pyÚstrictr$   0   s   € Ø%(ó    F©Úaccept_kwargsr'   c                  ó   — y r"   r   r&   s    r#   r$   r$   4   s   € ØLOr%   c                ó\   ‡— dt         t           dt         t           fˆfd„}| � || «      S |S )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        ‰ d«      st        d‰ j                  › d�«      ‚i }t        ‰ «      D ]œ  }g }|j	                  t        |«      «       |j                  j                  d«      }|�Rt        |t        «      s|g}|D ])  }t        |«      rŒt        d|j                  › d|› d�«      ‚ |j                  |«       |||j                  <   Œž |‰ _        ‰ j                  Šdt        d	t         d
t        dd fˆfd„}|‰ _        ‰r”‰ j"                  }t%        |«      dt        dd fˆ fd„«       }|‰ _        t        ‰ d«      sdt        dd fd„}	|	‰ _        ‰ j(                  Št%        ‰«      dt         fˆ ˆfd„«       }
‰ j*                  j,                  du r|
‰ _        g }t/        ‰ «      D ]„  }|j1                  d«      sŒt3        ‰ |«      }t5        |«      sŒ-t7        t9        j:                  |«      j<                  «      dk7  rt        d‰ j                  › d|› d�«      ‚|j	                  |«       Œ† |‰ _        dt@        dd fˆ fd„}d|_!        t        ‰ d«      r0t3        ‰ jD                  dd«      st        d‰ j                  › d�«      ‚|‰ _"        ‰ j"                  Št%        ‰«      dˆ ˆfd„«       }tG        ‰ d|«       ‰ S )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                 ó¸   •— | j                   j                  |g «      D ]  }	  ||«       Œ  ‰| ||«       y# t        t        f$ r}t	        ||¬«      |‚d}~ww xY w)z1Custom __setattr__ method for strict dataclasses.)r   ÚcauseN)Ú__validators__ÚgetÚ
ValueErrorÚ	TypeErrorr   )r.   r/   r0   r,   ÚeÚoriginal_setattrs        €r#   Ú__strict_setattr__z0strict.<locals>.wrap.<locals>.__strict_setattr__‹   so   ø€ ð "×0Ñ0×4Ñ4°T¸2Ó>ò Z�	ðZÙ˜eÕ$ðZñ ˜T 4¨Õ/øô	 #¤IÐ.ò ZÜ=ÀDÐPQÔRÐXYÐYûðZús   ¢7·AÁAÁAÚkwargsc                 ó  •— t        ‰«      D �ch c]  }|j                  ’Œ }}|j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}t        |«      dkD  r%t	        d‰j
                  › dt        |«      › d�«      ‚t        ‰«      D ]¹  }|j                  |v r%t        | |j                  ||j                     «       Œ6|j                  t        ur"t        | |j                  |j                  «       Œj|j                  t        ur&t        | |j                  |j                  «       «       Œ¢t        d|j                  › d�«      ‚ i }|j                  «       D ]  \  }	}
|	|vsŒ|
||	<   Œ  | j                  di |¤Ž y c c}w c c}}w )Nr   zWhen `accept_kwargs=True`, z, accepts only keyword arguments, but found `z` positional args.zMissing required field - 'ú'r   )r   r/   ÚitemsÚlenr5   Ú__name__ÚsetattrÚdefaultr   Údefault_factoryr6   Ú__post_init__)r.   Úargsr:   ÚfÚdataclass_fieldsÚkÚvÚstandard_kwargsÚadditional_kwargsr/   r0   r   s              €r#   Ú__init__z&strict.<locals>.wrap.<locals>.__init__�   sw  ø€ ô 5;¸3³KÖ#@¨q A§F£FÐ#@Ð Ð#@Ø4:·L±L³N×"\©D¨A¨qÀaÐK[ÒF[ 1 a¡4Ð"\�Ñ"\ô �t“9˜q’=Ü$Ø5°c·l±l°^ð D&Ü&)¨$£i [Ð0BðDóð ô
   ›ò P�AØ—v‘v Ñ0Ü  a§f¡f¨o¸a¿f¹fÑ.EÕFØŸ™¬'Ñ1Ü  a§f¡f¨a¯i©iÕ8Ø×*Ñ*´'Ñ9Ü  a§f¡f¨a×.?Ñ.?Ó.AÕBä'Ð*DÀQÇVÁVÀHÈAÐ(NÓOÐOðPð %'Ð!Ø#)§<¡<£>ò 8‘K�D˜%ØÐ#3Ò3Ø27Ð)¨$Ò/ð8ð #�×"Ñ"Ñ7Ð%6Ó7ùò= $AùÛ"\s   �E=·FÁFrC   c                 óN   — |j                  «       D ]  \  }}t        | ||«       Œ y)z2Default __post_init__ to accept additional kwargs.N)r=   r@   )r.   r:   r/   r0   s       r#   rC   z+strict.<locals>.wrap.<locals>.__post_init__Å   s'   € à'-§|¡|£~ò 3™˜˜eÜ  d¨EÕ2ñ3r%   c                 óà   •—  ‰| «      }| j                   j                  «       D ��cg c]  \  }}|‰j                  vrd|› d|›�‘Œ }}}dj                  |«      }|r|d d › d|› d�S |S c c}}w )NÚ*ú=z, éÿÿÿÿú))Ú__dict__r=   r+   Újoin)r.   Ústandard_reprrG   rH   rJ   Úadditional_reprr   Úoriginal_reprs         €€r#   Ú__repr__z&strict.<locals>.wrap.<locals>.__repr__Ï   sš   ø€ ñ !.¨dÓ 3�ð !%§¡× 3Ñ 3Ó 5÷%ñ ˜˜1Ø × 8Ñ 8Ñ8ð ˜�s˜!˜A˜5’Mð%Ð!ñ %ð #'§)¡)Ð,=Ó">�ñ GX˜-¨¨Ð,Ð-¨R°Ð/@ÀÐBÐjÐ]jÐjùó%s   § A*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                 ó˜   •— ‰j                   D ]  }	  || «       Œ y# t        t        f$ r}t        |j                  |¬«      |‚d}~ww xY w)z%Run class validators on the instance.)r,   r2   N)Ú__class_validators__r5   r6   r   r?   )r.   r,   r7   r   s      €r#   Úvalidatez&strict.<locals>.wrap.<locals>.validate÷   sW   ø€ à ×5Ñ5ò l�	ðlÙ˜d•Oñløô #¤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                 ó@   •—  ‰| g|¢­i |¤Ž ‰j                  | «       y)z*Run class validators after initialization.N)r[   )r.   rD   r:   r   Úinitial_inits      €€r#   Úinit_with_validatez0strict.<locals>.wrap.<locals>.init_with_validate  s#   ø€ ñ ˜Ð/ Ò/¨Ò/Ø�L‰L˜Õr%   rK   )r    N)$Úhasattrr   r?   r   ÚappendÚ_create_type_validatorÚmetadatar4   Ú
isinstanceÚlistÚ_is_validatorr/   Úextendr3   Ú__setattr__r   ÚstrrK   r
   rC   rW   Ú__dataclass_params__ÚreprÚdirÚ
startswithÚgetattrÚcallabler>   ÚinspectÚ	signatureÚ
parametersrZ   r   r\   r[   r@   )r   Úfield_validatorsrE   Ú
validatorsÚcustom_validatorr,   r9   Úoriginal_initrK   rC   rW   Úclass_validatorsr/   Úmethodr[   r_   r^   rV   r8   r'   s   `               @@@€r#   Úwrapzstrict.<locals>.wrapp   s  ü€ Ü�sÐ2Ô3Ü0Ø˜#Ÿ,™,˜Ð'UÐVóð ð
 :<ÐÜ˜“ò 	2ˆAØˆJØ×ÑÔ4°QÓ7Ô8Ø Ÿz™zŸ~™~¨kÓ:ÐØÐ+Ü!Ð"2´DÔ9Ø(8Ð'9Ð$Ø!1ò �IÜ(¨Õ3Ü<Ø;¸A¿F¹F¸8À3ÀyÀkÐQð  Aóð ðð
 ×!Ñ!Ð"2Ô3Ø'1Ð˜QŸV™VÒ$ð	2ð .ˆÔð Ÿ?™?Ðð
	0¤Sð 
	0´ð 
	0¼Cð 
	0ÀDõ 
	0ð -ˆŒáàŸL™LˆMä�=Ó!ð 8´ð  8¸ô  8ó "ð 8ðD $ˆCŒLô ˜3 Ô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Ü4Ø˜cŸl™l˜^ð ,Nð Nóð ð  ˆŒð —|‘|ˆä	ˆ|Ó	õ	ó 
ð	ô
 	��ZÐ!3Ô4àˆ
r%   )r   r   )r   r'   ry   s    ` r#   r$   r$   8   s8   ø€ ðph”$”q‘'ð hœd¤1™gõ hðV ˜‰4�‹9Ð1¨TÐ1r%   ÚschemaÚdatac                 ó*   — t        | «      } |di |¤Ž y)aî  
    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)rz   r{   Ú
strict_clss      r#   Úvalidate_typed_dictr     s   € ôX 3°6Ó:€Jñ Ñ�Ór%   c                 óˆ  — t        | «      }t        | dd«      s‡|j                  «       D ]t  \  }}t        |«      }|t        u rDt        |«      ^}}t        |«      s	t        |   }t        t        |gt        |«      z   «         ||<   Œ]t        |«      rŒit        |   ||<   Œv g }|j                  «       D ]p  \  }}t        |«      t        u r7t        |«      ^}} |j                  ||t        t        d|d   i¬«      f«       ŒN |j                  ||t        t        ¬«      f«       Œr t        t        | j                  |«      «      S )NÚ	__total__Tr,   r   )rA   rc   )rA   )Ú_get_typed_dict_annotationsrn   r=   r   r   r   Ú_is_required_or_notrequiredr   Útuplere   ra   r   Ú_TYPED_DICT_DEFAULT_VALUEr$   r   r?   )rz   Ú
type_hintsÚkeyr0   ÚoriginÚbaseÚmetar   s           r#   r}   r}   P  s9  € ô -¨VÓ4€Jô �6˜;¨Ô-Ø$×*Ñ*Ó,ò 		5‰JˆC�Ü Ó&ˆFàœÑ"Ü& u›o���tÜ2°4Ô8Ü& tÑ,�DÜ"+¬E°4°&¼4À»:Ñ2EÓ,FÑ"G�
˜3’Ü0°Õ7Ü"-¨eÑ"4�
˜3’ð		5ð €FØ ×&Ñ&Ó(ò R‰
ˆˆUÜ�eÓ¤	Ñ)Ü" 5›/ˆKˆD�4ØˆF�M‰M˜3 ¤eÔ4MÐYdÐfjÐklÑfmÐXnÔ&oÐpÕqàˆF�M‰M˜3 ¤uÔ5NÔ'OÐPÕQðRô ”. §¡°&Ó9Ó:Ð:r%   c           	      óð   — 	 ddl }|j                  | «      S # t        $ rU | j                  j	                  di «      j                  «       D ��ci c]  \  }}||�|n
t        d«      “Œ nc c}}w c}}cY S w xY w)z0Extract type annotations from a TypedDict class.r   NÚ__annotations__)ÚannotationlibÚget_annotationsÚImportErrorrR   r4   r=   Útype)rz   r�   r/   r0   s       r#   r‚   r‚   o  s}   € ð
ãà×,Ñ,¨VÓ4Ð4øÜò 
ð
  &Ÿ™×2Ñ2Ð3DÀbÓI×OÑOÓQ÷	
ñ ��eð ˜5Ð,‘%´$°t³*Ñ<ñ
ùö 
ò 	
ð
ús   ‚ —6A5ÁA(Á'A5Á4A5Tr,   rA   rB   Úinitrk   ÚhashÚcomparerc   r:   c                 ó`   — t        | t        «      s| g} |€i }| |d<   t        d|||||||dœ|¤ŽS )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,   ©rA   rB   r‘   rk   r’   r“   rc   r   )rd   re   r   )	r,   rA   rB   r‘   rk   r’   r“   rc   r:   s	            r#   Úvalidated_fieldr–     s[   € ô4 �i¤Ô&Ø�Kˆ	ØÐØˆØ%€Hˆ[ÑÜð 	ØØ'ØØØØØñ	ð ñ	ð 	r%   c                 ó    ‡ — t         t         dddddfdt        dt        dt        dt        dt        dz  dt        d	t        dz  d
t        fˆ fd„}|S )a  
    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.
    TNrA   rB   r‘   rk   r’   r“   rc   r:   c                 ó,   •— t        ‰f| ||||||dœ|¤ŽS )Nr•   )r–   )	rA   rB   r‘   rk   r’   r“   rc   r:   r,   s	           €r#   Ú_innerz"as_validated_field.<locals>._inner³  s9   ø€ ô Øð

àØ+ØØØØØñ

ð ñ

ð 
	
r%   )r   r   ÚboolÚdict)r,   r™   s   ` r#   Úas_validated_fieldrœ   ª  sz   ø€ ô Ü&ØØØ ØØ $ñ
Üð
äð
ô ð
ô ð	
ô
 �T‰kð
ô ð
ô ˜‘+ð
ô õ
ð, €Mr%   r/   r0   Úexpected_typec                 óæ  — t        |«      }t        |«      }|t        u ry|€t        | |«       yt        j                  |«      x}r || ||«       yt        |t        «      rt        | ||«       yt        |t        «      st        |t        «      ry|t        u r(|t        u rt        d| › d�«      ‚t        | ||d   «       y|t        u r|t        u ryt        | ||d   «       yt        d| › d|› �«      ‚)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_VALIDATORSr4   rd   r�   Ú_validate_simple_typer   ri   r   r…   r6   Útype_validatorr   )r/   r0   r�   rˆ   rD   r,   s         r#   r£   r£   Ì  sò   € ä˜Ó&€FÜ�MÓ"€DàœÑØØ	Ð	Ü�t˜UÕ#Ü,×0Ñ0°Ó8Ð	8ˆÐ	8Ù�$˜˜tÕ$Ü	�M¤4Ô	(Ü˜d E¨=Õ9Ü	�M¤:Ô	.´*¸]ÌCÔ2PØØ	”8Ñ	ØÔ-Ñ-Ü˜g d VÐ+EÐFÓGÐGÜ�t˜U D¨¡GÕ,Ø	”;Ñ	ØÔ-Ñ-ØÜ�t˜U D¨¡GÕ,äÐ6°t°f¸CÀ¸ÐOÓPÐPr%   c                 óP   — |�$t        d| › dt        |«      j                  › �«      ‚y)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 )r6   r�   r?   )r/   r0   s     r#   r    r    ç  s3   € ð ÐÜ˜' $ Ð'<¼TÀ%»[×=QÑ=QÐ<RÐSÓTÐTð r%   rD   .c                 óð   — g }|D ]  }	 t        | ||«        y t        d| › dt	        |«      › d|› ddj                  |«      › �«      ‚# t        $ r$}|j                  t        |«      «       Y d}~Œkd}~ww xY w)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£   r6   ra   ri   rk   rS   )r/   r0   rD   ÚerrorsÚtr7   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Á	A5ÁA0Á0A5c                 óŠ  — t        |t        «      r8||D �cg c]  }t        |t        «      sŒ|‘Œ c}vrt        d| › d|› d|› �«      ‚yt        |t        «      rI||D �cg c]&  }t        |t        «      sŒt        |t        «      rŒ%|‘Œ( c}vrt        d| › d|› d|› �«      ‚y||vrt        d| › d|› d|› �«      ‚yc c}w c c}w )zValidate Literal type.rŸ   z' expected one of ú, got N)rd   rš   r6   Úint)r/   r0   rD   Ú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à	�dÑ	Ü˜' $ Ð'9¸$¸¸vÀeÀWÐMÓNÐNð 
ùò Gùò ds   –B;¬B;ÁC Á4C ÂC c           	      ó  — t        |t        «      s$t        d| › dt        |«      j                  › �«      ‚|d   }t        |«      D ]  \  }}	 t        | › d|› d�||«       Œ y	# t        $ r}t        d|› d| › d�«      |‚d	}~ww xY w)
zValidate list[T] type.rŸ   z' expected a list, got r   ú[ú]úInvalid item at index z
 in list 'r<   N)rd   re   r6   r�   r?   Ú	enumerater£   ©r/   r0   rD   Ú	item_typeÚiÚitemr7   s          r#   Ú_validate_listr·     s¥   € ä�eœTÔ"Ü˜' $ Ð'>¼tÀE»{×?SÑ?SÐ>TÐUÓVÐVð �Q‘€IÜ˜UÓ#ò R‰ˆˆ4ð	RÜ˜d˜V 1 Q C q˜>¨4°Õ;ñRøô ò 	RÜÐ4°Q°C°zÀ$ÀÀqÐIÓJÐPQÐQûð	Rús   ÁA"Á"	BÁ+A>Á>Bc                 ó0  — t        |t        «      s$t        d| › dt        |«      j                  › �«      ‚|\  }}|j                  «       D ])  \  }}	 t        | › d�||«       t        | › d|›d�||«       Œ+ y# t        $ r}t        d| › d�«      |‚d}~ww xY w)	zValidate dict[K, V] type.rŸ   z' expected a dict, got z.keyr¯   r°   zInvalid key or value in dict 'r<   N)rd   r›   r6   r�   r?   r=   r£   )r/   r0   rD   Úkey_typeÚ
value_typerG   rH   r7   s           r#   Ú_validate_dictr»     s³   € ä�eœTÔ"Ü˜' $ Ð'>¼tÀE»{×?SÑ?SÐ>TÐUÓVÐVð  Ñ€HˆjØ—‘“ò M‰ˆˆ1ð	MÜ˜d˜V 4˜=¨!¨XÔ6Ü˜d˜V 1 Q E¨Ð+¨Q°
Õ;ñMøô ò 	MÜÐ<¸T¸FÀ!ÐDÓEÈ1ÐLûð	Mús   Á#A7Á7	BÂ BÂBc           
      óf  — t        |t        «      s$t        d| › dt        |«      j                  › �«      ‚t        |«      dk(  r6|d   t        u r+t        |«      D ]  \  }}	 t        | › d|› d�||d   «       Œ yt        |«      t        |«      k7  r&t        d| › dt        |«      › dt        |«      › �«      ‚t        t        ||«      «      D ]  \  }\  }}	 t        | › d|› d�||«       Œ y# t        $ r}t        d|› d	| › d
�«      |‚d}~ww xY w# t        $ r}t        d|› d	| › d
�«      |‚d}~ww xY w)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ª   )
rd   r„   r6   r�   r?   r>   ÚEllipsisr²   r£   Úzip)r/   r0   rD   rµ   r¶   r7   Úexpecteds          r#   Ú_validate_tuplerÁ   )  si  € ä�eœUÔ#Ü˜' $ Ð'?ÄÀUÃ×@TÑ@TÐ?UÐVÓWÐWô ˆ4ƒy�A‚~˜$˜q™'¤XÑ-Ü  Ó'ò 	W‰GˆAˆtðWÜ $  q¨¨¨1˜~¨t°T¸!±WÕ=ñ	Wô 
ˆT‹”c˜%“jÒ	 Ü˜' $ Ð'DÄSÈÃYÀKÈvÔVYÐZ_ÓV`ÐUaÐbÓcÐcä#,¬S°¸Ó-=Ó#>ò 	WÑˆAÑ��hðWÜ $  q¨¨¨1˜~¨t°XÕ>ñ	Wøô ò WÜÐ"8¸¸¸;ÀtÀfÈAÐ NÓOÐUVÐVûðWûô ò WÜÐ"8¸¸¸;ÀtÀfÈAÐ NÓOÐUVÐVûðWús0   Á C+ÃDÃ+	DÃ4DÄDÄ	D0ÄD+Ä+D0c                 ó   — t        |t        «      s$t        d| › dt        |«      j                  › �«      ‚|d   }t        |«      D ]  \  }}	 t        | › d�||«       Œ y# t        $ r}t        d| › d�«      |‚d}~ww xY w)zValidate set[T] type.rŸ   z' expected a set, got r   z itemzInvalid item in set 'r<   N)rd   Úsetr6   r�   r?   r²   r£   r³   s          r#   Ú_validate_setrÄ   @  s˜   € ä�eœSÔ!Ü˜' $ Ð'=¼dÀ5»k×>RÑ>RÐ=SÐTÓUÐUð �Q‘€IÜ˜UÓ#ò D‰ˆˆ4ð	DÜ˜d˜V 5˜>¨4°Õ;ñDøô ò 	DÜÐ3°D°6¸Ð;Ó<À!ÐCûð	Dús   ÁAÁ	A=Á(A8Á8A=c           	      ó:  — t        |t        j                  j                  «      s$t	        d| › dt        |«      j                  › �«      ‚|sy|d   }t        |«      D ]  \  }}	 t        | › d|› d�||«       Œ y# t        $ r}t	        d|› d| › d	�«      |‚d}~ww xY w)
z&Validate Sequence or Sequence[T] type.rŸ   z' expected a Sequence, got Nr   r¯   r°   r±   z in sequence 'r<   )	rd   ÚcollectionsÚabcÚSequencer6   r�   r?   r²   r£   r³   s          r#   Ú_validate_sequencerÉ   N  s·   € ä�eœ[Ÿ_™_×5Ñ5Ô6Ü˜' $ Ð'BÄ4ÈÃ;×CWÑCWÐBXÐYÓZÐZñ Øð �Q‘€IÜ˜UÓ#ò V‰ˆˆ4ð	VÜ˜d˜V 1 Q C q˜>¨4°Õ;ñVøô ò 	VÜÐ4°Q°C°~ÀdÀVÈ1ÐMÓNÐTUÐUûð	Vús   Á#A9Á9	BÂBÂBc                 óD  — |t         u rNt        |t        «      r>t        d| › d|j                  › dt        |«      j                  › dt        |«      › d�	«      ‚t        ||«      s>t        d| › d|j                  › dt        |«      j                  › dt        |«      › d�	«      ‚y)z&Validate simple type (int, str, etc.).rŸ   z' expected rª   z	 (value: rQ   N)r«   rd   rš   r6   r?   r�   rk   )r/   r0   r�   s      r#   r¢   r¢   `  s²   € àœÑ¤
¨5´$Ô 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                 ó$   ‡ — dt         ddfˆ fd„}|S )z-Create a type validator function for a field.r0   r    Nc                 óH   •— t        ‰j                  | ‰j                  «       y r"   )r£   r/   r�   )r0   r   s    €r#   r,   z)_create_type_validator.<locals>.validatorp  s   ø€ Ü�u—z‘z 5¨%¯*©*Õ5r%   )r   )r   r,   s   ` r#   rb   rb   l  s   ø€ ð6œð 6 õ 6ð Ðr%   c                 óÊ  — t        | «      syt        j                  | «      }t        |j                  j                  «       «      }t        |«      dk(  ry|d   j                  t        j                  j                  t        j                  j                  t        j                  j                  fvry|dd D ]+  }|j                  t        j                  j                  k(  sŒ+ y y)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)ro   rp   rq   re   rr   Úvaluesr>   ÚkindÚ	ParameterÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYÚVAR_POSITIONALrA   Úempty)r,   rq   rr   Ú	parameters       r#   rf   rf   v  sÇ   € ô �IÔØä×!Ñ! )Ó,€IÜ�i×*Ñ*×1Ñ1Ó3Ó4€JÜ
ˆ:ƒ˜!ÒØØ�!�}×ÑÜ×Ñ×/Ñ/Ü×Ñ×)Ñ)Ü×Ñ×(Ñ(ð"ñ ð
 Ø  �^ò ˆ	Ø×Ñ¤× 1Ñ 1× 7Ñ 7Ó7Ùðð r%   Ú	type_hintc                 óP   — | t         t        fv xs t        | «      t         t        fv S )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"   )FÚcollections.abcrÆ   rp   Útypesr   Údataclassesr   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›   ri   r   Úobjectr…   r$   rš   r   r}   r‚   re   r–   rœ   r£   r    r„   r¨   r­   r·   r»   rÁ   rÄ   rÉ   r¢   rb   rf   rƒ   rÃ   rÇ   rÈ   r¡   rŒ   Ú	UnionTypeÚ__all__r   r%   r#   ú<module>râ      s¾  ðÜ Û Û Ý $ß EÕ Eß &÷÷ ÷ ð
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Áó 
ð$ Ø"ØØØØØ ñ(Ø�KÑ  ;Ñ.ð(àð(ð ð(ð ð	(ð
 ð(ð �‰+ð(ð ð(ð �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ús6   ÁH/ È/I!È5H>È=I!È>IÉI!ÉIÉI!É I!