§
    }Štj(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
 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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@        jA        e:iZBe$eee%ee3ed.f         gdf         f         eCd<<   e4eBejD        <   g d=¢ZEdS )?é    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                 ó   — d S ©Nr   )r   s    úY/var/www/html/CA-Chatbot/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.   r/   r0   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   )r/   )Ú.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Úlenr5   Ú__name__r/   ÚsetattrÚdefaultr   Údefault_factoryr6   Ú__post_init__)
r.   Úargsr:   Ústandard_kwargsr>   Úadditional_kwargsr/   r0   rC   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%   rL   c                 ó\   — |                      ¦   «         D ]\  }}t          | ||¦  «         ŒdS )z2Default __post_init__ to accept additional kwargs.N)rF   rI   )r.   r:   r/   r0   s       r#   rL   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=   rA   rB   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__rF   Újoin)r.   Ústandard_reprrO   Ú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,   r2   N)Ú__class_validators__r5   r6   r   rH   )r.   r,   r7   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rb   Ú"__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)rb   )r.   rM   r:   r   Úinitial_inits      €€r#   Úinit_with_validatez0strict.<locals>.wrap.<locals>.init_with_validate  s=   ø€ ð ˆL˜Ð/ Ð/Ð/Ð/¨Ð/Ð/Ð/Ø�LŠL˜ÑÔÐÐÐr%   rP   )r    N)$Úhasattrr   rH   r   ÚappendÚ_create_type_validatorÚmetadatar4   Ú
isinstanceÚlistÚ_is_validatorr/   Úextendr3   Ú__setattr__r   ÚstrrP   r
   rL   r^   Ú__dataclass_params__ÚreprÚdirÚ
startswithÚgetattrÚcallablerG   ÚinspectÚ	signatureÚ
parametersra   r   rc   rb   rI   )r   Úfield_validatorsr>   Ú
validatorsÚcustom_validatorr,   r9   Úoriginal_initrP   rL   r^   Úclass_validatorsr/   Úmethodrb   rf   re   r]   r8   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   )rJ   rj   )rJ   )Ú_get_typed_dict_annotationsru   rF   r   r   r   Ú_is_required_or_notrequiredr   Útuplerl   rh   r   Ú_TYPED_DICT_DEFAULT_VALUEr$   r   rH   )r�   Ú
type_hintsÚkeyr0   Ú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=   r/   r0   s      r#   rD   z/_get_typed_dict_annotations.<locals>.<dictcomp>w  s?   € ð 
ð 
ð 
ñ ��eð ˜5Ð,�%�%µ$°t±*´*ð
ð 
ð 
r%   Ú__annotations__)ÚannotationlibÚget_annotationsÚImportErrorrY   r4   rF   )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,   rJ   rK   Úinitrr   ÚhashÚcomparerj   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,   ©rJ   rK   r™   rr   rš   r›   rj   r   )rk   rl   r   )	r,   rJ   rK   r™   rr   rš   r›   rj   r:   s	            r#   Úvalidated_fieldrž     sm   € õ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.
    TNrJ   rK   r™   rr   rš   r›   rj   r:   c                 ó.   •— t          ‰f| ||||||dœ|¤ŽS )Nr�   )rž   )	rJ   rK   r™   rr   rš   r›   rj   r:   r,   s	           €r#   Ú_innerz"as_validated_field.<locals>._inner³  sC   ø€ õ Øð

àØ+ØØØØØð

ð 

ð ð

ð 

ð 
	
r%   )r   r   ÚboolÚdict)r,   r¡   s   ` r#   Úas_validated_fieldr¤   ª  s˜   ø€ õ Ý&ØØØ ØØ $ð
ð 
Ýð
åð
õ ð
õ ð	
õ
 �T‰kð
õ ð
õ ˜‘+ð
õ ð
ð 
ð 
ð 
ð 
ð 
ð, €Mr%   r/   r0   Ú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_VALIDATORSr4   rk   r”   Ú_validate_simple_typer   rp   r   rŒ   r6   Útype_validatorr   )r/   r0   r¥   r�   rM   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 )r6   r”   rH   )r/   r0   s     r#   r¨   r¨   ç  s:   € ð ÐÝÐS $ÐSÐS½TÀ%¹[¼[Ô=QÐSÐSÑTÔTÐTð Ðr%   rM   .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«   r6   rh   rp   rr   rZ   )r/   r0   rM   ÚerrorsÚtr7   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   )rk   r¢   ©r=   Úargs     r#   rV   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   )rk   Úintr¢   r³   s     r#   rV   z%_validate_literal.<locals>.<listcomp>  s8   € ÐcÐcÐc µ
¸3ÅÑ0DÔ0DÐcÍZÐX[Õ]aÑMbÔMbÐc˜ÐcÐcÐcr%   N)rk   r¢   r6   r·   )r/   r0   rM   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 'rE   N)rk   rl   r6   r”   rH   Ú	enumerater«   ©r/   r0   rM   Ú	item_typeÚiÚitemr7   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 'rE   N)rk   r£   r6   r”   rH   rF   r«   )r/   r0   rM   Úkey_typeÚ
value_typerA   rB   r7   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 'rE   Nz' expected a tuple of length rµ   )
rk   r‹   r6   r”   rH   rG   ÚEllipsisr½   r«   Úzip)r/   r0   rM   rÀ   rÁ   r7   Ú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 'rE   N)rk   Úsetr6   r”   rH   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 'rE   )	rk   ÚcollectionsÚabcÚSequencer6   r”   rH   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: rX   N)r·   rk   r¢   r6   rH   r”   rr   )r/   r0   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.r0   r    Nc                 ó>   •— t          ‰j        | ‰j        ¦  «         d S r"   )r«   r/   r”   )r0   r   s    €r#   r,   z)_create_type_validator.<locals>.validatorp  s   ø€ Ý�u”z 5¨%¬*Ñ5Ô5Ð5Ð5Ð5r%   )r   )r   r,   s   ` r#   ri   ri   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)rv   rw   rx   rl   ry   ÚvaluesrG   ÚkindÚ	ParameterÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYÚVAR_POSITIONALrJ   Úempty)r,   rx   ry   Ú	parameters       r#   rm   rm   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"   )FÚcollections.abcrÑ   rw   Ú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£   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�  ðØ Ð Ð Ð Ð Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð
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Äð 
ð 
ð 
ð 
ð$ Ø"ØØØØØ ð(ð (Ø�KÔ  ;Ñ.ð(àð(ð ð(ð ð	(ð
 ð(ð �‰+ð(ð ð(ð �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