;iE tUddlZddlZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZmZddlmZmZddlmZmZddlmZddlmZddlmZmZddl m!Z!dd l"m#Z#m$Z$m%Z%m&Z&m'Z'dd l(m)Z)m*Z*ej+d krdd lm,Z,ej+d krddlmZeddZ-eZ.e eeee edffZ/e e.eefZ0ej+dkr!ee/eefZ1eeee0fZ2neZ1eZ2e1Z3e2Z4GddeZ5dede eefdefdZ6dee5de edfddfdZ7i8j9Z:eee;d<dede e.fdZffdZ?d ee5d!e e=efd"e e=e@fd#e ee@fddf d$ZAdS)%N) TYPE_CHECKINGAnyClassVarDict ForwardRefGenericIteratorListMappingOptionalTupleTypeTypeVarUnioncast)WeakKeyDictionaryWeakValueDictionary) AnnotatedLiteral)gather_all_validators) DeferredType) BaseModel create_model) JsonWrapper)display_as_typeget_all_type_hintsget_args get_origin typing_base) all_identicallenient_issubclass )_UnionGenericAliasr#)r GenericModelT GenericModel)bound.)r# c@eZdZUdZdZeeed<eree e dfed<de e de e ee e edffde efd Zede ede e edfdefd Zed edee efd Zd S)r)F __concrete__.__parameters__clsparamsreturnc dtdtffd }t||}||Sjrt jvrtdt|ts|f}tur(td|Drtdtdstd j d t|tt!j|}t%||r|rS|}t-}t/}d |D}fd |D} t3\} } t5t6tt9|f| pjft|zd|dd | } |t>| <| rCd} |}t@j!| jj"}| | ur|#|| } |dz }| | uj$| _$tdtK|D}| | _|r|| _| t||<tM|dkr| t||d<tO| | ||| S)aInstantiates a new class from a generic class `cls` and type variables `params`. :param params: Tuple of types the class . Given a generic class `Model` with 2 type variables and a concrete model `Model[str, int]`, the value `(str, int)` would be passed to `params`. :return: New model class inheriting from `cls` with instantiated types described by `params`. If no parameters are given, `cls` is returned as is. _paramsr2ct|}t|dkr8t|dtrt |d|df}||fS)Nr)rlen isinstancelisttuple)r4argsr0s HC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pydantic/v1/generics.py _cache_keyz2GenericModel.__class_getitem__.._cache_keyWsVG$$D4yyA~~*T!Wd";";~d1gQ0% %Nz?Cannot parameterize a concrete instantiation of a generic modelc3@K|]}t|tVdSN)r9r.0params r= z1GenericModel.__class_getitem__..es,&V&Vez%'A'A&V&V&V&V&V&Vr?zDType parameters should be placed on typing.Generic, not GenericModelr/zType z< must inherit from typing.Generic before being parameterizedcFi|]\}}t|tu||Sr-)rr)rCkvs r= z2GenericModel.__class_getitem__..us/\\\1jmmS[>[>[q!>[>[>[r?cdi|],}|jv |tj|jf-Sr-) __fields__r field_info)rCrGr0s r=rIz2GenericModel.__class_getitem__..ws=xxxdeiliwdwdw!lnncnQ&7&BCdwdwdwr?) __module____base__ __config____validators____cls_kwargs___ci|]}|dSrAr-rBs r=rIz2GenericModel.__class_getitem__..s U U UUUD U U Ur?r7r)(rCacheKey_generic_types_cachegetr.r __bases__ TypeErrorr9r;r)anyhasattr__name__check_parameters_countdictzipr/r keysvalues__concrete_name__rritemsget_caller_frame_inforrrrM__parameterized_bases___assigned_parameterssysmodules__dict__ setdefaultConfigiter_contained_typevarsr8_prepare_model_fields)r0r1r>cached typevars_map model_name validators type_hintsinstance_type_hintsfields model_modulecalled_globally created_modelobject_by_referencereference_namereference_module_globals new_paramss` r=__class_getitem__zGenericModel.__class_getitem__Ksq & & & & & & & &&))**V*<*<==  M   _s} < <]^^ ^&%(( YF ,  3&V&Vv&V&V&V#V#V bcc cs,-- pnCLnnnoo osF+++59#c>PRX:Y:Y5Z5Z **,,l.A.A.C.C D D  J**622 *3// ',,2244 \\ \\\xxxxM`xxx(=(?(?% o    '93>%(C(CL(Q(Q"R"RR)#        /;]+  &"& 'N'*{=3K'L'U $%]::&>&I&I.Zg&h&h##%&]:: #z   U U&=l>Q>Q>S>S&T&T U U U  *4^ "  6+5M (4AZZ//0 v;;!  :G F1I!6!6 7 mV5H,WWWr?c^d|D}d|}|jd|dS)aCompute class name for child classes. :param params: Tuple of types the class . Given a generic class `Model` with 2 type variables and a concrete model `Model[str, int]`, the value `(str, int)` would be passed to `params`. :return: String representing a the new class where `params` are passed to `cls` as type variables. This method can be overridden to achieve a custom naming scheme for GenericModels. c,g|]}t|Sr-)rrBs r= z2GenericModel.__concrete_name__..s BBB%u--BBBr?z, [])joinr[)r0r1 param_namesparams_components r=razGenericModel.__concrete_name__sDCB6BBB 99[11,44!14444r?rnc#Kdttdtdtttffd }jD]}t |tst |dds*tvrH|tvr=fdtD}|||Ed{V{||Ed{VdS)a Returns unbound bases of cls parameterised to given type variables :param typevars_map: Dictionary of type applications for binding subclasses. Given a generic class `Model` with 2 type variables [S, T] and a concrete model `Model[str, int]`, the value `{S: str, T: int}` would be passed to `typevars_map`. :return: an iterator of generic sub classes, parameterised by `typevars_map` and other assigned parameters of `cls` e.g.: ``` class A(GenericModel, Generic[T]): ... class B(A[V], Generic[V]): ... assert A[int] in B.__parameterized_bases__({V: int}) ``` base_model mapped_typesr2c3Ktfd|jD}||}||us|urdS|VdS)Nc3(K|] }|V dSrAr-)rCrDrs r=rEzQGenericModel.__parameterized_bases__..build_base_model..s(#_#_EL$7#_#_#_#_#_#_r?)r;r/r{)rrbase_parametersparameterized_baser0s ` r=build_base_modelz>GenericModel.__parameterized_bases__..build_base_modelsp$#_#_#_#_ZE^#_#_#___O!+!=!=o!N!N !Z//3E3L3L$ $ $ $ $ $r?r/NcDi|]\}}|||Sr-)rV)rCkeyvaluerns r=rIz8GenericModel.__parameterized_bases__..s<555@JU\--eU;;555r?) rr)Parametrizationr rW issubclassgetattrrerb)r0rnrrrs`` r=rdz$GenericModel.__parameterized_bases__sJ0 %\* %:I % d<( ) % % % % % %- F FJj,77 FZ)94@@ F,,,!555  5555NbcfNgNmNmNoNo555L 0/ LIIIIIIIIII,+J EEEEEEEEEE9 F Fr?N)r[rM __qualname__ __slots__r.rbool__annotations__rr TypeVarTyperr(rrr{ classmethodstrrarr rdr-r?r=r)r)@s9I#(L(4.(((:!{C'7!89999]tM2]E$s)USWX[S\^aSaMbBb>> replace_types(Tuple[str, Union[List[str], float]], {str: int}) Tuple[int, Union[List[int], float]] r&c38K|]}t|VdSrA replace_types)rCargrs r=rEz replace_types..s-"U"UC=h#?#?"U"U"U"U"U"Ur?N_namer"c38K|]}t|VdSrAr)rCtrs r=rEz replace_types..0s-"Q"Q!=H#=#="Q"Q"Q"Q"Q"Qr?c38K|]}t|VdSrAr)rCelementrs r=rEz replace_types..8s-SS']7H==SSSSSSr?)rrrrr; ExtLiteralrf version_inforrVr r9rrtypingrtypes UnionTyper%r!r)r.r/r r:r inner_typerr) rr type_args origin_typeannotated_type annotationsresolved_type_args resolved_listnew_types ` r=rrs  IU##Ki'0$~x@@% BTBTTUUz!!s'76'A'AkU\F\F\||E5)))/""U"U"U"U9"U"U"UUU $6 7 7 L  #5+.. ${K88 $w--9 "&%+66K&&&  w & &;%/+I+I%k3EFF F-.. )-e\BB)5K])( ""Q"Q"Q"Qy"Q"Q"QQQ $6 7 7 L'((%$&&SSSSUSSSSS  . . L -e[AA()98DD ||E5))H(C  (###r?r0 parametersc t|}t|j}||kr*||krdnd}td|d|jd|d|dS)NmanyfewzToo z parameters for z ; actual z , expected )r8r/rXr[)r0ractualexpected descriptions r=r\r\Msv __F3%&&H  & 1 1ffu p{ppCLppSYppfnppqqqr? DictValuesrHc#Kt|tr|VdSt|dr3t|s$t |t r|jEd{VdSt|ttfr|D]}t|Ed{VdSt|}|D]}t|Ed{VdS)zdRecursively iterate through all subtypes and type args of `v` and yield any typevars that are found.r/N) r9rrZrr!r)r/rr:rkr)rHvarr<rs r=rkrkXs!W 4 $ % %4jmm4@RSTVb@c@c4########## A D) * *4 4 4C.s33 3 3 3 3 3 3 3 3 4 4{{ 4 4C.s33 3 3 3 3 3 3 3 3 4 4r?c tjd}n.#t$r}td|d}~wt$rYdSwxYw|j}|d|j|ufS)z Used inside a function to check whether it was called globally Will only work against non-compiled code, therefore used only in pydantic.generics :returns Tuple[module_name, called_globally] r6z2This function must be used inside another functionN)NFr[)rf _getframe ValueError RuntimeErrorAttributeError f_globalsrVf_locals)previous_caller_framee frame_globalss r=rcrcgs # a 0 0 XXXOPPVWW {{)3M   Z ( (*?*HM*Y YYs A1 AArvrsrrrncN|jD]\}}||vr|jjtusJ|jjtusJ|jj||}t ||}||_||_|||j|<dS)zP Replace DeferredType fields with concrete type hints and prepare them. N) rKrbr __class__rr outer_type_preparer)rvrsrrrnrfieldfield_type_hint concrete_types r=rlrlys$.4466 ; ; U f  ;( <<<< {$ 444ek6K444-c2%o|DD # ) -: %c** ; ;r?)Brfrrrrrrrrr r r r r rrrrweakrefrrtyping_extensionsrrrpydantic.v1.class_validatorsrpydantic.v1.fieldsrpydantic.v1.mainrrpydantic.v1.typesrpydantic.v1.typingrrrrrpydantic.v1.utilsr r!rr%r(rrTrGenericTypesCacheAssignedParametersrUrer)rr\r`rrrrkrrrctyperlr-r?r=rs ";:::::::>>>>>>>>>>>>>>++++++44444444))))))eeeeeeeeeeeeee????????w))))))v~>>>  cCsCx0 1+tCy01v+Hd9o,EF*4 ?O+KL+*)(***)++xFxFxFxFxF9xFxFxFvOOS(9OcOOOOdr\ 2rc3hrTXrrrr - DI--- 4s 4x '< 4 4 4 4ZuXc]D%89ZZZZ$; %; CH ;!d+;#t)$ ;  ;;;;;;r?