+
    7*i̗  c                   s   ^ RI t ^ RIHt ^ RIHtHtHtHtHtH	t	H
t
HtHt ^ RIHt ^ RIHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t- ^ RI.H/t/ ^ RI0H1t1H2t2H3t3H4t4H5t5H6t6H7t7 ^ RI8H9t9 ^ R	I:H;t; ^ R
I<H=t= ^ RI>H?t?H@t@HAtAHBtBHCtCHDtDHtHEtEHFtFHGtGHHtHHItIHJtJ ^ RIKHLtL ^ RIMHNtN ^ RIOHPtQ ^ RIRHStS  ^ RI>HTtT RtVRtW]XRRK tY]Y R2tZ]Y R2t[]Y R2t\]Y R2t]]Y R2t^R R lt_]_! ]Q4      t`]`RL8  d   RMRta^tPR R ltb ! R R ]54      tc ! R! R"4      tdR# R$ lte ! R% R&4      tf ! R' R(4      tg ! R) R*4      th]! R+R,R-4      ti]! R.R/R-4      tj]! R0R1R-4      tk]! R2R3R-4      tl]! R4R5R-4      tm]! R4R6R-4      tnR7 R8 ltoR9 R: ltpR; R< ltqR= R> ltrR? R@ ltsRA RB lttRMRC RD lltuRE RF ltvRG RH ltwRI RJ ltxR#   ]U d    ^ RI>HHtT  ELi ; i)N    N)ConfigParser)	AnyCallableDictListOptionalSetTupleTypeUnion)	ErrorCode)	ARG_NAMEDARG_NAMED_OPTARG_OPTARG_POS	ARG_STAR2MDEFArgumentAssignmentStmtBlockCallExprClassDefContext	DecoratorEllipsisExprFuncBaseFuncDefJsonDict
MemberExprNameExprPassStmtPlaceholderNodeRefExprStrExpr
SymbolNodeSymbolTableNodeTempNodeTypeInfoTypeVarExprVarOptions)CheckerPluginInterfaceClassDefContextFunctionContextMethodContextPluginReportConfigContextSemanticAnalyzerPluginInterface)dataclasses)set_callable_name)make_wildcard_trigger)AnyTypeCallableTypeInstanceNoneType
Overloaded
ProperTyper	   	TypeOfAnyTypeType	TypeVarIdTypeVarType	UnionTypeget_proper_type)fill_typevars)get_unique_redefinition_name)__version__)is_valid_field)
TypeVarDef)r>   pydantic-mypyzpydantic-mypy-metadataz.main.BaseModelz.env_settings.BaseSettingsz.main.ModelMetaclassz.fields.Fieldz.dataclasses.dataclassc                sJ    V ^8  d   QhR\         R\        \        R3,          /# )   versionreturn.)strr   intformat   "5/usr/lib/python3.14/site-packages/pydantic/v1/mypy.py__annotate__rP   W   s&     A A Ac3h A    c                 s~    \        \        \        V P                  R 4      ^ ,          P	                  R4      4      4      # )Z+.)ZtupleZmaprK   Z	partitionZsplitrH      &rO   parse_mypy_versionrU   W   s/    S'++C0399#>?@@rQ   ZbuiltinsZ__builtins__c                s(    V ^8  d   QhR\         RR/# )rG   rH   rI   zTypingType[Plugin]rJ   rL   rN   rO   rP   rP   b   s      C 0 rQ   c                s    \         # )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).
)PydanticPluginrS   rT   rO   pluginrX   b   s
     rQ   c                   s   a a ] tR t^lt oV3R lV 3R lltV3R lR ltV3R lR ltV3R lR ltV3R	 lR
 ltV3R lR lt	V3R lR lt
V3R lR ltV3R lR ltV3R lR ltRtVtV ;t# )rW   c                $   < V ^8  d   QhRS[ RR/# rG   optionsrI   Nr)   rM   __classdict__   "rO   rP   PydanticPlugin.__annotate__m   s     " " "D "rQ   c                s   < \        V4      V n        V P                  P                  4       V n        \        SV `  V4       R # N)PydanticPluginConfigplugin_configto_data_plugin_dataZsuper__init__)selfr[   	__class__s   &&rO   re   ZPydanticPlugin.__init__m   s4    1': ..668!rQ   c                rY   )rG   fullnamerI   z+Optional[Callable[[ClassDefContext], None]]rV   r\   r^   rO   rP   r_   r   s      C 4a rQ   c                sT   V P                  V4      pV'       d   \        VP                  \        4      '       do   \        ;QJ d0    R  VP                  P
                   4       F  '       g   K   RM%	  RM!! R  VP                  P
                   4       4      '       d   V P                  # R# )c              3   F   "   T F  p\        V4      \        8H  x  K  	  R # 5ir`   )get_fullnameBASEMODEL_FULLNAME.0Zbase   & rO   	<genexpr>Z5PydanticPlugin.get_base_class_hook.<locals>.<genexpr>v   s     U<%);;   !TFN)lookup_fully_qualified
isinstancenoder&   anymro$_pydantic_model_class_maker_callbackrf   rh   sym   && rO   get_base_class_hookZ"PydanticPlugin.get_base_class_hookr   se    ))(3:chh11sUUsssUUUU@@@rQ   c                L   < V ^8  d   QhRS[ RS[S[S[.R3,          ,          /# rG   rh   rI   NrJ   r   r   r,   r\   r^   rO   rP   r_   z   s.      3 8HoEVX\E\<]3^ rQ   c                s4    V\         8X  d   V P                  # R # r`   )MODEL_METACLASS_FULLNAME)_pydantic_model_metaclass_marker_callbackrf   rh      &&rO   get_metaclass_hookZ!PydanticPlugin.get_metaclass_hookz   s    //AAArQ   c                rY   )rG   rh   rI   z+Optional[Callable[[FunctionContext], Type]]rV   r\   r^   rO   rP   r_      s      # 2_ rQ   c                sz    V P                  V4      pV'       d"   VP                  \        8X  d   V P                  # R # r`   )rq   rh   FIELD_FULLNAME_pydantic_field_callbackrw   ry   rO   get_function_hookZ PydanticPlugin.get_function_hook   s/    ))(33<<>1000rQ   c                sN   < V ^8  d   QhRS[ RS[S[S[.S[3,          ,          /# )rG   rh   rI   )rJ   r   r   r.   r	   r\   r^   rO   rP   r_      s-       =/SWBW9X0Y rQ   c                s@    VP                  R 4      '       d   \        # R# )z	.from_ormN)endswithfrom_orm_callbackr   r   rO   get_method_hookZPydanticPlugin.get_method_hook   s    [))$$rQ   c                r{   r|   r}   r\   r^   rO   rP   r_      s.       (OK\^bKbBc9d rQ   c                sR    V\         8X  d   \        R8  d   \        P                  # R# )zpMark pydantic.dataclasses as dataclass.

Mypy version 1.1.1 added support for `@dataclass_transform` decorator.
N)   r   )DATACLASS_FULLNAMEMYPY_VERSION_TUPLEr2   Zdataclass_class_maker_callbackr   r   rO   get_class_decorator_hookZ'PydanticPlugin.get_class_decorator_hook   s$    
 )).@6.I===rQ   c                s<   < V ^8  d   QhRS[ RS[S[S[3,          /# rG   ctxrI   )r0   r   rJ   r   r\   r^   rO   rP   r_      s$     ! !&9 !d38n !rQ   c                    V P                   # )zZReturn all plugin config data.

Used by mypy to determine if cache needs to be discarded.
)rd   )rf   r   r   rO   report_config_dataZ!PydanticPlugin.report_config_data   s    
    rQ   c                rY   rG   r   rI   Nr,   r\   r^   rO   rP   r_      s          D  rQ   c                sP    \        WP                  4      pVP                  4        R # r`   )PydanticModelTransformerrb   	transform)rf   r   Ztransformerry   rO   rv   Z3PydanticPlugin._pydantic_model_class_maker_callback   s    .s4F4FGrQ   c                rY   r   r   r\   r^   rO   rP   r_      s      @ @_ @QU @rQ   c                s    V P                   P                  '       d   R# VP                  P                  P                  pV'       g   Q R4       h\        VP                  RR4      '       d   RVP                  n        R# R# )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)rb   debug_dataclass_transformclsinfoZdeclared_metaclassgetattrtyper   )rf   r   Zinfo_metaclassry   rO   r   Z8PydanticPlugin._pydantic_model_metaclass_marker_callback   sd     77788NNN~>&&(BDII;?N8 JrQ   c                rY   )rG   r   rI   r	   )r-   r\   r^   rO   rP   r_      s     3  3 O 3  3 rQ   c                sT   VP                   pVP                  ^ ,          R8X  g   Q R4       hVP                  ^,          R8X  g   Q R4       hVP                  ^ ,          pVP                  ^,          pV'       d+   V'       d#   \        VP                  VP
                  4       V# V'       d?   VP                  ^ ,          ^ ,          pV^ ,          p\        V\        4      '       g   V#  V# V'       Ed7   VP                  ^,          ^ ,          p\        V\        4      '       d7   \        R	8  d   VP                  ^ ,          pMVP                  4       ^ ,          p\        V\        4      '       d   \        VP                  4      p\        V\        4      '       d   VP                  '       d|   \         ;QJ d&    R VP                   4       F  '       d   K   RM	  RM! R VP                   4       4      '       d.   VP#                  V.\%        VP                  4      ,          R7      pV# V# )
aH  
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.
defaultz0"default" is no longer first argument in Field()default_factoryz9"default_factory" is no longer second argument in Field()c              3   sB   "   T F  p\        V\        4      x  K  	  R # 5ir`   )rr   r>   )rm   argrn   rO   ro   Z:PydanticPlugin._pydantic_field_callback.<locals>.<genexpr>   s     RMSJsK88Ms   FT)args)r    i  )default_return_typeZcallee_arg_namesr   +error_default_and_default_factory_specifiedapicontext	arg_typesrr   r   r9   r   itemsr6   r@   ret_typer7   ZallZcopy_modifiedZlen)	rf   r   Zdefault_any_typeZdefault_argsZdefault_factory_argsZdefault_typeZdefault_argZdefault_factory_typer   s	   &&       rO   r   Z'PydanticPlugin._pydantic_field_callback   s    22##A&)3g5gg3##A&*;;x=xx;xx{"xx{07M##==+A.L&q/K k<88## 94  / "!#&==#3A#6  .
;;%0+?+E+Ea+H( ,@+E+E+G+J(.==*+?+H+HIx22 RHMMRRHMMRRR  (55<L;MPST\TaTaPb;b5cHrQ   )rd   rb   )__name__
__module____qualname____firstlineno__re   rz   r   r   r   r   r   rv   r   r   __static_attributes____classdictcell__Z__classcell__)rg   r]   s   @@rO   rW   rW   l   sp     " "
  
  
 ! !   @ @3  3  3 rQ   rW   c                   sT   a  ] tR t^t o RtV 3R lR ltV 3R lR ltV 3R ltRtV t	R# )	ra   c                rY   rZ   r)   r\   r^   rO   rP   !PydanticPluginConfig.__annotate__   s     , , ,D ,rQ   c                s   VP                   f   R # \        VP                   4      pVez   VP                  R/ 4      P                  R/ 4      pV P                   FE  pVP                  VR4      p\	        V\
        4      '       g   \        RV 24      h\        WV4       KG  	  R # \        4       pVP                  VP                   4       V P                   F'  pVP                  \        VRR7      p\        WV4       K)  	  R # )NZtoolrF   Fz/Configuration value must be a boolean for key: )Zfallback)config_file
parse_tomlget	__slots__rr   boolZ
ValueErrorsetattrr   ZreadZ
getbooleanCONFIGFILE_KEY)rf   r[   Ztoml_configconfigkeyZsettingrb   s   &&     rO   re   ZPydanticPluginConfig.__init__   s    & !4!45" __VR044_bIF~~ **S%0!'400$'VWZV[%\]]7+	 & )NMw223~~'22>3QV2W7+ &rQ   c                6   < V ^8  d   QhRS[ S[S[3,          /# rG   rI   r   rJ   r   r\   r^   rO   rP   r     s     C Cc3h CrQ   c                sV    V P                    Uu/ uF  q\        W4      bK  	  up# u upi r`   )r   r   )rf   r   rn   rO   rc   ZPydanticPluginConfig.to_data  s&    37>>B>CWT''>BBBs   &c                sV   < V ^8  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   # )rG   init_forbid_extra
init_typedwarn_required_dynamic_aliaseswarn_untyped_fieldsr   )r   r\   r^   rO   rP   r      sF          $('     $# rQ    N)r   r   r   r   r   )
r   r   r   r   r   re   rc   __annotate_func__r   r   r]      @rO   ra   ra      s*     I, ,&C CC  rQ   ra   c                s0    V ^8  d   QhR\         R\        /# r   )r.   r	   rL   rN   rO   rP   rP     s     # #= #T #rQ   c                s   V P                   p\        V\        4      '       d   VP                  p\        V\        4      '       d.   \        VP
                  \        4      '       d   VP
                  pMb\        V\        4      '       d   TpMIRV RVP                  P                   R2p\        W0P                  V P                  4       V P                  # VP                   P                  P                  \        4      pVf   V P                  # VP                  R/ 4      P                  R4      pVRJd5   \!        \#        VP                   4      V P                  V P                  4       V P                  # )z+
Raise an error if orm_mode is not enabled
z
ctx.type: 
 (of type )r   orm_modeT)r   rr   r<   itemr6   r   r7   rg   r   error_unexpected_behaviorr   r   r   metadatar   METADATA_KEYerror_from_ormget_name)r   Zctx_typeZ
model_typedetailZpydantic_metadatar   s   &     rO   r   r     s   
 xxH(H%%==(L))j9J9JH.U.U&&
	Hh	'	'
hZz(2D2D2M2M1NaP!&''3;;?&&&"0044\B &&& $$Xr266zBHtx
0#''3;;G"""rQ   c                   sj  a  ] tR tRt o 0 R#mtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR lt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tV 3R lR ltV 3R lR lt]V 3R lR l4       tV 3R  ltR!tV tR"# )$r   i  c                *   < V ^8  d   QhRS[ RS[RR/# )rG   r   rb   rI   N)r,   ra   r\   r^   rO   rP   %PydanticModelTransformer.__annotate__)  s$     + +O +<P +UY +rQ   c                s    Wn         W n        R # r`   _ctxrb   )rf   r   rb      &&&rO   re   Z!PydanticModelTransformer.__init__)  s    	*rQ   c                   < V ^8  d   QhRR/# rG   rI   Nr   r\   r^   rO   rP   r   -  s     
 
4 
rQ   c                s   V P                   pVP                  P                  pV P                  4        V P	                  4       pV P                  V4      p\        ;QJ d)    R VP                  RR  4       F  '       g   K   RM	  RM! R VP                  RR  4       4      pV P                  WCV4       V P                  V4       T P                  YCP                  RJ ;'       g    VP                  RJ R7       RV Uu/ uF  qfP                  VP                  4       bK  	  upRVP                  4       /VP                   \"        &   R# u upi )	ap  
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
c              3   ri   r`   )rj   BASESETTINGS_FULLNAMErl   rn   rO   ro   Z5PydanticModelTransformer.transform.<locals>.<genexpr>=  s     `R_$,t,0EER_rp   NTF)frozenfieldsr   )r   r   r   adjust_validator_signaturescollect_configcollect_fieldsrt   ru   add_initializeradd_construct_method
set_frozenallow_mutationr   name	serializeset_values_dictr   r   )rf   r   r   r   r   is_settingsfields   &      rO   r   Z"PydanticModelTransformer.transform-  s    iiww||((*$$&$$V,c`RVRZRZ[^\^R_`ccc`RVRZRZ[^\^R_``V[9!!&)'<'<'E'^'^Z^I^_&I&zz5??#44&If,,.'
l#Is   >#Ec                r   r   r   r\   r^   rO   rP   r   F  s     2 2T 2rQ   c                s   V P                   P                  P                  P                  P	                  4        F  w  r\        VP                  \        4      '       g   K'  VP                  P                  ^ ,          p\        V\        4      '       g   K\  \        VP                  \        4      '       g   K~  VP                  P                  \         R28X  g   K  RVP                  P                  n        K  	  R# )a3  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.
z.class_validators.validatorTN)r   r   r   namesr   rr   rs   r   Zoriginal_decoratorsr   calleer   rh   
_NAMESPACEfuncis_class)rf   r   rx   Z	first_decs   &   rO   r   Z4PydanticModelTransformer.adjust_validator_signaturesF  s     ++11779ID#((I..HH88;	y(33"9#3#3X>>!((11
|C^5__-1CHHMM* :rQ   c                r   )rG   rI   ModelConfigDatar   r\   r^   rO   rP   r   X  s       1 rQ   c                s   V P                   pVP                  p\        4       pVP                  P                   F  p\        V\        4      '       g   K  VP                  R8X  g   K.  VP                  P                   F;  p\        V\        4      '       g   K  VP                  V P                  V4      4       K=  	  VP                  '       g   K  VP                  '       d   K  V P                  P                  '       g   K  \        VP                   V4       K  	  VP"                  P$                  R,           F  p\&        VP(                  9  d   K  VP                   P+                  \-        \/        V4      4      4       VP(                  \&        ,          R,          P1                  4        F  w  rxVP3                  Wx4       K  	  K  	  V# )zj
Collects the values of the config attributes that are used by the plugin, accounting for parent classes.
ZConfigr   NNr   )r   r   r   defsbodyrr   r   r   r   updateget_config_updatehas_alias_generatorallow_population_by_field_namerb   r   error_required_dynamic_aliasesr   r   ru   r   r   add_plugin_dependencyr4   rj   r   
setdefault)	rf   r   r   r   stmtsubstmtr   r   values	   &        rO   r   Z'PydanticModelTransformer.collect_configX  sB    iigg "HHMMDdH--yyH$#yy~~G%g~>> MM$"8"8"AB  .
 ..."AAA**HHH2377DA " HHLL$$D4==0 GG))*?T@R*ST#}}\:8DJJL!!$.  M % rQ   c                s2   < V ^8  d   QhRRRS[ R,          /# )rG   model_configr   rI   PydanticModelFieldr   r\   r^   rO   rP   r   w  s&     R R+< RFZA[ RrQ   c                s  a V P                   pV P                   P                  p. p\        4       pVP                  P                   EF  p\        V\        4      '       g   K  VP                  ^ ,          p\        V\        4      '       d   \        VP                  4      '       g   Kb  VP                  '       g3   V P                  P                  '       d   \        VP                  V4       VP                   P"                  P%                  VP                  4      pVf   K  VP&                  p	\        V	\(        4      '       d   K  \        V	\*        4      '       g   EK  V	P,                  '       d   EK-  V P/                  W6V4      p
V P1                  V4      w  rV'       dE   VP2                  '       g3   V P                  P4                  '       d   \7        VP                  V4       VP9                  \;        VP                  V
VVVP<                  VP>                  R7      4       VPA                  VP                  4       EK  	  VPC                  4       pVP                   PD                  R,           F  p\F        VPH                  9  d   K  . pVP                  PK                  \M        \O        V4      4      4       VPH                  \F        ,          R,          PQ                  4        Fw  w  opSV9  d;   \:        PS                  VV4      pVPA                  S4       VP9                  V4       KG  V3R lV 4       w  pVPU                  V4       VP9                  V4       Ky  	  W,           pK  	  V# )zB
Collects the fields for the model, accounting for parent classes
r   is_requiredaliashas_dynamic_aliaslinecolumnr   r   c              3   sL   <"   T F  qP                   S8X  g   K  Vx  K  	  R # 5ir`   )r   )rm   Zar   s   & rO   ro   Z:PydanticModelTransformer.collect_fields.<locals>.<genexpr>  s     H:a4:s   $
$)+r   r   Zsetr   r   rr   r   lvaluesr   rD   r   Z
new_syntaxrb   r   error_untyped_fieldsr   r   r   r   rs   r    r(   Zis_classvarget_is_requiredget_alias_infor   r   r   appendr   r   r   ZaddZcopyru   r   r   r   r4   rj   r   deserializeremove)rf   r   r   r   r   Zknown_fieldsr   lhsrx   rs   r   r   r   Z
all_fieldsr   Zsuperclass_fieldsdatar   r   s   &&                @rO   r   Z'PydanticModelTransformer.collect_fieldsw  s   
 iiiimmuHHMMDdN33,,q/Cc8,,N3884L4L???t'9'9'M'M'M$SWWd3
 ((..$$SXX.C{ 88D$00 dC((  ..s#>K'+':':4'@$E!$CCC&&DDD.sww=MM" +&7;;	 SXX&k "l [[]
HHLL$$D4==0 "GG))*?T@R*ST"mmL9(CIIK
d|+.::4FE $$T*%,,U3H:HHU%%e,%,,U3 L +7J# %$ rQ   c                s<   < V ^8  d   QhRS[ R,          RRRS[RR/# )rG   r   r   r   r   r   rI   Nr   r   r\   r^   rO   rP   r     s8     D Dd+?&@ DJ[ Djn Dsw DrQ   c                s*   V P                   pV P                  P                  pVP                  RJpT;'       g/    \	        VP
                  ;'       d    VP                  '       * 4      pV P                  WWvR7      pV P                  W4      '       gD   \        R4      p	VP                  \        V	\        \        P                  4      R\        4      4       RVP                  P                   P"                  9  d   \%        VRV\'        4       4       R# R# )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.
Ttypedforce_all_optional	use_aliasZkwargsNre   )r   rb   r   r   r   r   get_field_argumentsshould_init_forbid_extrar(   r  r   r5   r;   explicitr   r   r   r   
add_methodr8   )
rf   r   r   r   r   r	  r  r
  Zinit_argumentsvars
   &&&&      rO   r   Z(PydanticModelTransformer.add_initializer  s     ii""--99E	( 
 
D&&TTv/T/T+T-
 114F 2 
 ,,V<<h-C!!(3	8J8J0KTS\"]^SWW\\///sJ
C 0rQ   c                2   < V ^8  d   QhRS[ R,          RR/# )rG   r   r   rI   Nr   r\   r^   rO   rP   r     s!     8
 8
40D+E 8
$ 8
rQ   c           
     s   V P                   pVP                  P                  \         R2VP                  P                  \         R24      .4      p\	        V\        4       .4      p\        \        RV4      VR\        4      pV P                  VRRRR7      pV.V,           pVP                  P                  \         R24      pR	pVP                  P                  R
,           V,           p	\        R8  d   \        TT	\        R8  d)   \        RVP                  P                  R,           R7      M
\        R4      . V\        \         P"                  4      4      p
\%        VV	. V\        \         P"                  4      4      pM\'        WR. V4      p
\%        W. V4      p\)        \*        V4      VP                  P,                  P.                  V&   \1        V
\        4      '       d   T
pM\        V
4      p\3        VRVVVV
RR7       R# )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.strZ_fields_setNTFr  z.objectZ_PydanticBaseModelrR   z
.construct)Z	namespaceZ	construct)return_type	self_typetvar_defis_classmethod)r   i   )r      r   )r   r   
named_typeBUILTINS_NAMEr?   r8   r   r(   r   r  r   rh   r   r>   r=   r5   r;   Zfrom_omitted_genericsr'   rE   r$   r   r   r   rr   r  )rf   r   r   Zset_strZoptional_set_strZfields_set_argumentZconstruct_argumentsZobj_typeZself_tvar_nameZtvar_fullnameZtvdZself_tvar_exprr  s   &&           rO   r   Z-PydanticModelTransformer.add_construct_method  s    ii''$$d%;cgg>P>PTaSbbfQg>h=ij$gxz%:;&s=:J'KM]_celm"66vT^cot6u236II77%%w&?@-((3.?' *W4 bCGG,<,<|,KL"2	778C )	778N ^BHMC(HUN-<T>-R>* c;''I#C(I!	
rQ   c                s8   < V ^8  d   QhRS[ R,          RS[RR/# )rG   r   r   r   rI   Nr  r\   r^   rO   rP   r     s-     G G&:!; GT Gd GrQ   c                s4   V P                   pVP                  P                  pV EFR  pVP                  P	                  VP
                  4      pVe   VP                  p\        V\        4      '       d	   W'n	        KW  \        V\        4      '       d9   VP                  P                  '       g   VP                  P                  4        K   \        V4      pRV RVP"                   R2p	\%        WP                  VP                  4       K  VP'                  VRR7      pWGn        W'n	        \)        V4      R,           \+        V4      ,           Vn        \/        \0        V4      VP                  \+        V4      &   EKU  	  R#   \         d    \!        T4      p Li ; i)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.
Nzsym_node.node: r   r   F)r  rR   )r   r   r   r   r   r   rs   rr   r(   Zis_propertyr    r   Zfinal_iterationZdeferrJ   Z	TypeErrorZreprrg   r   to_varrj   r   	_fullnamer$   r   )
rf   r   r   r   r   r   Zsym_noder  Zvar_strr   s
   &&&       rO   r   Z#PydanticModelTransformer.set_frozen  s(    iiww||Ezz~~ejj1H#mmc3''&,O_55cgg>U>U>UGGMMO,"%c(  /wiz#--PQRF-fggswwGll45l9"( ,T 2S 88C= H,;D#,F

8C=)/  % ,"&s),s   E>>FFc                s4   < V ^8  d   QhRS[ RS[R,          /# )rG   r   rI   r   )r   r   r\   r^   rO   rP   r   <  s!       HEV<W rQ   c                s   VP                   ^ ,          p\        V\        4      '       d   VP                  V P                  9   g   R# VP                  R8X  d   \        VP
                  \        4      '       d   VP
                  P                  R8H  pMg\        VP
                  \        4      '       d   VP
                  P                  R8H  pM-\        VP                  V P                  P                  V4       R# \        VR7      # VP                  R8X  dL   Rp\        VP
                  \        4      '       d   VP
                  P                  R8X  d   Rp\        VR	7      # \        VP
                  \        4      '       dJ   VP
                  P                  R9   d/   \        R/ VP                  VP
                  P                  R
8H  /B # \        VP                  V P                  P                  V4       R# )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)
NextraZforbid)forbid_extraalias_generatorTzbuiltins.NoneF)r   builtins.True)r  zbuiltins.Falser   )r   rr   r   r   tracked_config_fieldsrvaluer"   r   r   error_invalid_config_valuer   r   r   rh   )rf   r   r  r  r   s   &&   rO   r   Z*PydanticModelTransformer.get_config_update<  s[    ooa 3))chh$:T:T.T88w'..'22&~~33x?GNNJ77&~~22h>*388TYY]]GL"==88(("&'..(338O8OSb8b&+#"7JKKgnnh//GNN4K4KOr4r"\chh0G0G?0Z%[\\"388TYY]]GDrQ   c                s2   < V ^8  d   QhRS[ RS[RS[RS[/# )rG   r   r   r  rI   )r   r   r   r   r\   r^   rO   rP   r   Y  s)     . .X .^ .( .t .rQ   c                s   VP                   p\        V\        4      '       dK   \        V P                  VP
                  ,          P                  4      p\        P                  V4      '       * # \        V\        4      '       d   \        VP                  \        4      '       d   VP                  P                  \        8X  d   \        VP                  VP                   4       F.  w  rVVe   VR8X  d   VP"                  \$        J u # VR8X  g   K-   R# 	  \        V P                  VP
                  ,          P                  4      p\        P                  V4      '       * # \        V\$        4      # )zW
Returns a boolean indicating whether the field defined in `stmt` is a required field.
r   r   F)r   rr   r%   r@   r   r   r   r   type_has_implicit_defaultr   r   r!   rh   r   Zzipr   	arg_namesrg   r   )r   r   r  exprZ
value_typer   r   s   &&&    rO   r   Z(PydanticModelTransformer.get_is_requiredX  s    
 {{dH%%(#(();)@)@AJ/II*UUUdH%%*T[['*J*Jt{{OcOcguOu !DNN;	<49#4==L88,,  < )#(();)@)@AJ/II*UUU$--rQ   c                s6   < V ^8  d   QhRS[ S[,          RS[/# )rG   type_rI   )r   r:   r   r\   r^   rO   rP   r   s  s       *)= $ rQ   c                s   \        V \        4      '       d   R# \        V \        4      '       dQ   \        ;QJ d&    R V P                   4       F  '       g   K   RM	  RM! R V P                   4       4      '       d   R# R# )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).
Tc              3   sr   "   T F-  p\        V\        4      ;'       g    \        V\        4      x  K/  	  R # 5ir`   )rr   r8   r5   )rm   r   rn   rO   ro   ZEPydanticModelTransformer.type_has_implicit_default.<locals>.<genexpr>|  s-      0
P[JtX&CC*T7*CCP[s   77F)rr   r5   r?   rt   r   )r%  rT   rO   r"  Z2PydanticModelTransformer.type_has_implicit_defaultr  sc     eW%%eY''CC 0
PUP[P[0
CCC 0
PUP[P[0
 -
 -
 rQ   c                sL   < V ^8  d   QhRS[ RS[S[S[,          S[3,          /# )rG   r   rI   )r   r   r   rJ   r   r\   r^   rO   rP   r     s)      ^ hsmT6I0J rQ   c                s   V P                   p\        V\        4      '       d   R# \        V\        4      '       d@   \        VP                  \
        4      '       d    VP                  P                  \        8X  g   R# \        VP                  4       FI  w  r#VR8w  d   K  VP                  V,          p\        V\        4      '       d   VP                  R3u # Ru # 	  R# )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.
Fr   )NF)NT)r   rr   r%   r   r   r!   rh   r   Z	enumerater#  r   r"   r   )r   r$  ZiZarg_namer      &    rO   r  Z'PydanticModelTransformer.get_alias_info  s     {{dH%% tX&&:dkk7+K+KPTP[P[PdPdhvPv $T^^4KA7"))A,C#w''yy%''!! 5 rQ   c                sV   < V ^8  d   QhRS[ R,          RS[RS[RS[RS[ S[,          /# )rG   r   r   r	  r
  r  rI   )r   r   r   r\   r^   rO   rP   r     s?      /09=SWdh	hrQ   c           
     s    V P                   P                  P                  pV Uu. uF2  pV'       d   VP                  '       d   K  VP	                  WRW4R7      NK4  	  ppV# u upi )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_optionalr  )r   r   r   r   to_argument)rf   r   r	  r
  r  r   r   Z	argumentss   &&&&&   rO   r  Z,PydanticModelTransformer.get_field_arguments  se     yy}}!!  
%"9"9 iEd@Rh 	 

 
s   A!A!A!c                s8   < V ^8  d   QhRS[ R,          RRRS[/# )rG   r   r   r   r   rI   r  r\   r^   rO   rP   r     s*     4 4t4H/I 4Sd 4im 4rQ   c                s    VP                   '       g.   V P                  V\        VP                  4      4      '       d   R# VP                  '       d   R# V P
                  P                  # )a(  
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)r   is_dynamic_alias_presentr   r   r  rb   r   )rf   r   r   r   rO   r  Z1PydanticModelTransformer.should_init_forbid_extra  sR     444,,VT&:T:T5UVV!!333rQ   c                s:   < V ^8  d   QhRS[ R,          RS[RS[/# )rG   r   r   r   rI   r  r\   r^   rO   rP   r     s*      .B)C Z^ cg rQ   c                s    V  F  pVP                   '       g   K   R# 	  V'       d   V  F  pVP                  e   K   R# 	  R# )z
Returns whether any fields on the model have a "dynamic alias", i.e., an alias that cannot be
determined during static analysis.
TF)r   r   )r   r   r   ry   rO   r)  Z1PydanticModelTransformer.is_dynamic_alias_present  s>     E&&&  ;;&   rQ   c                s6   < V ^8  d   Qh/ S[ S[,          ;R&   # )rG   r  )r   rJ   r\   r^   rO   rP   r     s     s8  rQ   r   N>   r  r   r   r   r  r   )r   r   r   r   r  re   r   r   r   r   r   r   r   r   Zstaticmethodr   r"  r  r  r  r)  r   r   r   r   r   rO   r   r     s     '+ +
 
22 2$ >R RhD D,8
 8
tG GB 8 . .2     8  4 4  A  rQ   r   c                   s   a  ] tR tRt o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 lt]V 3R
 lR l4       t	Rt
V tR# )r   i  c                sN   < V ^8  d   QhRS[ RS[RS[S[ ,          RS[RS[RS[/# )rG   r   r   r   r   r   r   )rJ   r   r   rK   r\   r^   rO   rP   PydanticModelField.__annotate__  sA      &*3;C=UYadnqrQ   c                N    Wn         W n        W0n        W@n        WPn        W`n        R # r`   r   )rf   r   r   r   r   r   r      &&&&&&&rO   re   ZPydanticModelField.__init__  s$     	&
!2	rQ   c                s,   < V ^8  d   QhRS[ RS[RS[/# )rG   r   r  rI   )r&   r   r(   r\   r^   rO   rP   r*    s"     / /8 / / /rQ   c                s    V P                   pV'       d   V P                  e   V P                  p\        W1V P                   ,          P                  4      # r`   )r   r   r(   r   )rf   r   r  r   s   &&& rO   r  ZPydanticModelField.to_var  s9    yy/::D4dii--..rQ   c          
      s8   < V ^8  d   QhRS[ RS[RS[RS[RS[/# )rG   r   r	  r'  r  rI   )r&   r   r   r\   r^   rO   rP   r*    s2     

 

 

 

t 

X\ 

ai 

rQ   c                sH   V'       d<   WP                   ,          P                  e   WP                   ,          P                  pM\        \        P                  4      p\        V P                  W4      TR V'       g   V P                  '       g   \        R7      # \        R7      # )N)variabletype_annotationZinitializerkind)
r   r   r5   r;   r  r   r  r   r   r   )rf   r   r	  r'  r  r.  s   &&&&& rO   r(  ZPydanticModelField.to_argument  sw    T))_))5"99o22O%i&8&89O[[1+"08H8H8H	
 	
 OX	
 	
rQ   c                s    < V ^8  d   QhRS[ /# r   )r   r\   r^   rO   rP   r*    s      8 rQ   c                r   r`   )__dict__)rf   rT   rO   r   ZPydanticModelField.serialize  s    }}rQ   c                r   )rG   r   r  rI   r   )r&   r   r\   r^   rO   rP   r*    s#      x x <P rQ   c                s    V ! R/ VB # )Nr   r   )r   r   r  r   rO   r  ZPydanticModelField.deserialize  s    {T{rQ   )r   r   r   r   r   r   N)r   r   r   r   re   r  r(  r   classmethodr  r   r   r   r   rO   r   r     sA      / /

 

   rQ   r   c                   sl   a  ] tR tRt o RV 3R lR lltV 3R lR ltV 3R lR ltV 3R	 lR
 ltRtV t	R# )r   i  Nc                s   < V ^8  d   QhRS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          /# )rG   r  r   r   r   r   r   )r   r   r\   r^   rO   rP   ModelConfigData.__annotate__  s_     7 7tn7 !7 	7
 4.7 )17 &d^7rQ   c                r+  r`   )r  r   r   r   r   r   )rf   r  r   r   r   r   r   r,  rO   re   ZModelConfigData.__init__  s&     ), .L+#6 rQ   c                r   r   r   r\   r^   rO   rP   r2    s     I Ic3h IrQ   c                sv    V P                   P                  4        UUu/ uF  w  rVf   K  WbK  	  upp# u uppi r`   )r0  r   )rf   kvs   &  rO   r   ZModelConfigData.set_values_dict  s1    !%!4!4!6H!6!!6HHHs   55c                r  )rG   r   r   rI   N)r   r\   r^   rO   rP   r2    s!        X&78  T  rQ   c                sx    Vf   R # VP                  4       P                  4        F  w  r#\        WV4       K  	  R # r`   )r   r   r   )rf   r   r3  r4  s   &&  rO   r   ZModelConfigData.update  s2    >**,224DADQ 5rQ   c                r   )rG   r   r   rI   N)rJ   r   r\   r^   rO   rP   r2    s"     & &c &# &$ &rQ   c                s<    \        W4      f   \        WV4       R # R # r`   )r   r   )rf   r   r   r   rO   r   ZModelConfigData.setdefault  s    4%Du% &rQ   )r   r   r  r   r   r   )NNNNNN)
r   r   r   r   re   r   r   r   r   r   r   r   rO   r   r     s/     7 7 I I   & &rQ   r   zpydantic-ormzInvalid from_orm callZPydanticzpydantic-configzInvalid config valuezpydantic-aliaszDynamic alias disallowedzpydantic-unexpectedzUnexpected behaviorzpydantic-fieldzUntyped field disallowedzInvalid Field defaultsc                @    V ^8  d   QhR\         R\        R\        RR/# )rG   
model_namer   r   rI   N)rJ   r+   r   rL   rN   rO   rP   rP     s0     U Us U)? U' UVZ UrQ   c                 >    VP                  R V  R2V\        R7       R# )"z" does not have orm_mode=TrueZcodeN)fail	ERROR_ORM)r6  r   r   r   rO   r   r     s    HHq9:G)HTrQ   c                r5  )rG   r   r   r   rI   N)rJ   r1   r   rL   rN   rO   rP   rP     s1     O OS O/N OY` Oei OrQ   c                 r7  )zInvalid value for "Config.r8  r9  N)r:  ERROR_CONFIG)r   r   r   r   rO   r!  r!    s    HH)$q17HNrQ   c                4    V ^8  d   QhR\         R\        RR/# rG   r   r   rI   Nr1   r   rL   rN   rO   rP   rP   "  s)     O O(G ORY O^b OrQ   c                 6    V P                  R V\        R7       R# )z#Required dynamic aliases disallowedr9  N)r:  ERROR_ALIASr   r   r   rO   r   r   "  s    HH2G+HNrQ   c                sb    V ^8  d   QhR\         R\        \        \        3,          R\        RR/# )rG   r   r   r   rI   N)rJ   r
   r+   r1   r   rL   rN   rO   rP   rP   &  s8     ; ;;24SST;_f;	;rQ   c                 s^    R pRV  R2pVRV R2,          pVP                  WB\        R7       R# )z6https://github.com/pydantic/pydantic/issues/new/choosez7The pydantic mypy plugin ran into unexpected behavior: Z
z&Please consider reporting this bug at z so we can try to fix it!r9  N)r:  ERROR_UNEXPECTED)r   r   r   ZlinkZfull_messages   &&&  rO   r   r   &  s?     DDLVHTVWL<TFB[\\LHH\)9H:rQ   c                r=  r>  r?  rL   rN   rO   rP   rP   0  s(     G G= G GTX GrQ   c                 r@  )zUntyped fields disallowedr9  N)r:  ERROR_UNTYPEDrB  r   rO   r   r   0  s    HH('HFrQ   c                r=  r>  )r+   r   rL   rN   rO   rP   rP   4  s)     s s5K sV] sbf srQ   c                 r@  )z>Field default and default_factory cannot be specified togetherr9  N)r:  ERROR_FIELD_DEFAULTSrB  r   rO   r   r   4  s    HHMw]qHrrQ   c                s    V ^8  d   QhR\         R\        R\        \        ,          R\        R\
        \        ,          R\
        \        ,          R\        R\        R	R
/	# )rG   r   r   r   r  r  r  r  is_newrI   N)r,   rJ   r   r   r	   r   rE   r   rL   rN   rO   rP   rP   8  sz     P% P%	P%
P% x.P% 	P%
 ~P% z"P% P% P% 
P%rQ   c           	     s   V P                   P                  pWP                  9   d   VP                  V,          p	V	P                  '       dZ   \	        V	P
                  \        4      '       d:   V P                   P                  P                  P                  V	P
                  4       T;'       g    \        V4      pV'       g	   V'       d2   \        \        R4      \        P                  ! V4      R\        4      .p
M1T;'       g    \        V4      p\        \        R4      VR\        4      .p
W,           p. . . rpV Fv  pVP                   '       g   Q R4       hVP#                  VP                   4       VP#                  \%        VP&                  4      4       VP#                  VP(                  4       Kx  	  V P*                  P-                  \.         R24      p\1        YYY'       d   V.MRR7      p\        W\3        \5        4       .4      4      pVVn        \7        VV4      Vn        VVn        \=        V4      R,           V,           Vn        VP@                  Vn         WP                  9   d6   \C        WP                  4      pVP                  V,          VP                  V&   V'       dv   RVn"        \        VVP8                  4      pVVn        VP>                  Vn        RVn#        \I        V\K        R	4      .V4      pVP@                  Vn         \M        \N        V4      p	M\M        \N        V4      p	RV	n        WP                  V&   VPP                  P                  P                  P#                  V4       R# )
zq
Adds a new method to a class.

This can be dropped if/when https://github.com/python/mypy/issues/7301 is merged
Z_clsNZ__pydantic_self__z"All arguments must be fully typed.z	.function)Z	variablesrR   Tr1  ))r   r   r   Zplugin_generatedrr   rs   r   r   r   r  rA   r   r(   r<   Zmake_normalizedr   r.  r  r   r-  r/  r   r  r  r6   r   r   r3   r   r   rj   r  r   rB   Zis_decoratedr  r   r   r$   r   Zdefn)r   r   r   r  r  r  r  rF  r   rx   Zfirstr   r#  Z	arg_kindsr   Zfunction_typeZ	signaturer   Zr_namer4  Zdecs   &&&&&&&&             rO   r  r  8  s     77<<D zzjjJsxx$A$AGGLL$$SXX.00]40I#f+x'?'?	'JDRYZ[ 44t!4	#12ItWMN<D&("b)I"""H$HH",,-#,,/0"	  GG&&-	'BCMim]ePXzkoI 4uhj\23DDI!)T2DI"DM!$'#-4DN		DI zz-dJJ?!ZZ-

6 dii nnx67;
 99dC(dD)CJJtIINNt$rQ   c                R    V ^8  d   QhR\         \        \        3,          R\        /# rG   xrI   r
   r   r#   rJ   rL   rN   rO   rP   rP     s$      E(J./ C rQ   c                N    V P                   p\        V4      '       d   V! 4       # V# z[
Used for compatibility with mypy 0.740; can be dropped once support for 0.740 is dropped.
)rh   callablerI  Zfnrn   rO   rj   rj     s"     
B||tIrQ   c                rG  rH  rJ  rL   rN   rO   rP   rP     s$      h
*+  rQ   c                rK  rL  )r   rM  rN  rn   rO   r   r     s"     
B||tIrQ   c                sh    V ^8  d   QhR\         R\        \        \         \        3,          ,          /# )rG   r   rI   )rJ   r   r   r   rL   rN   rO   rP   rP     s'      C HT#s(^$< rQ   c                 s|   V P                  R 4      '       g   R# Rp\        P                  R8  d   ^ RIpM ^ RIp\        W4      ;_uu_ 4       pVP                  V4      uuRRR4       #   \
         d3    Rp ^ RIp LC  \
         d    ^ RIpTP                  R4         R# i ; ii ; i  + '       g   i     R# ; i)z.tomlNZrbZrzJNo TOML parser installed, cannot read configuration from `pyproject.toml`.)i   r  )r   sysZversion_infoZtomllibZtomliImportErrorZtomlwarningsZwarnZopenZload)r   Z	read_modeZtoml_rQ  Zrfr&  rO   r   r     s    ((I
7"	! 
k	%	%zz"~ 
&	%  		I$ jk			 
&	%	%s5   A* B**B'8A>> B#B'"B##B'*B;	i)r    i  )NNFF)yrO  Zconfigparserr   Ztypingr   r   r   r   r   r   r   r	   Z
TypingTyper
   Zmypy.errorcodesr   Z
mypy.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Zmypy.optionsr*   Zmypy.pluginr+   r,   r-   r.   r/   r0   r1   Zmypy.pluginsr2   Zmypy.semanalr3   Zmypy.server.triggerr4   Z
mypy.typesr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   Zmypy.typevarsrA   Z	mypy.utilrB   Zmypy.versionrC   Zmypy_versionZpydantic.v1.utilsrD   rE   rP  r   r   r   r   rk   r   r~   r   r   rU   r   r  rX   rW   ra   r   r   r   r   r;  r<  rA  rC  rD  rE  r   r!  r   r   r   r   r  rj   r   r   r   rQ   rO   <module>rR     s   
 % ] ] ] %       > !   % * 5    ( 2 4 ,5%
 !'cr]
"|?3 %,&@A (\)=> <}-"|#9: A (5 0H<
. r V r j"C "CJ#2l l^" "J& &> n&=zJ	*,BJO(*DjQ24I:V *,F
S !13KZX UOO;GsP%fm  5445s   G GG