fL i̗jddlZddlmZddlmZmZmZmZmZm Z m Z m Z m Z ddlmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm 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-ddl.m/Z/ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7ddl8m9Z9dd l:m;Z;dd lm?Z?m@Z@mAZAmBZBmCZCmDZDm Z mEZEmFZFmGZGmHZHmIZImJZJdd lKmLZLdd lMmNZNddlOmPZQddlRmSZS ddl>mTZTdZVdZWeXddZYeYdZZeYdZ[eYdZ\eYdZ]eYdZ^de_de e`dffdZaeaeQZbebdk\rdnd Zcd!ZPde_dd"fd#ZdGd$d%e5ZeGd&d'Zfd(e4de fd)ZgGd*d+ZhGd,d-ZiGd.d/Zjed0d1d2Zked3d4d2Zled5d6d2Zmed7d8d2Zned9d:d2Zoed9d;d2Zpdeddfd?Zqd@e_d=e7d>eddfdAZrd=e7d>eddfdBZsdCe_d=e e1e7fd>eddfdDZtd=e7d>eddfdEZud=e1d>eddfdFZv dSd(e2d@e_dGeedHe dIee dJeeTdKewdLewddfdMZxdNe ee(fde_fdOZydNe ee(fde_fdPZzdQe_deee_effdRZ{y#eU$r ddl>mHZTYewxYw)TN) ConfigParser) AnyCallableDictListOptionalSetTupleTypeUnion) ErrorCode) ARG_NAMED ARG_NAMED_OPTARG_OPTARG_POS ARG_STAR2MDEFArgumentAssignmentStmtBlockCallExprClassDefContext Decorator EllipsisExprFuncBaseFuncDefJsonDict MemberExprNameExprPassStmtPlaceholderNodeRefExprStrExpr SymbolNodeSymbolTableNodeTempNodeTypeInfo TypeVarExprVar)Options)CheckerPluginInterfaceClassDefContextFunctionContext MethodContextPluginReportConfigContextSemanticAnalyzerPluginInterface) dataclasses)set_callable_name)make_wildcard_trigger) AnyType CallableTypeInstanceNoneType Overloaded ProperTyper TypeOfAnyTypeType TypeVarId TypeVarType UnionTypeget_proper_type) fill_typevars)get_unique_redefinition_name) __version__)is_valid_field) TypeVarDef)r? pydantic-mypyzpydantic-mypy-metadataz.main.BaseModelz.env_settings.BaseSettingsz.main.ModelMetaclassz .fields.Fieldz.dataclasses.dataclassversionreturn.cvttt|jddj dS)N+r.)tuplemapint partitionsplitrIs V/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pydantic/v1/mypy.pyparse_mypy_versionrUWs/ S'++C0399#>? @@)ribuiltins __builtins__zTypingType[Plugin]ctS)z `version` is the mypy version string We might want to use this to print a warning if the mypy version being used is newer, or especially older, than we expect (or need). )PydanticPluginrSs rTpluginr\bs  rVceZdZdeddffd ZdeddfdZdedeee gdffdZ dedd fd Z dedeee ge ffd Zdedeee gdffd Zd edeeeffdZd e ddfdZd e ddfdZd eddfdZxZS)r[optionsrJNct||_|jj|_t||yN)PydanticPluginConfig plugin_configto_data _plugin_datasuper__init__)selfr^ __class__s rTrfzPydanticPlugin.__init__ms41': ..668 !rVfullnamez+Optional[Callable[[ClassDefContext], None]]c|j|}|rLt|jtr2t d|jj Dr |j Sy)Nc3@K|]}t|tk(ywr`) get_fullnameBASEMODEL_FULLNAME.0bases rT z5PydanticPlugin.get_base_class_hook..vsU<%);;U)lookup_fully_qualified isinstancenoder(anymro$_pydantic_model_class_maker_callbackrgrisyms rTget_base_class_hookz"PydanticPlugin.get_base_class_hookrsG))(3 :chh1U UU@@@rVc.|tk(r |jSyr`)MODEL_METACLASS_FULLNAME)_pydantic_model_metaclass_marker_callbackrgris rTget_metaclass_hookz!PydanticPlugin.get_metaclass_hookzs / /AA ArVz+Optional[Callable[[FunctionContext], Type]]ch|j|}|r|jtk(r |jSyr`)rsriFIELD_FULLNAME_pydantic_field_callbackrys rTget_function_hookz PydanticPlugin.get_function_hooks/))(3 3<<>100 0rVc2|jdrtSy)Nz .from_orm)endswithfrom_orm_callbackrs rTget_method_hookzPydanticPlugin.get_method_hooks   [ )$ $rVcH|tk(rtdkrtjSy)zMark pydantic.dataclasses as dataclass. Mypy version 1.1.1 added support for `@dataclass_transform` decorator. )rN)DATACLASS_FULLNAMEMYPY_VERSION_TUPLEr3dataclass_class_maker_callbackrs rTget_class_decorator_hookz'PydanticPlugin.get_class_decorator_hooks$ ) ).@6.I== =rVctxc|jS)zjReturn all plugin config data. Used by mypy to determine if cache needs to be discarded. )rd)rgrs rTreport_config_dataz!PydanticPlugin.report_config_datas    rVcPt||j}|jyr`)PydanticModelTransformerrb transform)rgr transformers rTrxz3PydanticPlugin._pydantic_model_class_maker_callbacks .sD4F4FG rVc|jjry|jjj}|sJdt |j ddrd|j _yy)zReset dataclass_transform_spec attribute of ModelMetaclass. Let the plugin handle it. This behavior can be disabled if 'debug_dataclass_transform' is set to True', for testing purposes. Nz-callback not passed from 'get_metaclass_hook'dataclass_transform_spec)rbdebug_dataclass_transformclsinfodeclared_metaclassgetattrtyper)rgrinfo_metaclasss rTr~z8PydanticPlugin._pydantic_model_metaclass_marker_callbacks^    7 7 88NNN~ >&&(BD I;?N   8 JrVr c|j}|jddk(sJd|jddk(sJd|jd}|jd}|r$|r"t|j|j |S|r+|j dd}|d}t|ts|S|S|r|j dd}t|tr,tdkDr|jd}n|jd}t|trxt|j}t|trQ|jrEt!d|jDr)|j#|gt%|jz }|S|S) ax Extract the type of the `default` argument from the Field function, and use it as the return type. In particular: * Check whether the default and default_factory argument is specified. * Output an error if both are specified. * Retrieve the type of the argument which is specified, and use it as return type for the function. rdefaultz0"default" is no longer first argument in Field()rdefault_factoryz9"default_factory" is no longer second argument in Field())ric3<K|]}t|tywr`)rtr?)roargs rTrqz:PydanticPlugin._pydantic_field_callback..sRSJsK8Rs)args)default_return_typecallee_arg_namesr+error_default_and_default_factory_specifiedapicontext arg_typesrtrr:ritemsr7rAret_typer8all copy_modifiedlen) rgrdefault_any_type default_argsdefault_factory_args default_type default_argdefault_factory_typers rTrz'PydanticPlugin._pydantic_field_callbacks22##A&)3g5gg3##A&*;;x=xx;xx{ "xx{ 0 7 M# # ==+A.L&q/Kk<8##2 /"#&==#3A#6 . ;%0+?+E+Ea+H(,@+E+E+G+J(. =*+?+H+HIx2 RHMMRR (553QV2Wc7+ ,rVcV|jDcic]}|t||c}Scc}wr`)rr)rgrs rTrczPydanticPluginConfig.to_datas&37>>BCWT3''BBBs&) rrrrr__annotations__r+rfrrrrcrVrTrarasRI#''##,,D,&Cc3hCrVrarc|j}t|tr |j}t|tr't|j t r |j }n]t|t r|}nJd|d|jjd}t||j|j|jS|jjjt}| |jS|jdijd}|dur4t!t#|j|j|j|jS)z3 Raise an error if orm_mode is not enabled z ctx.type: (of type )rorm_modeT)rrtr=itemr7rr8rhrerror_unexpected_behaviorrrrmetadatar METADATA_KEYerror_from_ormget_name)rctx_type model_typedetailpydantic_metadatars rTrrs xxH(H%==(L)j9J9JH.U&& Hh ' hZz(2D2D2M2M1NaP!&#''3;;?&&&"0044\B &&& $$Xr266zBHtx 0#''3;;G  " ""rVc eZdZUhdZeeed<dededdfdZ d&dZ d&d Z d'd Z d d de d fdZde d dd deddfdZde d ddfdZde d deddfdZdeded fdZededededefdZedeedefdZededeeeeffdZde d ded ed!ede ef d"Zde d dd defd#Z ede d d$edefd%Z!y)(r>extrafrozenrallow_mutationalias_generatorallow_population_by_field_nametracked_config_fieldsrrbrJNc ||_||_yr`)_ctxrb)rgrrbs rTrfz!PydanticModelTransformer.__init__)s *rVc.|j}|jj}|j|j }|j |}t d|jddD}|j||||j||j||jduxs|jdu|Dcic]}|j|jc}|jd|j t"<ycc}w)a Configures the BaseModel subclass according to the plugin settings. In particular: * determines the model config and fields, * adds a fields-aware signature for the initializer and construct methods * freezes the class if allow_mutation = False or frozen = True * stores the fields, config, and if the class is settings in the mypy metadata for access by subclasses c3@K|]}t|tk(ywr`)rlBASESETTINGS_FULLNAMErns rTrqz5PydanticModelTransformer.transform..=s`$,t,0EE`rrNFT)r)fieldsr)rrradjust_validator_signaturescollect_configcollect_fieldsrvrwadd_initializeradd_construct_method set_frozenrrname serializeset_values_dictrr)rgrrrr is_settingsfields rTrz"PydanticModelTransformer.transform-siiww|| ((*$$&$$V,`RVRZRZ[^\^R_``  VV[9 !!&) v'<'<'E'^Z^I^_BHIuzz5??#44I,,.'  l#Is "Dc|jjjjj D]\}}t |j ts!|j jd}t |tsKt |jtsf|jjtdk(sd|j j_y)a[When we decorate a function `f` with `pydantic.validator(...), mypy sees `f` as a regular method taking a `self` instance, even though pydantic internally wraps `f` with `classmethod` if necessary. Teach mypy this by marking any function whose outermost decorator is a `validator()` call as a classmethod. rz.class_validators.validatorTN)rrrnamesrrtruroriginal_decoratorsrcalleer ri _NAMESPACEfuncis_class)rgrrz first_decs rTrz4PydanticModelTransformer.adjust_validator_signaturesFs++11779 2ID##((I.HH88; y(3"9#3#3X>!((11 |C^5__-1CHHMM* 2rVModelConfigDatac |j}|j}t}|jjD]}t |t s|jdk(s$|jjD]3}t |ts|j|j|5|js}|jr|jjst|j ||j"j$ddD]}t&|j(vr|j j+t-t/||j(t&dj1D]\}}|j3|||S)zz Collects the values of the config attributes that are used by the plugin, accounting for parent classes. ConfigrNr)rrrdefsbodyrtrrrupdateget_config_updatehas_alias_generatorrrbrerror_required_dynamic_aliasesrrrwrradd_plugin_dependencyr5rlr setdefault) rgrrrstmtsubstmtrrvalues rTrz'PydanticModelTransformer.collect_configXsMiigg "HHMM BDdH-yyH$#yy~~CG%g~> MM$"8"8"ABC .."AA**HH2377DA BHHLL$ /D4==0 GG ) )*? T@R*S T#}}\:8DJJL / e!!$. /  / rV model_configPydanticModelFieldc |j}|jj}g}t}|jjD]}t |t s|jd}t |trt|jsJ|js,|jjrt|j||j j"j%|j}||j&} t | t(rt | t*s| j,r|j/|||} |j1|\} } | r8|j2s,|jj4rt7|j||j9t;|j| | | |j<|j>|jA|j|jC} |j jDddD]}tF|jHvrg}|jjKtMtO||jHtFdjQD]q\}|vr9t:jS||}|jA|j9|Cfd| D\}| jU||j9|s|| z} | S)zR Collects the fields for the model, accounting for parent classes rNr is_requiredaliashas_dynamic_aliaslinecolumnrrc3BK|]}|jk(s|ywr`)r)roars rTrqz:PydanticModelTransformer.collect_fields..sHa4Hs)+rrsetrrrtrlvaluesr rEr new_syntaxrbrerror_untyped_fieldsrrrrrur"r* is_classvarget_is_requiredget_alias_inforrr appendrrraddcopyrwrrr r5rlr deserializeremove)rgrrrr known_fieldsrlhsrzrurrr all_fieldsrsuperclass_fieldsdatarrs @rTrz'PydanticModelTransformer.collect_fieldsws iiiimmu HHMM5 'DdN3,,q/Cc8,N3884L??t'9'9'M'M$SWWd3 ((..$$SXX.C{88D$0dC(..sD#>K'+':':4'@ $E$!$CC&&DD.sww= MM" +&7;;     SXX &k5 'l[[] HHLL$ 8D4==0 "  GG ) )*? T@R*S T"mmL9(CIIK 4 d|+.::4FE $$T*%,,U3H:HHU%%e,%,,U3 4+Z7J# 8$rVrrrc|j}|jj}|jdu}|xs$t |j xr |j }|j ||||}|j||sCtd} |jt| ttjdtd|jj j"vrt%|d|t'yy)z Adds a fields-aware `__init__` method to the class. The added `__init__` will be annotated with types vs. all `Any` depending on the plugin settings. Ttypedforce_all_optional use_aliaskwargsNrf)rrbrrrr get_field_argumentsshould_init_forbid_extrar*r#rr6r<explicitrrrr add_methodr9) rgrrrrr/r1r0init_argumentsvars rTrz(PydanticModelTransformer.add_initializers ii""--99E ( D  & & Tv/T/T+T- 11 %4FR[2 ,,VV<h-C  ! !(3 8J8J0KTS\"] ^ SWW\\// / sJ C 0rVc |j}|jjtd|jjtdg}t |t g}t td||dt}|j|ddd}|g|z}|jjtd}d }|jjd z|z} td k\rt|| td k\r$td |jjdzn td g|tt j"} t%|| g|tt j"} nt'|| d g|} t%|| g|} t)t*| |jj,j.|<t1| tr| } n t| } t3|d|| | | dy)z Adds a fully typed `construct` classmethod to the class. Similar to the fields-aware __init__ method, but always uses the field names (not aliases), and does not treat settings fields as optional. z.setz.str _fields_setNTFr.z.object_PydanticBaseModelrM)r)r rz .construct) namespace construct) return_type self_typetvar_defis_classmethod)rr named_type BUILTINS_NAMEr@r9rr*rr3rrirr?r>r6r<from_omitted_genericsr)rFr&rrrrtr6) rgrrset_stroptional_set_strfields_set_argumentconstruct_argumentsobj_typeself_tvar_name tvar_fullnametvdself_tvar_exprrAs rTrz-PydanticModelTransformer.add_construct_methodsii''$$ d%;cgg>P>PTaSbbfQg>h=ij$gxz%:;&s=:J'KM]_celm"66vT^cot6u236II77%%w&?@-((3.?  '*W4bCGG,<,<|,KL"2 778 C) 778 N^]BHMC(HUN--R >* c; 'I#C(I   ! rVrc|j}|jj}|D]6}|jj |j }||j }t|tr||_ Ot|tr1|jjs|jj t|}d|d|j"d} t%| |j|j|j'|d}||_||_ t)|dzt+|z|_t/t0||jt+|<9y#t$rt!|}YwxYw)z Marks all fields as properties so that attempts to set them trigger mypy errors. This is the same approach used by the attrs and dataclasses plugins. Nzsym_node.node: rrF)r1rM)rrrrrrrurtr* is_propertyr"rfinal_iterationdeferr TypeErrorreprrhrto_varrlr _fullnamer&r) rgrrrrrsym_noder8var_strrs rTrz#PydanticModelTransformer.set_frozens. iiww|| GEzz~~ejj1H#mmc3'&,CO_5cgg>U>UGGMMO,"%c( /wiz#--PQRF-fcggswwGll45l9"( ,T 2S 88C= H ,;D#,F 8C=)/ G%,"&s),s6 E  E76E7rc|jd}t|tr|j|jvsy|jdk(rt|j t r|j jdk(}n`t|j tr|j jdk(}n,t|j|jj|yt|S|jdk(rCd}t|j tr|j jdk(rd }t| St|j trF|j jd vr.td i|j|j jd k(iSt|j|jj|y)z Determines the config update due to a single statement in the Config class definition. Warns if a tracked config attribute is set to a value the plugin doesn't know how to interpret (e.g., an int) rNrforbid) forbid_extrarTz builtins.NoneF)r ) builtins.Truezbuiltins.Falser]r)rrtr rrrvaluer$rrerror_invalid_config_valuerrrri)rgrr)r\r s rTr z*PydanticModelTransformer.get_config_update<sL ooa 3)chh$:T:T.T 88w '..'2&~~33x? GNNJ7&~~22h> *388TYY]]GL" = = 88( ("& '..(38O8OSb8b&+#"7JK K gnnh /GNN4K4KOr4r"\chh0G0G?0Z%[\ \"388TYY]]GDrVrrr)c|j}t|trBt|j|j j }tj| St|trt|jtr|jjtk(rt|j|j D]'\}}||dk(r|j"t$ucS|dk(s'yt|j|j j }tj| St|t$S)zg Returns a boolean indicating whether the field defined in `stmt` is a required field. rrF)r^rtr'rArrrrtype_has_implicit_defaultrrr#rirzipr arg_namesrhr)rrr)expr value_typerrs rTr!z(PydanticModelTransformer.get_is_requiredXs {{ dH %(#(();)@)@AJ/II*UU U dH %*T[['*Jt{{OcOcguOu!DNN; ! T<49#4==L88,,  !)#(();)@)@AJ/II*UU U$ --rVtype_ct|tryt|trtd|jDryy)z Returns True if the passed type will be given an implicit default value. In pydantic v1, this is the case for Optional types and Any (with default value None). Tc3`K|]&}t|txst|t(ywr`)rtr9r6)rors rTrqzEPydanticModelTransformer.type_has_implicit_default..|s+0 HLJtX & C*T7*C C0 s,.F)rtr6r@rvr)rfs rTraz2PydanticModelTransformer.type_has_implicit_defaultrs= eW % eY 'C0 PUP[P[0 - rVct|j}t|tryt|tr7t|jt r|jj tk(syt|jD];\}}|dk7r |j|}t|tr|jdfcSyy)a  Returns a pair (alias, has_dynamic_alias), extracted from the declaration of the field defined in `stmt`. `has_dynamic_alias` is True if and only if an alias is provided, but not as a string literal. If `has_dynamic_alias` is True, `alias` will be None. )NFrF)NT) r^rtr'rrr#rir enumeratercrr$r)rrdiarg_namers rTr"z'PydanticModelTransformer.get_alias_infos{{ dH % tX &:dkk7+KPTP[P[PdPdhvPv$T^^4 "KAx7"))A,C#w'yy%''! "rVr/r0r1c |jjj}|Dcgc]%}|r |js|j ||||'}}|Scc}w)z Helper function used during the construction of the `__init__` and `construct` method signatures. Returns a list of mypy Argument instances for use in the generated signatures. )r/force_optionalr1)rrrr to_argument)rgrr/r0r1rr argumentss rTr3z,PydanticModelTransformer.get_field_argumentssdyy}}!!  %"9"9   d%@R^g  h    s*Ac|js&|j|t|jry|jry|j j S)aH Indicates whether the generated `__init__` should get a `**kwargs` at the end of its signature We disallow arbitrary kwargs if the extra config setting is "forbid", or if the plugin config says to, *unless* a required dynamic alias is present (since then we can't determine a valid signature). FT)ris_dynamic_alias_presentrr r\rbr)rgrrs rTr4z1PydanticModelTransformer.should_init_forbid_extrasI44,,VT&:T:T5UV   !!333rVr c\|D]}|jsy|r|D]}|jyy)z Returns whether any fields on the model have a "dynamic alias", i.e., an alias that cannot be determined during static analysis. TF)rr)rr rs rTrrz1PydanticModelTransformer.is_dynamic_alias_presentsE  E&&   ;;& rV)rJN)rJr)"rrrrr rrr-rarfrrrrrrrrrrrr  staticmethodrr r!r;rar r"rr3r4rrrrVrTrrs'3s8+O+R+<RFZA[RhDd+?&@DJ[DjnDswD,8 40D+E8 $8 tG&:!;GTGdGBHEV **,224 DAq D!Q  rVrrc8t||t|||yyr`)rr)rgrrs rTr zModelConfigData.setdefault s 4  % D#u % &rV)NNNNNN) rrrrrrfrrrrrr rrVrTrrs(,)-!%#'9=.27tn7!7 7 4. 7 )1 7&d^7 Ic3hI X&78 T &c&#&$&rVrz pydantic-ormzInvalid from_orm callPydanticzpydantic-configzInvalid config valuezpydantic-aliaszDynamic alias disallowedzpydantic-unexpectedzUnexpected behaviorzpydantic-fieldzUntyped field disallowedzInvalid Field defaults model_namerrc<|jd|d|ty)N"z" does not have orm_mode=Truecode)fail ERROR_ORM)rrrs rTrrsHHq 9 :G)HTrVrc<|jd|d|ty)NzInvalid value for "Config.rr)r ERROR_CONFIG)rrrs rTr_r_sHH)$q 17HNrVc4|jd|ty)Nz#Required dynamic aliases disallowedr)r ERROR_ALIASrrs rTr r "sHH 2G+HNrVrcVd}d|d}|d|dz }|j||ty)Nz6https://github.com/pydantic/pydantic/issues/new/choosez7The pydantic mypy plugin ran into unexpected behavior:  z&Please consider reporting this bug at z so we can try to fix it!r)rERROR_UNEXPECTED)rrrlink full_messages rTrr&sA DDLVHTVWLField default and default_factory cannot be specified togetherr)rERROR_FIELD_DEFAULTSrs rTrr4sHH Mw]qHrrVrr@rArBrCis_newcT|jj}||jvrn|j|} | jrSt | j t r9|jjjj| j |xs t|}|s|r0ttdtj|dtg} n+|xs t|}ttd|dtg} | |z}ggg} } } |D]o}|j sJd| j#|j | j#t%|j&| j#|j(q|j*j-t.d}t1| | | |||r|gnd}t ||t3t5g}||_t7|||_||_t=|dz|z|_|j@|_ ||jvr2tC||j}|j||j|<|rud|_"t||j8}||_|j>|_d|_#tI|tKd g|}|j@|_ tMtN|} ntMtN|} d| _| |j|<|jPjjj#|y) z} Adds a new method to a class. This can be dropped if/when https://github.com/python/mypy/issues/7301 is merged _clsN__pydantic_self__z"All arguments must be fully typed.z .function) variablesrMTr))rrrplugin_generatedrtrurrrr'rBrr*r=make_normalizedrrzr#rryr|rrDrEr7rr!r4rrrlrWrrC is_decoratedrCrr r&rdefn)rrrr@rArBrCrrrzfirstrrc arg_kindsr function_type signaturerr_namerdecs rTr6r68s 77<r?r@rA mypy.typevarsrB mypy.utilrC mypy.versionrD mypy_versionpydantic.v1.utilsrErFrrrrrrmrr}rrrrPrUrrEr\r[rarrrrrrrrrrrr_r rrrrr6rlrrrrVrTrs %]]]%>!%*5(24,5% !' cr] "|?3%,&@A(\)=><}-"|#9:AAc3hA( 50H< .  C0r Vr j"C"CJ#=#T#2ll^ ""J&&> n&=z J *,BJO (*DjQ 24I:V*,F S  !13KZXUsU)?U'UVZUOSO/NOY`OeiOO(GORYO^bO; ;24SST;_f; ;G=GGTXGs5KsV]sbfs!%%) P% P% P% x.P% P% ~ P% z" P%P% P% P%fE(J./Ch *+CHT#s(^$<m5445sH## H21H2