§
    ïóÉj¹C  ã                   óÎ  — d dl Z d dlmZmZmZmZmZ d dl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mZmZ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         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e                  ded	eee         eee         gee         f         f         fd„Zeedddddfdeee         ef         dee
ef         deeg e
f         ef         dededee         dedee         de
d	e
fd„Z defd„Z!de"de
de
d	dfd„Z#de"de
d ee
d!f         d	dfd"„Z$de"de
d ee
d!f         d	dfd#„Z%de"de
d ee
d!f         d	dfd$„Z&de"de
d ee
d!f         d	dfd%„Z'de"de
d ee
d!f         d	dfd&„Z(de"de
d ee
d!f         d	dfd'„Z)de"de
de*d	dfd(„Z+d)ed	efd*„Z,de
d	efd+„Z-ee$ee%e.e&e/e'e0e(e1e)iZ2g d,¢Z3dS ).é    N)Ú_MISSING_TYPEÚMISSINGÚFieldÚfieldÚfields)Úwraps)ÚAnyÚCallableÚDictÚ
ForwardRefÚListÚLiteralÚOptionalÚTupleÚTypeÚTypeVarÚUnionÚget_argsÚ
get_originÚoverloadé   )Ú#StrictDataclassClassValidationErrorÚStrictDataclassDefinitionErrorÚ#StrictDataclassFieldValidationErrorÚTÚclsÚreturnc                 ó   — d S ©N© )r   s    ú~/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/huggingface_hub/dataclasses.pyÚstrictr"   !   s   € Ø%( Só    F©Úaccept_kwargsr%   c                 ó   — d S r   r    r$   s    r!   r"   r"   %   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           	      óz  •‡ ‡‡‡‡— 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„}|‰ _        ‰rd‰ j        Št%          ‰¦  «        dt          dd fˆ ˆfd„¦   «         }|‰ _        ‰ j        Št%          ‰¦  «        dt           fˆ ˆfd„¦   «         }|‰ _        g }	t)          ‰ ¦  «        D ]’}
|
                     d¦  «        sŒt-          ‰ |
¦  «        }t/          |¦  «        sŒ8t1          t3          j        |¦  «        j        ¦  «        dk    rt          d‰ j        › d|
› d�¦  «        ‚|	                     |¦  «         Œ“|	‰ _        dt:          dd fˆ fd„}d|_        t          ‰ d¦  «        r.t-          ‰ j        dd¦  «        st          d‰ j        › d�¦  «        ‚|‰ _        ‰ j        Št%          ‰¦  «        dˆ ˆfd„¦   «         }tA          ‰ 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-   r.   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 ¦   «         } ‰| fi |¤Ž |                     ¦   «         D ]\  }}|‰vr|                      ||¦  «         Œ 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   ÚitemsÚ__setattr__)r,   r8   Ústandard_kwargsr-   r.   rA   r   Úoriginal_inits        @€€r!   Ú__init__z&strict.<locals>.wrap.<locals>.__init__�   s¦   øø€ ð $AÐ#@µF¸3±K´KÐ#@Ñ#@Ô#@Ð Ø"\Ð"\Ð"\Ð"\°F·L²L±N´NÐ"\Ñ"\Ô"\�ð �˜dÐ6Ð6 oÐ6Ð6Ð6ð $*§<¢<¡>¤>ð 6ð 6‘K�D˜%ØÐ#3Ð3Ð3Ø×(Ò(¨¨uÑ5Ô5Ð5øð6ð 6r#   c                 ó¶   •—  ‰| ¦  «        }ˆfd„| j                              ¦   «         D ¦   «         }d                     |¦  «        }|r|d d…         › d|› d�n|S )Nc                 ó8   •— g | ]\  }}|‰j         v¯d |› d|›�‘ŒS )Ú*ú=)r)   )r;   r?   r@   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__rC   Újoin)r,   Ústandard_reprÚadditional_kwargsÚ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#   Ú	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*   r0   N)Ú__class_validators__r3   r4   r   Ú__name__)r,   r*   r5   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TrZ   Ú"__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)rZ   )r,   Úargsr8   r   Úinitial_inits      €€r!   Úinit_with_validatez0strict.<locals>.wrap.<locals>.init_with_validateã   s=   ø€ ð ˆL˜Ð/ Ð/Ð/Ð/¨Ð/Ð/Ð/Ø�LŠL˜ÑÔÐÐÐr#   rG   )r   N)!Úhasattrr   rY   r   ÚappendÚ_create_type_validatorÚmetadatar2   Ú
isinstanceÚlistÚ_is_validatorr-   Úextendr1   rD   r	   ÚstrrG   r   rU   ÚdirÚ
startswithÚgetattrÚcallableÚlenÚinspectÚ	signatureÚ
parametersrX   r   r[   rZ   Úsetattr)r   Úfield_validatorsr<   Ú
validatorsÚcustom_validatorr*   r7   rG   rU   Úclass_validatorsr-   ÚmethodrZ   r_   r^   rF   rT   r6   r%   s   `             @@@@€r!   Úwrapzstrict.<locals>.wrapc   s  øøøøøø€ Ý�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ð -ˆŒàð (	$àœLˆMå�=Ñ!Ô!ð6­ð 6°ð 6ð 6ð 6ð 6ð 6ð 6ñ "Ô!ð6ð $ˆCŒLð  œLˆMå�=Ñ!Ô!ðk¥#ð kð kð kð kð kð kñ "Ô!ðkð  $ˆCŒLð Ðå˜‘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%   rw   s    ` r!   r"   r"   )   sY   ø€ ðtH•$•q”'ð H�d¥1œgð Hð Hð Hð Hð Hð HðV ˜ˆ4ˆ4�‰9Œ9ˆ9¨TÐ1r#   Tr*   ÚdefaultÚdefault_factoryÚinitÚreprÚhashÚcomparerc   r8   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*   ©rx   ry   rz   r{   r|   r}   rc   r    )rd   re   r   )	r*   rx   ry   rz   r{   r|   r}   rc   r8   s	            r!   Úvalidated_fieldr€   ñ   sm   € õ4 �i¥Ñ&Ô&ð  Ø�Kˆ	ØÐØˆØ%€Hˆ[ÑÝð 	ØØ'ØØØØØð	ð 	ð ð	ð 	ð 	r#   c                 ó6  ‡ — t           t           dddddfdt          t          t          f         dt          t          g t          f         t          f         dt
          dt
          dt          t
                   dt
          d	t          t                   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.
    TNrx   ry   rz   r{   r|   r}   rc   r8   c                 ó.   •— t          ‰f| ||||||dœ|¤ŽS )Nr   )r€   )	rx   ry   rz   r{   r|   r}   rc   r8   r*   s	           €r!   Ú_innerz"as_validated_field.<locals>._inner%  sC   ø€ õ Øð

àØ+ØØØØØð

ð 

ð ð

ð 

ð 
	
r#   )r   r   r	   r   r
   Úboolr   r   )r*   rƒ   s   ` r!   Úas_validated_fieldr…     sµ   ø€ õ .5ÝCJØØØ#ØØ#'ð
ð 
Ý•s�MÐ)Ô*ð
å�x¨­C¨Ô0µ-Ð?Ô@ð
õ ð
õ ð	
õ
 •tŒnð
õ ð
õ �4”.ð
õ ð
ð 
ð 
ð 
ð 
ð 
ð, €Mr#   r-   r.   Úexpected_typec                 ó|  — t          |¦  «        }t          |¦  «        }|t          u rdS t                               |¦  «        x}r || ||¦  «         dS t          |t          ¦  «        rt          | ||¦  «         dS t          |t          ¦  «        st          |t          ¦  «        rdS t          d| › d|› �¦  «        ‚)z.Validate that 'value' matches 'expected_type'.NzUnsupported type for field 'r+   )r   r   r	   Ú_BASIC_TYPE_VALIDATORSr2   rd   ÚtypeÚ_validate_simple_typer   rh   r4   )r-   r.   r†   Úoriginr]   r*   s         r!   Útype_validatorrŒ   >  sÖ   € å˜Ñ&Ô&€FÝ�MÑ"Ô"€Dà�ÐÐØˆÝ,×0Ò0°Ñ8Ô8Ð	8ˆð QØˆ	�$˜˜tÑ$Ô$Ð$Ð$Ð$Ý	�M¥4Ñ	(Ô	(ð QÝ˜d E¨=Ñ9Ô9Ð9Ð9Ð9Ý	�M¥:Ñ	.Ô	.ð Qµ*¸]ÍCÑ2PÔ2Pð QØˆåÐO°tÐOÐOÀÐOÐOÑPÔPÐPr#   r]   .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.NúField 'z' with value z doesn't match any type in z
. Errors: z; )rŒ   r4   ra   rh   r{   rP   )r-   r.   r]   ÚerrorsÚtr5   s         r!   Ú_validate_unionr‘   O  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                 ó>   — ||vrt          d| › d|› d|› �¦  «        ‚dS )zValidate Literal type.rŽ   z' expected one of ú, got N)r4   )r-   r.   r]   s      r!   Ú_validate_literalr”   ^  s<   € à�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 'ú'N)rd   re   r4   r‰   rY   Ú	enumeraterŒ   ©r-   r.   r]   Ú	item_typeÚiÚitemr5   s          r!   Ú_validate_listrŸ   d  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 'r™   N)rd   Údictr4   r‰   rY   rC   rŒ   )r-   r.   r]   Úkey_typeÚ
value_typer?   r@   r5   s           r!   Ú_validate_dictr¤   r  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 'r™   Nz' expected a tuple of length r“   )
rd   Útupler4   r‰   rY   rm   ÚEllipsisrš   rŒ   Úzip)r-   r.   r]   r�   rž   r5   Ú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 'r™   N)rd   Úsetr4   r‰   rY   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                 ó¦   — 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: rN   N)rd   r4   rY   r‰   r{   )r-   r.   r†   s      r!   rŠ   rŠ   ¦  sl   € å�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.r.   r   Nc                 ó>   •— t          ‰j        | ‰j        ¦  «         d S r   )rŒ   r-   r‰   )r.   r   s    €r!   r*   z)_create_type_validator.<locals>.validator²  s   ø€ Ý�u”z 5¨%¬*Ñ5Ô5Ð5Ð5Ð5r#   )r	   )r   r*   s   ` r!   rb   rb   ®  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)rl   rn   ro   re   rp   Úvaluesrm   ÚkindÚ	ParameterÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYÚVAR_POSITIONALrx   Úempty)r*   ro   rp   Ú	parameters       r!   rf   rf   ¸  sÒ   € õ �IÑÔð ØˆuåÔ! )Ñ,Ô,€IÝ�iÔ*×1Ò1Ñ3Ô3Ñ4Ô4€JÝ
ˆ:�„˜!ÒÐØˆuØ�!„}ÔÝÔÔ/ÝÔÔ)ÝÔÔ(ð"ð ð ð
 ˆuØ   ”^ð ð ˆ	ØÔ¥Ô 1Ô 7Ò7Ð7Ø�5�5ð 8àˆ4r#   )r"   r€   ÚValidator_Tr   r   r   r   )4rn   Údataclassesr   r   r   r   r   Ú	functoolsr   Útypingr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r�   r   r   r   r»   r   r"   r„   r€   r…   rh   rŒ   r‘   r”   rŸ   r¤   r«   r®   r‰   rŠ   rb   rf   re   r¡   r§   r­   rˆ   Ú__all__r    r#   r!   ú<module>rÀ      s`  ðØ €€€Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð"ð ð ð ð ð ð ð ð ð ð ˜�u˜d�{Ô#€Ø€GˆC�L„L€ð 
Ø (��Q”Ð (˜D œGÐ (Ð (Ð (ñ 
„Ø (ð 
Ø$)Ð OÐ OÐ O˜TÐ O¨h¸¸Q¼°yÀ$ÀqÄ'Ð7IÔ.JÐ OÐ OÐ Oñ 
„Ø Oð "ðE2Ø<AðE2ð E2ð E2Ø	�$�q”'Ô	ðE2Ø59ðE2à
ˆ4�Œ7�H˜d 1œg˜Y¨¨Q¬Ð/Ô0Ð0Ô1ðE2ð E2ð E2ð E2ðT *1Ø?FØØØØØ#ð(ð (Ø�T˜+Ô&¨Ð3Ô4ð(à�3˜Ð%Ô&ð(ð ˜8 B¨ GÔ,¨mÐ;Ô<ð(ð ð	(ð
 ð(ð �4Œ.ð(ð ð(ð �tŒnð(ð ð(ð 	ð(ð (ð (ð (ðV +ð ð ð ð ðDQ˜ð Q Sð Q¸ð QÀð Qð Qð Qð Qð"˜#ð  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ð
 ð 
¨Cð 
Àð 
Èð 
ð 
ð 
ð 
ð %ð ¨Kð ð ð ð ð˜Sð  Tð ð ð ð ð8 
ˆ?ØÐØˆ.Øˆ.Ø	ˆ?ØˆðÐ ðð ð €€€r#   