§
    X›j¿e  ã                   óž  — 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
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 n:# e$ r2 	 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 nw xY w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ez  deg ef         ez  d e+d!e+d"e+dz  d#e+d$e%dz  d%edefd&„Z0de#fd'„Z1d(e&d)ed*eddfd+„Z2d(e&d)eddfd,„Z3d(e&d)ed-e4ed.f         ddfd/„Z5d(e&d)ed-e4ed.f         ddfd0„Z6d(e&d)ed-e4ed.f         ddfd1„Z7d(e&d)ed-e4ed.f         ddfd2„Z8d(e&d)ed-e4ed.f         ddfd3„Z9d(e&d)ed-e4ed.f         ddfd4„Z:d(e&d)ed-e4e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e5ee6e/e7e%e8e4e9e@e:ejA        jB        e;iZCe%eee&ee4ed.f         gdf         f         eDd<<   e5eCejE        <   g d=¢ZFdS )?é    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                 ó   — d S ©Nr   )r    s    úX/home/lighthouse/health/venv/lib/python3.11/site-packages/huggingface_hub/dataclasses.pyÚstrictr%   0   s   € Ø%( Só    F©Úaccept_kwargsr(   c                 ó   — d S r#   r   r'   s    r$   r%   r%   4   s   € ØLOÈCr&   c                óv   ‡— dt           t                   dt           t                   fˆfd„}| � || ¦  «        n|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 }|                     t          |¦  «        ¦  «         |j                             d¦  «        }|�\t          |t          ¦  «        s|g}|D ],}t          |¦  «        st          d|j        › d|› d�¦  «        ‚Œ-|                     |¦  «         |||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 ]’}|                     d¦  «        sŒt3          ‰ |¦  «        }t5          |¦  «        sŒ8t7          t9          j        |¦  «        j        ¦  «        dk    rt          d‰ j        › d|› d�¦  «        ‚|                     |¦  «         Œ“|‰ _        dt@          dd fˆ fd„}d|_!        t          ‰ d¦  «        r.t3          ‰ j"        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                              |g ¦  «        D ]9}	  ||¦  «         Œ# t          t          f$ r}t	          ||¬¦  «        |‚d}~ww xY w ‰| ||¦  «         dS )z1Custom __setattr__ method for strict dataclasses.)r   ÚcauseN)Ú__validators__ÚgetÚ
ValueErrorÚ	TypeErrorr   )r/   r0   r1   r-   ÚeÚoriginal_setattrs        €r$   Ú__strict_setattr__z0strict.<locals>.wrap.<locals>.__strict_setattr__‹   sž   ø€ ð "Ô0×4Ò4°T¸2Ñ>Ô>ð Zð Z�	ðZØ�I˜eÑ$Ô$Ð$Ð$øÝ"¥IÐ.ð Zð Zð ZÝ=ÀDÐPQÐRÑRÔRÐXYÐYøøøøðZøøøð Ð˜T 4¨Ñ/Ô/Ð/Ð/Ð/s    ,¬A½AÁAÚkwargsc                 óÀ  •‡— d„ t          ‰	¦  «        D ¦   «         Šˆfd„|                     ¦   «         D ¦   «         }t          |¦  «        dk    r(t          d‰	j        › dt          |¦  «        › d�¦  «        ‚t          ‰	¦  «        D ]¥}|j        |v r"t          | |j        ||j                 ¦  «         Œ-|j        t          urt          | |j        |j        ¦  «         ŒW|j	        t          ur)t          | |j        | 	                    ¦   «         ¦  «         ŒŽt          d|j        › d�¦  «        ‚i }|                     ¦   «         D ]\  }}|‰vr|||<   Œ | j        d	i |¤Ž d S )
Nc                 ó   — h | ]	}|j         ’Œ
S r   )r0   )Ú.0Úfs     r$   ú	<setcomp>z9strict.<locals>.wrap.<locals>.__init__.<locals>.<setcomp>    s   € Ð#@Ð#@Ð#@¨q A¤FÐ#@Ð#@Ð#@r&   c                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS r   r   )r>   ÚkÚvÚdataclass_fieldss      €r$   ú
<dictcomp>z:strict.<locals>.wrap.<locals>.__init__.<locals>.<dictcomp>¡   s*   ø€ Ð"\Ð"\Ð"\©D¨A¨qÀaÐK[ÐF[ÐF[ 1 aÐF[ÐF[ÐF[r&   r   zWhen `accept_kwargs=True`, z, accepts only keyword arguments, but found `z` positional args.zMissing required field - 'ú'r   )r   ÚitemsÚlenr6   Ú__name__r0   ÚsetattrÚdefaultr   Údefault_factoryr7   Ú__post_init__)
r/   Úargsr;   Ústandard_kwargsr?   Úadditional_kwargsr0   r1   rD   r    s
           @€r$   Ú__init__z&strict.<locals>.wrap.<locals>.__init__�   s¨  øø€ ð $AÐ#@µF¸3±K´KÐ#@Ñ#@Ô#@Ð Ø"\Ð"\Ð"\Ð"\°F·L²L±N´NÐ"\Ñ"\Ô"\�õ �t‘9”9˜q’=�=Ý$ðD°c´lð Dð DÝ&)¨$¡i¤iðDð Dð Dñô ð õ
   ™œð Pð P�AØ”v Ð0Ð0Ý  a¤f¨o¸a¼fÔ.EÑFÔFÐFÐFØœ­'Ð1Ð1Ý  a¤f¨a¬iÑ8Ô8Ð8Ð8ØÔ*µ'Ð9Ð9Ý  a¤f¨a×.?Ò.?Ñ.AÔ.AÑBÔBÐBÐBå'Ð(NÀQÄVÐ(NÐ(NÐ(NÑOÔOÐOð %'Ð!Ø#)§<¢<¡>¤>ð 8ð 8‘K�D˜%ØÐ#3Ð3Ð3Ø27Ð)¨$Ñ/øà"�Ô"Ð7Ð7Ð%6Ð7Ð7Ð7Ð7Ð7r&   rM   c                 ó\   — |                      ¦   «         D ]\  }}t          | ||¦  «         ŒdS )z2Default __post_init__ to accept additional kwargs.N)rG   rJ   )r/   r;   r0   r1   s       r$   rM   z+strict.<locals>.wrap.<locals>.__post_init__Å   s<   € à'-§|¢|¡~¤~ð 3ð 3™˜˜eÝ  d¨EÑ2Ô2Ð2Ð2ð3ð 3r&   c                 ó¶   •—  ‰| ¦  «        }ˆfd„| j                              ¦   «         D ¦   «         }d                     |¦  «        }|r|d d…         › d|› d�n|S )Nc                 ó8   •— g | ]\  }}|‰j         v¯d |› d|›�‘ŒS )Ú*ú=)r,   )r>   rB   rC   r    s      €r$   ú
<listcomp>z:strict.<locals>.wrap.<locals>.__repr__.<locals>.<listcomp>Õ   sC   ø€ ð %ð %ð %ñ ˜˜1Ø Ô 8Ð8Ð8ð "˜�M�M˜A�M�Mà8Ð8Ð8r&   z, éÿÿÿÿú))Ú__dict__rG   Újoin)r/   Ústandard_reprrP   Úadditional_reprr    Úoriginal_reprs       €€r$   Ú__repr__z&strict.<locals>.wrap.<locals>.__repr__Ï   s�   ø€ ð !. ¨dÑ 3Ô 3�ð%ð %ð %ð %ð !%¤× 3Ò 3Ñ 5Ô 5ð%ñ %ô %Ð!ð #'§)¢)Ð,=Ñ">Ô">�ð GXÐj˜-¨¨¨Ô,ÐBÐB°ÐBÐBÐBÐBÐ]jÐjr&   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 ]>}	  || ¦  «         Œ# t          t          f$ r}t          |j        |¬¦  «        |‚d}~ww xY wdS )z%Run class validators on the instance.)r-   r3   N)Ú__class_validators__r6   r7   r   rI   )r/   r-   r8   r    s      €r$   Úvalidatez&strict.<locals>.wrap.<locals>.validate÷   sz   ø€ à Ô5ð lð l�	ðlØ�I˜d‘O”O�O�OøÝ"¥IÐ.ð lð lð lÝ=È	ÔHZÐbcÐdÑdÔdÐjkÐkøøøøðløøøðlð ls   Œ˜A©A Á Arc   Ú"__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                 óJ   •—  ‰| g|¢R i |¤Ž ‰                      | ¦  «         dS )z*Run class validators after initialization.N)rc   )r/   rN   r;   r    Úinitial_inits      €€r$   Úinit_with_validatez0strict.<locals>.wrap.<locals>.init_with_validate  s=   ø€ ð ˆL˜Ð/ Ð/Ð/Ð/¨Ð/Ð/Ð/Ø�LŠL˜ÑÔÐÐÐr&   rQ   )r!   N)$Úhasattrr   rI   r   ÚappendÚ_create_type_validatorÚmetadatar5   Ú
isinstanceÚlistÚ_is_validatorr0   Úextendr4   Ú__setattr__r   ÚstrrQ   r   rM   r_   Ú__dataclass_params__ÚreprÚdirÚ
startswithÚgetattrÚcallablerH   ÚinspectÚ	signatureÚ
parametersrb   r   rd   rc   rJ   )r    Úfield_validatorsr?   Ú
validatorsÚcustom_validatorr-   r:   Úoriginal_initrQ   rM   r_   Úclass_validatorsr0   Úmethodrc   rg   rf   r^   r9   r(   s   `               @@@€r$   Úwrapzstrict.<locals>.wrapp   sS  øøøøø€ Ý�sÐ2Ñ3Ô3ð 	Ý0ØV˜#œ,ÐVÐVÐVñô ð ð
 :<ÐÝ˜‘”ð 	2ð 	2ˆAØˆJØ×ÒÕ4°QÑ7Ô7Ñ8Ô8Ð8Ø œzŸ~š~¨kÑ:Ô:ÐØÐ+Ý!Ð"2µDÑ9Ô9ð :Ø(8Ð'9Ð$Ø!1ð ð �IÝ(¨Ñ3Ô3ð Ý<ð A¸A¼Fð  Að  AÀyð  Að  Að  Añô ð ðð ×!Ò!Ð"2Ñ3Ô3Ð3Ø'1Ð˜QœVÑ$Ð$Ø-ˆÔð œ?Ðð
	0¥Sð 
	0µð 
	0½Cð 
	0ÀDð 
	0ð 
	0ð 
	0ð 
	0ð 
	0ð 
	0ð -ˆŒàð H	(àœLˆMå�=Ñ!Ô!ð 8µð  8¸ð  8ð  8ð  8ð  8ð  8ñ "Ô!ð 8ðD $ˆCŒLõ ˜3 Ñ0Ô0ð 2ð3µ#ð 3¸$ð 3ð 3ð 3ð 3ð
 %2�Ô!ð  œLˆMå�=Ñ!Ô!ðk¥#ð kð kð kð kð kð kñ "Ô!ðkð  Ô'Ô,°Ð4Ð4Ø'�”ð Ðå˜‘H”Hð 	,ð 	,ˆDØ—?’? ;Ñ/Ô/ð ØÝ˜S $Ñ'Ô'ˆFÝ˜FÑ#Ô#ð ØÝ•7Ô$ VÑ,Ô,Ô7Ñ8Ô8¸AÒ=Ð=Ý4ð>˜cœlð >ð >ÀTð >ð >ð >ñô ð ð
 ×#Ò# FÑ+Ô+Ð+Ð+à#3ˆÔ ð	l�1ð 	l ð 	lð 	lð 	lð 	lð 	lð 	lð 7;ˆÔ3å�3˜
Ñ#Ô#ð 	Ý˜3œ<Ð)MÈuÑUÔUð Ý4ðN˜cœlð Nð Nð Nñô ð ð  ˆŒð ”|ˆå	ˆ|Ñ	Ô	ð	ð 	ð 	ð 	ð 	ð 	ñ 
Ô	ð	õ
 	��ZÐ!3Ñ4Ô4Ð4àˆ
r&   )r   r   )r    r(   r�   s    ` r$   r%   r%   8   sY   ø€ ðph•$•q”'ð h�d¥1œgð hð hð hð hð hð hðV ˜ˆ4ˆ4�‰9Œ9ˆ9¨TÐ1r&   ÚschemaÚdatac                 ó4   — t          | ¦  «        } |di |¤Ž dS )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)r‚   rƒ   Ú
strict_clss      r$   Úvalidate_typed_dictr‡     s0   € õX 3°6Ñ:Ô:€Jð €JÐÐ�ÐÐÐÐÐr&   c                 ó  — t          | ¦  «        }t          | dd¦  «        s­|                     ¦   «         D ]˜\  }}t          |¦  «        }|t          u r\t          |¦  «        ^}}t          |¦  «        st          |         }t          t          |gt          |¦  «        z   ¦  «                 ||<   Œyt          |¦  «        st          |         ||<   Œ™g }|                     ¦   «         D ]‚\  }}t          |¦  «        t          u rAt          |¦  «        ^}} |j
        ||t          t          d|d         i¬¦  «        f¦  «         Œ\ |j
        ||t          t          ¬¦  «        f¦  «         Œƒt          t          | j        |¦  «        ¦  «        S )NÚ	__total__Tr-   r   )rK   rk   )rK   )Ú_get_typed_dict_annotationsrv   rG   r   r   r   Ú_is_required_or_notrequiredr   Útuplerm   ri   r   Ú_TYPED_DICT_DEFAULT_VALUEr%   r	   rI   )r‚   Ú
type_hintsÚkeyr1   ÚoriginÚbaseÚmetar   s           r$   r…   r…   P  s�  € õ -¨VÑ4Ô4€Jõ �6˜;¨Ñ-Ô-ð 
5Ø$×*Ò*Ñ,Ô,ð 		5ð 		5‰JˆC�Ý Ñ&Ô&ˆFà�Ð"Ð"Ý& u™oœo���tÝ2°4Ñ8Ô8ð -Ý& tÔ,�DÝ"+­E°4°&½4À¹:¼:Ñ2EÑ,FÔ,FÔ"G�
˜3‘�Ý0°Ñ7Ô7ð 5Ý"-¨eÔ"4�
˜3‘øð €FØ ×&Ò&Ñ(Ô(ð Rð R‰
ˆˆUÝ�eÑÔ¥	Ð)Ð)Ý" 5™/œ/ˆKˆD�4ØˆFŒM˜3 ¥eÕ4MÐYdÐfjÐklÔfmÐXnÐ&oÑ&oÔ&oÐpÑqÔqÐqÐqàˆFŒM˜3 ¥uÕ5NÐ'OÑ'OÔ'OÐPÑQÔQÐQÐQõ •. ¤°&Ñ9Ô9Ñ:Ô:Ð:r&   c                 óÄ   — 	 ddl }|                     | ¦  «        S # t          $ r: d„ | j                             di ¦  «                             ¦   «         D ¦   «         cY S w xY w)z0Extract type annotations from a TypedDict class.r   Nc                 ó<   — i | ]\  }}||�|nt          d ¦  «        “ŒS r#   )Útype)r>   r0   r1   s      r$   rE   z/_get_typed_dict_annotations.<locals>.<dictcomp>w  s?   € ð 
ð 
ð 
ñ ��eð ˜5Ð,�%�%µ$°t±*´*ð
ð 
ð 
r&   Ú__annotations__)ÚannotationlibÚget_annotationsÚImportErrorrZ   r5   rG   )r‚   r—   s     r$   rŠ   rŠ   o  sŽ   € ð
àÐÐÐà×,Ò,¨VÑ4Ô4Ð4øÝð 
ð 
ð 
ð
ð 
ð  &œ×2Ò2Ð3DÀbÑIÔI×OÒOÑQÔQð	
ñ 
ô 
ð 	
ð 	
ð 	
ð
øøøs   ‚ ›AAÁATr-   rK   rL   Úinitrs   ÚhashÚcomparerk   r;   c                 ól   — 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
    Nr-   ©rK   rL   rš   rs   r›   rœ   rk   r   )rl   rm   r   )	r-   rK   rL   rš   rs   r›   rœ   rk   r;   s	            r$   Úvalidated_fieldrŸ     sm   € õ4 �i¥Ñ&Ô&ð  Ø�Kˆ	ØÐØˆØ%€Hˆ[ÑÝð 	ØØ'ØØØØØð	ð 	ð ð	ð 	ð 	r&   c                 óî   ‡ — t           t           dddddfdt          t          z  dt          g t          f         t          z  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.
    TNrK   rL   rš   rs   r›   rœ   rk   r;   c                 ó.   •— t          ‰f| ||||||dœ|¤ŽS )Nrž   )rŸ   )	rK   rL   rš   rs   r›   rœ   rk   r;   r-   s	           €r$   Ú_innerz"as_validated_field.<locals>._inner³  sC   ø€ õ Øð

àØ+ØØØØØð

ð 

ð ð

ð 

ð 
	
r&   )r   r   r   r   ÚboolÚdict)r-   r¢   s   ` r$   Úas_validated_fieldr¥   ª  s«   ø€ õ (/Ý=DØØØ ØØ $ð
ð 
Ý•}Ñ$ð
å! "¥c 'Ô*­]Ñ:ð
õ ð
õ ð	
õ
 �T‰kð
õ ð
õ ˜‘+ð
õ ð
ð 
ð 
ð 
ð 
ð 
ð, €Mr&   r0   r1   Úexpected_typec                 óz  — t          |¦  «        }t          |¦  «        }|t          u rdS |€t          | |¦  «         dS t                               |¦  «        x}r || ||¦  «         dS t          |t          ¦  «        rt          | ||¦  «         dS t          |t          ¦  «        st          |t          ¦  «        rdS |t          u r5|t          u rt          d| › d�¦  «        ‚t          | ||d         ¦  «         dS |t          u r$|t          u rdS t          | ||d         ¦  «         dS 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_VALIDATORSr5   rl   r•   Ú_validate_simple_typer   rq   r   r�   r7   Útype_validatorr   )r0   r1   r¦   r�   rN   r-   s         r$   r¬   r¬   Ì  sw  € å˜Ñ&Ô&€FÝ�MÑ"Ô"€Dà�ÐÐØˆØ	Ð	Ý�t˜UÑ#Ô#Ð#Ð#Ð#Ý,×0Ò0°Ñ8Ô8Ð	8ˆð QØˆ	�$˜˜tÑ$Ô$Ð$Ð$Ð$Ý	�M¥4Ñ	(Ô	(ð QÝ˜d E¨=Ñ9Ô9Ð9Ð9Ð9Ý	�M¥:Ñ	.Ô	.ð Qµ*¸]ÍCÑ2PÔ2Pð QØˆØ	•8Ð	Ð	ØÕ-Ð-Ð-ÝÐF dÐFÐFÐFÑGÔGÐGÝ�t˜U D¨¤GÑ,Ô,Ð,Ð,Ð,Ø	•;Ð	Ð	ØÕ-Ð-Ð-ØˆFÝ�t˜U D¨¤GÑ,Ô,Ð,Ð,Ð,åÐO°tÐOÐOÀÐOÐOÑPÔPÐPr&   c                 óX   — |�'t          d| › dt          |¦  «        j        › �¦  «        ‚dS )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•   rI   )r0   r1   s     r$   r©   r©   ç  s:   € ð ÐÝÐS $ÐSÐS½TÀ%¹[¼[Ô=QÐSÐSÑTÔTÐTð Ðr&   rN   .c                 ó   — g }|D ]O}	 t          | ||¦  «          dS # t          $ r,}|                     t          |¦  «        ¦  «         Y d}~ŒHd}~ww xY wt          d| › dt	          |¦  «        › d|› dd                     |¦  «        › �¦  «        ‚)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   ri   rq   rs   r[   )r0   r1   rN   ÚerrorsÚtr8   s         r$   Ú_validate_unionr±   ñ  sÇ   € à€FØð "ð "ˆð	"Ý˜4 ¨Ñ*Ô*Ð*ØˆFˆFøÝð 	"ð 	"ð 	"Ø�MŠM�#˜a™&œ&Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!øøøøð	"øøøõ Øp�$ÐpÐp¥T¨%¡[¤[ÐpÐpÈTÐpÐpÐ]a×]fÒ]fÐgmÑ]nÔ]nÐpÐpñô ð s   ˆœ
A¦"AÁAc                 ó2  — t          |t          ¦  «        r(|d„ |D ¦   «         vrt          d| › d|› d|› �¦  «        ‚dS t          |t          ¦  «        r(|d„ |D ¦   «         vrt          d| › d|› d|› �¦  «        ‚dS ||vrt          d| › d|› d|› �¦  «        ‚dS )zValidate Literal type.c                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r   )rl   r£   ©r>   Úargs     r$   rW   z%_validate_literal.<locals>.<listcomp>  s'   € ÐFÐFÐF µ
¸3ÅÑ0EÔ0EÐF˜ÐFÐFÐFr&   r¨   z' expected one of ú, got c                 óf   — g | ].}t          |t          ¦  «        ¯t          |t          ¦  «        °,|‘Œ/S r   )rl   Úintr£   r´   s     r$   rW   z%_validate_literal.<locals>.<listcomp>  s8   € ÐcÐcÐc µ
¸3ÅÑ0DÔ0DÐcÍZÐX[Õ]aÑMbÔMbÐc˜ÐcÐcÐcr&   N)rl   r£   r7   r¸   )r0   r1   rN   s      r$   Ú_validate_literalr¹      sö   € å�%�ÑÔð OØÐFÐF¨ÐFÑFÔFÐFÐFÝÐQ dÐQÐQ¸dÐQÐQÈ%ÐQÐQÑRÔRÐRð GÐFå	�E�3Ñ	Ô	ð OØÐcÐc¨ÐcÑcÔcÐcÐcÝÐQ dÐQÐQ¸dÐQÐQÈ%ÐQÐQÑRÔRÐRð dÐcà	�dÐ	Ð	ÝÐM $ÐMÐM¸$ÐMÐMÀeÐMÐMÑNÔNÐNð 
Ð	r&   c           	      ó:  — t          |t          ¦  «        s't          d| › dt          |¦  «        j        › �¦  «        ‚|d         }t          |¦  «        D ]F\  }}	 t          | › d|› d�||¦  «         Œ# t          $ r}t          d|› d| › d�¦  «        |‚d	}~ww xY wd	S )
zValidate list[T] type.r¨   z' expected a list, got r   ú[ú]úInvalid item at index z
 in list 'rF   N)rl   rm   r7   r•   rI   Ú	enumerater¬   ©r0   r1   rN   Ú	item_typeÚiÚitemr8   s          r$   Ú_validate_listrÃ     sà   € å�e�TÑ"Ô"ð WÝÐU $ÐUÐU½tÀE¹{¼{Ô?SÐUÐUÑVÔVÐVð �Q”€IÝ˜UÑ#Ô#ð Rð R‰ˆˆ4ð	RÝ˜d˜>˜> Q˜>˜>˜>¨4°Ñ;Ô;Ð;Ð;øÝð 	Rð 	Rð 	RÝÐI°QÐIÐIÀ$ÐIÐIÐIÑJÔJÐPQÐQøøøøð	RøøøðRð Rs   ÁA2Á2
BÁ<BÂBc                 ó`  — t          |t          ¦  «        s't          d| › dt          |¦  «        j        › �¦  «        ‚|\  }}|                     ¦   «         D ]W\  }}	 t          | › d�||¦  «         t          | › d|›d�||¦  «         Œ2# t          $ r}t          d| › d�¦  «        |‚d}~ww xY wdS )	zValidate dict[K, V] type.r¨   z' expected a dict, got z.keyr»   r¼   zInvalid key or value in dict 'rF   N)rl   r¤   r7   r•   rI   rG   r¬   )r0   r1   rN   Úkey_typeÚ
value_typerB   rC   r8   s           r$   Ú_validate_dictrÇ     sõ   € å�e�TÑ"Ô"ð WÝÐU $ÐUÐU½tÀE¹{¼{Ô?SÐUÐUÑVÔVÐVð  Ñ€HˆjØ—’‘”ð Mð M‰ˆˆ1ð	MÝ˜d˜=˜=˜=¨!¨XÑ6Ô6Ð6Ý˜dÐ+Ð+ QÐ+Ð+Ð+¨Q°
Ñ;Ô;Ð;Ð;øÝð 	Mð 	Mð 	MÝÐD¸TÐDÐDÐDÑEÔEÈ1ÐLøøøøð	Møøøð	Mð Ms   Á+BÂ
B+ÂB&Â&B+c           
      óð  — t          |t          ¦  «        s't          d| › dt          |¦  «        j        › �¦  «        ‚t          |¦  «        dk    rm|d         t          u r^t          |¦  «        D ]L\  }}	 t          | › d|› d�||d         ¦  «         Œ$# t          $ r}t          d|› d	| › d
�¦  «        |‚d}~ww xY wdS t          |¦  «        t          |¦  «        k    r2t          d| › dt          |¦  «        › dt          |¦  «        › �¦  «        ‚t          t          ||¦  «        ¦  «        D ]I\  }\  }}	 t          | › d|› d�||¦  «         Œ!# t          $ r}t          d|› d	| › d
�¦  «        |‚d}~ww xY wdS )zValidate Tuple type.r¨   z' expected a tuple, got é   r   r»   r¼   r   r½   z in tuple 'rF   Nz' expected a tuple of length r¶   )
rl   rŒ   r7   r•   rI   rH   ÚEllipsisr¾   r¬   Úzip)r0   r1   rN   rÁ   rÂ   r8   Úexpecteds          r$   Ú_validate_tuplerÍ   )  sð  € å�e�UÑ#Ô#ð XÝÐV $ÐVÐVÅÀUÁÄÔ@TÐVÐVÑWÔWÐWõ ˆ4�y„y�A‚~€~˜$˜qœ'¥XÐ-Ð-Ý  Ñ'Ô'ð 	Wð 	W‰GˆAˆtðWÝ $˜~˜~¨˜~˜~˜~¨t°T¸!´WÑ=Ô=Ð=Ð=øÝð Wð Wð WÝÐ N¸Ð NÐ NÀtÐ NÐ NÐ NÑOÔOÐUVÐVøøøøðWøøøð	Wð 	Wõ 
ˆT‰Œ•c˜%‘j”jÒ	 Ð	 ÝÐb $ÐbÐbÅSÈÁYÄYÐbÐbÕVYÐZ_ÑV`ÔV`ÐbÐbÑcÔcÐcå#,­S°¸Ñ-=Ô-=Ñ#>Ô#>ð 	Wð 	WÑˆAÑ��hðWÝ $˜~˜~¨˜~˜~˜~¨t°XÑ>Ô>Ð>Ð>øÝð Wð Wð WÝÐ N¸Ð NÐ NÀtÐ NÐ NÐ NÑOÔOÐUVÐVøøøøðWøøøð	Wð 	Ws0   Á4BÂ
B8ÂB3Â3B8Ä5EÅ
E3ÅE.Å.E3c                 ó.  — t          |t          ¦  «        s't          d| › dt          |¦  «        j        › �¦  «        ‚|d         }t          |¦  «        D ]@\  }}	 t          | › d�||¦  «         Œ# t          $ r}t          d| › d�¦  «        |‚d}~ww xY wdS )zValidate set[T] type.r¨   z' expected a set, got r   z itemzInvalid item in set 'rF   N)rl   Úsetr7   r•   rI   r¾   r¬   r¿   s          r$   Ú_validate_setrÐ   @  sÑ   € å�e�SÑ!Ô!ð VÝÐT $ÐTÐT½dÀ5¹k¼kÔ>RÐTÐTÑUÔUÐUð �Q”€IÝ˜UÑ#Ô#ð Dð D‰ˆˆ4ð	DÝ˜d˜>˜>˜>¨4°Ñ;Ô;Ð;Ð;øÝð 	Dð 	Dð 	DÝÐ;°DÐ;Ð;Ð;Ñ<Ô<À!ÐCøøøøð	DøøøðDð Ds   ÁA/Á/
BÁ9BÂBc           	      óV  — t          |t          j        j        ¦  «        s't	          d| › dt          |¦  «        j        › �¦  «        ‚|sdS |d         }t          |¦  «        D ]F\  }}	 t          | › d|› d�||¦  «         Œ# t          $ r}t	          d|› d| › d	�¦  «        |‚d}~ww xY wdS )
z&Validate Sequence or Sequence[T] type.r¨   z' expected a Sequence, got Nr   r»   r¼   r½   z in sequence 'rF   )	rl   ÚcollectionsÚabcÚSequencer7   r•   rI   r¾   r¬   r¿   s          r$   Ú_validate_sequencerÕ   N  sô   € å�e�[œ_Ô5Ñ6Ô6ð [ÝÐY $ÐYÐYÅ4ÈÁ;Ä;ÔCWÐYÐYÑZÔZÐZð ð Øˆð �Q”€IÝ˜UÑ#Ô#ð Vð V‰ˆˆ4ð	VÝ˜d˜>˜> Q˜>˜>˜>¨4°Ñ;Ô;Ð;Ð;øÝð 	Vð 	Vð 	VÝÐM°QÐMÐMÀdÐMÐMÐMÑNÔNÐTUÐUøøøøð	VøøøðVð Vs   Á(B Â 
B&Â
B!Â!B&c                 ób  — |t           u rUt          |t          ¦  «        r@t          d| › d|j        › dt          |¦  «        j        › dt          |¦  «        › d�	¦  «        ‚t          ||¦  «        s@t          d| › d|j        › dt          |¦  «        j        › dt          |¦  «        › d�	¦  «        ‚dS )z&Validate simple type (int, str, etc.).r¨   z' expected r¶   z	 (value: rY   N)r¸   rl   r£   r7   rI   r•   rs   )r0   r1   r¦   s      r$   r«   r«   `  sÖ   € à�ÐÐ¥
¨5µ$Ñ 7Ô 7ÐÝØr�dÐrÐr }Ô'=ÐrÐrÅTÈ%Á[Ä[ÔEYÐrÐrÕdhÐinÑdoÔdoÐrÐrÐrñ
ô 
ð 	
õ �e˜]Ñ+Ô+ð 
ÝØr�dÐrÐr }Ô'=ÐrÐrÅTÈ%Á[Ä[ÔEYÐrÐrÕdhÐinÑdoÔdoÐrÐrÐrñ
ô 
ð 	
ð
ð 
r&   r   c                 ó&   ‡ — dt           ddfˆ fd„}|S )z-Create a type validator function for a field.r1   r!   Nc                 ó>   •— t          ‰j        | ‰j        ¦  «         d S r#   )r¬   r0   r•   )r1   r   s    €r$   r-   z)_create_type_validator.<locals>.validatorp  s   ø€ Ý�u”z 5¨%¬*Ñ5Ô5Ð5Ð5Ð5r&   )r   )r   r-   s   ` r$   rj   rj   l  s7   ø€ ð6�ð 6 ð 6ð 6ð 6ð 6ð 6ð 6ð Ðr&   c                 óœ  — t          | ¦  «        sdS t          j        | ¦  «        }t          |j                             ¦   «         ¦  «        }t          |¦  «        dk    rdS |d         j        t          j        j	        t          j        j
        t          j        j        fvrdS |dd…         D ]}|j        t          j        j        k    r dS Œ dS )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)rw   rx   ry   rm   rz   ÚvaluesrH   ÚkindÚ	ParameterÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYÚVAR_POSITIONALrK   Úempty)r-   ry   rz   Ú	parameters       r$   rn   rn   v  sÒ   € õ �IÑÔð ØˆuåÔ! )Ñ,Ô,€IÝ�iÔ*×1Ò1Ñ3Ô3Ñ4Ô4€JÝ
ˆ:�„˜!ÒÐØˆuØ�!„}ÔÝÔÔ/ÝÔÔ)ÝÔÔ(ð"ð ð ð
 ˆuØ   ”^ð ð ˆ	ØÔ¥Ô 1Ô 7Ò7Ð7Ø�5�5ð 8àˆ4r&   Ú	type_hintc                 ó\   — | t           t          fv p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Ô4IÍhÕXcÐMdÐ4dÐer&   rª   )r%   r‡   rŸ   ÚValidator_Tr   r   r   r#   )GÚcollections.abcrÒ   rx   Ú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¤   rq   r   Úobjectr�   r%   r£   r‡   r…   rŠ   rm   rŸ   r¥   r¬   r©   rŒ   r±   r¹   rÃ   rÇ   rÍ   rÐ   rÕ   r«   rj   rn   r‹   rÏ   rÓ   rÔ   rª   r–   Ú	UnionTypeÚ__all__r   r&   r$   ú<module>rî      sš  ðØ Ð Ð Ð Ð Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð
2à,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øØð 2ð 2ð 2ð2à;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;øØð 2ð 2ð 2à�4˜
 B¨Ñ+Ô+ˆØ�d˜=¨"¨bÑ1Ô1ˆˆˆð2øøøøøð	2øøøðð ð ð ð ð ð ð ð ð ð ˜�u˜d�{Ô#€Ø€GˆC�L„L€Ø�˜¨t°C¸°H¬~Ð>Ñ>Ô>€à"˜F™HœHÐ ð 
Ø (��Q”Ð (˜D œGÐ (Ð (Ð (ñ 
„Ø (ð 
Ø$)Ð OÐ OÐ O˜TÐ O¨h¸¸Q¼°yÀ$ÀqÄ'Ð7IÔ.JÐ OÐ OÐ Oñ 
„Ø Oðc2Àð c2ð c2ð c2��Q”˜$‘ð c2¸ð c2È$ÈqÌ'ÐT\Ð^bÐcdÔ^eÐ]fÐhlÐmnÔhoÐ]oÔTpÑJpð c2ð c2ð c2ð 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ð Qð Qð Qð6U˜ð U Sð U¨Tð Uð Uð Uð Uð˜#ð  cð °°s¸C°x´ð ÀTð ð ð ð ð	O˜Cð 	O¨ð 	O°5¸¸c¸´?ð 	OÀtð 	Oð 	Oð 	Oð 	OðR˜ð R Sð R°°c¸3°h´ð RÀDð Rð Rð Rð RðM˜ð M Sð M°°c¸3°h´ð MÀDð Mð Mð Mð MðW˜#ð W cð W°°s¸C°x´ð WÀTð Wð Wð Wð Wð.D˜ð D Cð D¨u°S¸#°X¬ð DÀ4ð Dð Dð Dð DðV˜Sð V¨ð V°E¸#¸s¸(´Oð VÈð Vð Vð Vð Vð$	
 ð 	
¨Cð 	
Àð 	
Èð 	
ð 	
ð 	
ð 	
ð %ð ¨Kð ð ð ð ð˜Sð  Tð ð ð ð ð6f¨3ð f°4ð fð fð fð fð 
ˆ?ØÐØˆ.Øˆ.Ø	ˆ?ØˆØ„OÔÐ0ðRÐ ˜˜S (¨C°°e¸CÀ¸H´oÐ+FÈÐ+LÔ"MÐMÔNð ð ñ ð +:Ð �u”Ñ 'ðð ð €€€s6   ÁA ÁBÁAÁBÁA?Á<BÁ>A?Á?BÂB