wL iCddlZddlmZmZmZmZmZddlmZddl m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZddlmZmZmZe e gdfZedZedeed eefd Zed d d ed e eegeeffdZ d-d d deeed ed eeee eegeefffdZeedddddfdeeeefdee efdee ge fefdededeededee de d e fdZ defdZ!de"de de d dfdZ#de"de d ee d!fd dfd"Z$de"de d ee d!fd dfd#Z%de"de d ee d!fd dfd$Z&de"de d ee d!fd dfd%Z'de"de d ee d!fd dfd&Z(de"de d ee d!fd dfd'Z)de"de de*d dfd(Z+d)ed efd*Z,de d efd+Z-ee$ee%e.e&e/e'e0e(e1e)iZ2gd,Z3y).N) _MISSING_TYPEMISSINGFieldfieldfields)wraps)AnyCallableDict ForwardRefListLiteralOptionalTupleTypeTypeVarUnionget_args get_originoverload)#StrictDataclassClassValidationErrorStrictDataclassDefinitionError#StrictDataclassFieldValidationErrorTclsreturncyN)rs a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/huggingface_hub/dataclasses.pystrictr"!s%(F accept_kwargsr%cyrr r$s r!r"r"%sLOr#c\dttdttffd }|||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 ``` rrc tdstdjdi}tD]}g}|j t ||j jd}|Rt|ts|g}|D])}t|rtd|jd|d|j||||j<|_ jdtd t d td dffd }|_r^j"t%d td dffd }|_j&t%d t ffd }|_g} t)D]} | j+dst-| } t/| s-t1t3j4| j6dk7rtdjd| d| j | | _dt:d dffd } d| _tdr0t-j>ddstdjd| _j"t%dfd } tAd| S)N__dataclass_fields__zClass 'z.' must be a dataclass before applying @strict. validatorzInvalid validator for field '': z.. Must be a callable taking a single argument.selfnamevaluerc|jj|gD] } || |||y#ttf$r}t |||d}~wwxYw)z1Custom __setattr__ method for strict dataclasses.)rcauseN)__validators__get ValueError TypeErrorr)r,r-r.r*eoriginal_setattrs r!__strict_setattr__z0strict..wrap..__strict_setattr__~so"0044T2> Z Ze$ Z T4 / #I.Z=DPQRXYYZs7AAAkwargsc t Dchc]}|j}}|jDcic] \}}||vs ||}}} |fi||jD]\}}||vs |j||ycc}wcc}}wr)rr-items __setattr__) r,r8fdataclass_fieldskvstandard_kwargsr-r.r original_inits r!__init__z&strict..wrap..__init__s5;3K#@qAFF#@ #@4:LLN"\DAqaK[F[1a4"\"\d6o6$*<<>6KD%#33((u56$A"\sB B B c|}|jjDcgc]\}}|jvrd|d|}}}dj|}|r |ddd|dS|Scc}}w)N*=z, ))__dict__r:r)join)r, standard_reprr>r?additional_kwargsadditional_reprr original_reprs r!__repr__z&strict..wrap..__repr__s!.d 3 !% 3 3 5%1 8 88s!A5M%!% #')),=">GX-,-R/@Bj]jj%s A* validate_rz' 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.cjD] } || y#ttf$r}t|j||d}~wwxYw)z%Run class validators on the instance.)r*r0N)__class_validators__r3r4r__name__)r,r*r5rs r!validatez&strict..wrap..validatesW 55 l ldO l#I.l= HZHZbcdjkklsA AA TrS"__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)rS)r,argsr8r initial_inits r!init_with_validatez0strict..wrap..init_with_validates#  / / / LL r#rB)rN)!hasattrrrRrappend_create_type_validatormetadatar2 isinstancelist _is_validatorr-extendr1r;r strrBrrNdir startswithgetattrcallableleninspect signature parametersrQrrTrSsetattr)rfield_validatorsr< validatorscustom_validatorr*r7rBrNclass_validatorsr-methodrSrXrWrArMr6r%s` @@@@r!wrapzstrict..wrapcss230#,,'UV  :< 2AJ   4Q7 8 zz~~k: +!"2D9(8'9$!1I(3<;AFF83ykQA !!"23'1 QVV $ 2.?? 0S 0 0C 0D 0- LLM = ! 6 6 6" 6$CL LLM = ! k# k" k $CLH ,D??;/S$'FF#7$$V,778A=4cll^+DTFK>>  # #F + ,$4  l1 l l7;3 3 #3<<)MuU4cll^,NN   || |     Z!34 r#)rr)rr%rps ` r!r"r")s8tH$q'Hd1gHV491T1r#Tr*defaultdefault_factoryinitreprhashcomparer\r8c `t|ts|g}|i}||d<td|||||||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*rqrrrsrtrurvr\r )r]r^r) r*rqrrrsrtrurvr\r8s r!validated_fieldrys[4 i &K %H[  '       r#cttdddddfdtttfdttgtftfdt dt dt t dt d t td tffd }|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. TNrqrrrsrtrurvr\r8c ,tf|||||||d|S)Nrx)ry) rqrrrsrtrurvr\r8r*s r!_innerz"as_validated_field.._inner%s9   +    r#)rrr rr boolrr )r*r|s` r!as_validated_fieldr~s.5CJ##' sM)* xC0-?@    tn    4.  , Mr#r-r. expected_typec$t|}t|}|turytj |x}r ||||yt |t rt|||yt |tst |trytd|d|)z.Validate that 'value' matches 'expected_type'.NzUnsupported type for field 'r+) rrr _BASIC_TYPE_VALIDATORSr2r]type_validate_simple_typer rar4)r-r.roriginrVr*s r!type_validatorr>s  &F M "D,008 8 8$t$ M4 (dE=9 M: .*]C2P6tfC OPPr#rV.c g}|D]} t|||ytd|dt |d|ddj |#t$r$}|jt|Yd}~kd}~wwxYw)z8Validate that value matches one of the types in a Union.NField 'z ' with value z doesn't match any type in z . Errors: z; )rr4rZrartrI)r-r.rVerrorstr5s r!_validate_unionrOs F " " 4 * "  $}T%[M1LTFR\]a]f]fgm]n\op  " MM#a& ! ! "s A A5A00A5c4||vrtd|d|d|y)zValidate Literal type.rz' expected one of , got N)r4)r-r.rVs r!_validate_literalr^s. D'$'9$veWMNNr#c  t|ts$td|dt|j|d}t |D]\}} t |d|d||y #t$r}td|d|d|d }~wwxYw) zValidate List[T] type.rz' expected a list, got r[]Invalid item at index z in list ''N)r]r^r4rrR enumeraterr-r.rV item_typeiitemr5s r!_validate_listrds eT "'$'>tE{?S?S>TUVVQIU#R4 R dV1QCq>4 ;R R4QCz$qIJPQ Q Rs A"" B+A>>Bc0t|ts$td|dt|j|\}}|j D])\}} t |d||t |d|d||+y#t$r}td|d|d}~wwxYw) zValidate Dict[K, V] type.rz' expected a dict, got z.keyrrzInvalid key or value in dict 'rN)r]dictr4rrRr:r)r-r.rVkey_type value_typer>r?r5s r!_validate_dictrrs eT "'$'>tE{?S?S>TUVV Hj M1 M dV4=!X 6 dV1QE+Q ;M M W Ah W$q1~tX> W  W"8;tfA NOUVV W W"8;tfA NOUVV Ws0 C+D+ D 4DD  D0D++D0ct|ts$td|dt|j|d}t |D]\}} t |d||y#t$r}td|d|d}~wwxYw)zValidate Set[T] type.rz' expected a set, got rz itemzInvalid item in set 'rN)r]setr4rrRrrrs r! _validate_setrs eS !'$'=d5k>R>R=STUUQIU#D4 D dV5>4 ;D D3D6;td|d|jdt|jdt |d y)z&Validate simple type (int, str, etc.).rz ' expected rz (value: rGN)r]r4rRrrt)r-r.rs r!rrsX e] +dV;}'='=&>fT%[EYEYDZZcdhindocppq r   ,r#rc$dtddffd }|S)z-Create a type validator function for a field.r.rNcHtj|jyr)rr-r)r.rs r!r*z)_create_type_validator..validatorsuzz5%**5r#)r )rr*s` r!r[r[s666 r#ct|sytj|}t|jj }t |dk(ry|djtjjtjjtjjfvry|ddD]+}|jtjjk(s+yy)zCheck 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. FrrNT)rergrhr^rivaluesrfkind ParameterPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYVAR_POSITIONALrqempty)r*rhri parameters r!r_r_s I !!),Ii**1134J :!!}//))((" ^    1 1 7 7 7 r#)r"ry Validator_Trrrr)4rg dataclassesrrrrr functoolsrtypingr r r r r rrrrrrrrrrrrrrrr"r}ryr~rarrrrrrrrrr[r_r^rrrr__all__r r#r!rsbDD"ud{#  CL (Q(DG( ( $)OTOhQy$q'7I.JO O"E2