+
    iV                       R t ^ RIHt ^ RIHt ^ RIHt ^ RIHtH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHtHtHt R]]R,          ]
P@                  3,          ,          ]]R,          ]
PB                  3,          ,          t"]#! R:4      t$Rt%]#! R;4      t&Rt']$3R R llt(R R lt)R<R R llt*R R lt+R R lt,R R lt-R R lt.R  R! lt/R=R" R# llt0R=R$ R% llt1]$3R& R' llt2R( R) lt3R>R* R+ llt4R, R- lt5R. R/ lt6R0 R1 lt7R2 R3 lt8R4 R5 lt9]#! R?4      t:R=R6 R7 llt;R8 R9 lt<R# )@a>  
Astroid hook for the dataclasses library.

Support built-in dataclasses, pydantic.dataclasses, and marshmallow_dataclass-annotated
dataclasses. References:
- https://docs.python.org/3/library/dataclasses.html
- https://pydantic-docs.helpmanual.io/usage/dataclasses/
- https://lovasoa.github.io/marshmallow_dataclass/
)annotations)Iterator)Literal)basescontextnodes)is_class_var)parse)
PY313_PLUS)AstroidSyntaxErrorInferenceErrorUseInferenceDefault)inference_tip)AstroidManager)InferenceResult)UninferableUninferableBase
safe_inferNdefaultdefault_factoryfield_HAS_DEFAULT_FACTORYc               $    V ^8  d   QhRRRRRR/# )   nodenodes.ClassDefdecorator_namesfrozenset[str]returnbool )formats   "A/usr/lib/python3/dist-packages/astroid/brain/brain_dataclasses.py__annotate__r#   ,   s$     
 


+9
	
    c                0  a \        V \        P                  4      '       d   V P                  '       g   R# \        ;QJ d3    V3R lV P                  P                   4       F  '       g   K   R# 	  R# ! V3R lV P                  P                   4       4      # )zDReturn True if a decorated node has a `dataclass` decorator applied.Fc              3  <   <"   T F  p\        VS4      x  K  	  R # 5iN)_looks_like_dataclass_decorator).0decorator_attributer   s   & r"   	<genexpr>.is_decorated_with_dataclass.<locals>.<genexpr>3   s$      #8 	((;_MM#8s   T)
isinstancer   ClassDef
decoratorsany)r   r   s   &fr"   is_decorated_with_dataclassr1   ,   sp     tU^^,,3 #'??#8#833 3 3 #'??#8#8  r$   c                    V ^8  d   QhRRRR/# )r   r   r   r   znodes.ClassDef | Noner    )r!   s   "r"   r#   r#   9   s     0 0n 01F 0r$   c           
     4   RV n         \        V 4       Fo  pVP                  P                  p\        P
                  ! VP                  VP                  VR7      p\        4       P                  V4      pV.V P                  V&   Kq  	  \        V 4      '       g   R# RpV P                  P                  '       d   V P                  P                   Fi  p\        V\        P                  4      '       g   Rp MFVP                   F2  pVP                   R8X  g   K  VP"                  P%                  4       RJ pK4  	  Kk  	  \'        V \)        \        V RR7      4      V4      p \+        V4      R,          pWn        RRuVn        Vn        V.V P.                  R&   V P1                  4       p	\2        V	P.                  9  dO   \+        \2         R24      P4                  ^ ,          p
Wn        V
P6                  ^ ,          .V	P.                  \2        &   V #   \8         d     T # i ; i)	z6Rewrite a dataclass to be easily understood by pylint.T)lineno
col_offsetparentNFkw_only)init__init__z = object())is_dataclass_get_dataclass_attributestargetnamer   Unknownr4   r5   r   visit_transformsinstance_attrs_check_generate_dataclass_initr/   r-   Callkeywordsargvalue
bool_value_generate_dataclass_initlistr	   r6   localsrootDEFAULT_FACTORYbodytargetsr   )r   assign_noder=   rhs_nodekw_only_decorated	decoratorkeywordinit_str	init_noderJ   
new_assigns   &          r"   dataclass_transformrV   9   s   D06!!&&==%%"--

 "#44X>%-JD! 7 *$//..Ii44$)!$--;;)+(/(@(@(Bd(J% .	 / (&t$78HC(OJ/	  15t.	).#,+Jyy{$++-/!2+>?DDQGJ $,6,>,>q,A+BDKK(K   Ks   H HHc               $    V ^8  d   QhRRRRRR/# )r   r   r   r8   r   r   zIterator[nodes.AnnAssign]r    )r!   s   "r"   r#   r#   l   s$      
 $r$   c              #    "   V P                    F  p\        V\        P                  4      '       d+   \        VP                  \        P
                  4      '       g   KO  \        VP                  4      '       d   Kl  \        VP                  4      '       d   K  V'       g   \        VP                  4      '       d   K  Vx  K  	  R# 5i)ziYield the AnnAssign nodes of dataclass attributes for the node.

If init is True, also include InitVars.
N)
rL   r-   r   	AnnAssignr<   
AssignNamer   
annotation_is_keyword_only_sentinel_is_init_var)r   r8   rN   s   && r"   r;   r;   l   s      yy{EOO44;--u/?/?@@ ..//$[%;%;<< [%;%;<<% !s   BC 'Cc                    V ^8  d   QhRRRR/# )r   r   r   r   r   r    )r!   s   "r"   r#   r#      s       D r$   c                   RV P                   9   d   R# RpV P                  P                   F:  p\        V\        P                  4      '       g   K%  \        V4      '       g   K8  TpK<  	  Vf   R# \        ;QJ d0    R VP                   4       F  '       g   K   R'       * # 	  R'       * # ! R VP                   4       4      '       * # )zReturn True if we should generate an __init__ method for node.

This is True when:
    - node doesn't define its own __init__ method
    - the dataclass decorator was called *without* the keyword argument init=False
r9   FNTc              3     "   T F8  pVP                   R 8H  ;'       d    VP                  P                  4       RJ x  K:  	  R# 5ir8   FNrD   rE   rF   r)   rR   s   & r"   r+   1_check_generate_dataclass_init.<locals>.<genexpr>   sF       &G 	v 	0 	0MM$$&%/	0%
   A%A)rI   r/   r   r-   rB   r(   r0   rC   )r   foundr*   s   &  r"   rA   rA      s     T[[ E#44-uzz::*+>??'E  5 } s  ~~ss  s  s  ~~   r$   c                    V ^8  d   QhRRRR/# )r   r   r   r   zYtuple[dict[str, tuple[str | None, str | None]], dict[str, tuple[str | None, str | None]]]r    )r!   s   "r"   r#   r#      s      )  )
 ) )r$   c                ~   / p/ p\        V P                  4       4       F  pVP                  '       g   K   VP                  R,          ^ ,          pTP
                  P                  4       w  rVTP                  4        F	  w  rxYT&   K  	  TP                  4        F	  w  rYT	&   K  	  K  	  W3#   \         d     K  i ; i)z<Iterate through all bases and get their typing and defaults.r9   )reversedmror:   rI   KeyErrorargs_get_arguments_dataitems)
r   pos_only_storekw_only_storebase	base_initpos_onlyr7   posargdatakwargs
   &         r"   !_find_arguments_from_base_classesrw      s     @BN>@M $   	+/;;z+B1+EI &NN>>@$NN,LF &*6" - #==?KE#'%  +' %* ((!  		s   B--B<;B<c               $    V ^8  d   QhRRRRRR/# )r   ro   z(dict[str, tuple[str | None, str | None]]rp   r   ztuple[str, str]r    )r!   s   "r"   r#   r#      s&      <; r$   c                   RRr2V P                  4        Fb  w  rEW$,          pV^ ,          '       d   VRV^ ,          ,           ,          pV^,          '       d   VRV^,          ,           ,          pVR,          pKd  	  VP                  4        Fb  w  reW6,          pV^ ,          '       d   VRV^ ,          ,           ,          pV^,          '       d   VRV^,          ,           ,          pVR,          pKd  	  W#3# )zKParse positional and keyword arguments into strings for an __init__ method. :  = , )rn   )ro   rp   rs   r7   pos_argru   kw_args   &&     r"   _parse_arguments_into_stringsr      s    
 Bg'--/77tAw&H77Q'HD 0 &++-77td1g~%G77utAw&G4 . r$   c               $    V ^8  d   QhRRRRRR/# )r   r   r   r=   strr   znodes.NodeNG | Noner    )r!   s   "r"   r#   r#      s"      n C DW r$   c                   \        V P                  4       4       EF  pVP                  '       g   K  WP                  9   g   K*  VP                  V,           F  p\	        VP
                  \        P                  4      '       g   K/  VP
                  P                  '       g   KM  \	        VP
                  P                  \        P                  4      '       g   K  \        VP
                  P                  4      '       g   K  \        VP
                  P                  4      pV'       g   K  V^,          u u # 	  EK"  	  R# )z4Get the default value of a previously defined field.N)ri   rj   r:   rI   r-   r6   r   rY   rE   rB    _looks_like_dataclass_field_call_get_field_default)r   r=   rq   assignr   s   &&   r"   _get_previous_field_defaultr      s    $   ;;++d++v}}eoo>>+++"6==#6#6

CC89L9LMM01D1DEGw&qz) ,	 % r$   c               (    V ^8  d   QhRRRRRRRR/# )	r   r   r   assignszlist[nodes.AnnAssign]rP   r   r   r   r    )r!   s   "r"   r#   r#      s8     RO RO
RO#8ROMQROROr$   c                @	   . p. p. p\        V 4      w  rgV EF  pVP                  P                  VP                  VP                  rp	RpV P
                  V	,           FR  p\        V\        P                  4      '       g   K%  VP                  '       g   K9  RVP                  4       9   g   KP  Tp M	  \        V\        P                  4      ;'       d    \        VRR7      pV'       dv   \        ;QJ d&    R VP                   4       F  '       g   K   RM	  RM! R VP                   4       4      '       d(   VP                  V	R4       VP                  V	R4       EKH  \!        V
4      '       d5   Rp\        V
\        P"                  4      '       d   V
P$                  p
MRp
RpM
RpRV	 R	V	 2pRRppV
e   V
P'                  4       pV'       d{   V'       db   \)        V4      pV'       dN   Vw  ppVR
8X  d   VP'                  4       pMVR8X  d*   \*        pRV	 R	VP'                  4        RV	 R\*         RV	 2
pMoVP'                  4       pM^V'       d4    \-        \/        VP1                  R4      4      P'                  4       4      pM#\7        W	4      pV'       d   VP'                  4       pT	pVe   VRV 2,          pVe   VR	V 2,          pV'       d   VP                   Uu. uF  pVP8                  R8X  g   K  VNK  	  ppV'       dL   V^ ,          P                  P;                  4       RJ d   VP=                  V4       MVP=                  V4       EK:  V'       d    W9   d   VV3Wy&   MMVP=                  V4       M;W9   d   VV3Wi&   M.W9   d   V	.VOpVP                  V	4       MVP=                  V4       V'       d   EK  VP=                  V4       EK  	  \?        Wg4      w  ppRV9   d   RMRpVVRPA                  V4      ,           ,          pVPC                  R4      '       g
   VR,          pV'       g	   V'       d
   VR,          pVV RPA                  V4       2,          pV'       d   RPA                  V4      MRpRV RV 2#   \2        \4        3 d     ELi ; iu upi )z8Return an init method for a dataclass given the targets.Nzbuiltins.propertyF)check_scopec              3     "   T F8  pVP                   R 8H  ;'       d    VP                  P                  4       RJ x  K:  	  R# 5ira   rb   rc   s   & r"   r+   +_generate_dataclass_init.<locals>.<genexpr>  s=      -G v%OO7==+C+C+E+NO-re   Trz   zself.r|   r   r   z if z is z else r{   r7   selfzself, r}   z*, z
    passzdef __init__(z) -> None:
    )"rw   r<   r=   r[   rE   rI   r-   r   FunctionDefr/   decoratornamesrB   r   r0   rC   popr]   	Subscriptslice	as_stringr   rK   r   nextinfer_call_resultr   StopIterationr   rD   rF   appendr   joinendswith)r   r   rP   paramskw_only_paramsassignmentsprev_pos_only_storeprev_kw_only_storer   r=   r[   rE   property_nodeadditional_assignis_fieldinit_varassignment_strann_strdefault_strresultdefault_typedefault_nodeprevious_default	param_strkr7   prev_pos_onlyprev_kw_onlyparams_stringassignments_strings   &&&                           r"   rG   rG      sW    F "NK.OPT.U+"(--"4"4f6G6G% 37!%T!2!2/1B1BCC$///"&7&F&F&HH 1 "3 eUZZ0 
 
5Uu6
 s $~~sss $~~  
 $''d3"&&tT2
##H*eoo66'--
 "
NH$TF#dV4N#T! **,G+E217.L,#y0&2&<&<&>%)::&5#D6\-C-C-E,F G""&tO+<F4&J '
 $oo/!88>?IIK  ;4F.88: 	2gY'I"3{m,,I "'..G.QAEEY4Fqq.GG1:##..0D8")))4MM),),3[+A"(%%i0 *-4k,B#)+"&&t,i(x~.e h #@#M< !M1BxM]TYYv%666M!!$'' ~~dii&?%@AAM7B{3=/)9:L9MNNC #M2 ( Hs   1RR5RRRc               $    V ^8  d   QhRRRRRR/# )r   r   nodes.Unknownctxcontext.InferenceContext | Noner   Iterator[InferenceResult]r    )r!   s   "r"   r#   r#     s$      
=r$   c              #  0  "   V P                   p\        V\        P                  4      '       g   \        x  R# VP
                  VP                  rCVe   VP                  VR7       Rj  xL
  Ve   \        W1R7       Rj  xL
  R# \        x  R#  L( L5i)zInference tip for an Unknown node that was dynamically generated to
represent a dataclass attribute.

In the case that a default value is provided, that is inferred first.
Then, an Instance of the annotated class is yielded.
Nr   )r   )	r6   r-   r   rY   r   r[   rE   infer_infer_instance_from_annotation)r   r   r   r[   rE   s   &&   r"   infer_dataclass_attributer     sw      [[Ffeoo..))6<<;;s;+++2:GGG	 	,Gs$   A'B)B*BBBBc               $    V ^8  d   QhRRRRRR/# )r   r   
nodes.Callr   r   r   r   r    )r!   s   "r"   r#   r#     s$     3 3
3:33r$   c              #    "   \        V P                  \        P                  \        P                  34      '       g   \
        h\        V 4      pV'       g   \        x  R# Vw  r4VR8X  d   VP                  VR7       Rj  xL
  R# \        VP                  4       4      P                  ^ ,          P                  pV P                  Vn        VP                  VR7       Rj  xL
  R#  Lg L5i)z(Inference tip for dataclass field calls.r   r   N)r-   r6   r   rY   Assignr   r   r   r   r	   r   rL   rE   )r   r   r   r   r   new_calls   &&    r"   infer_dataclass_field_callr     s      dkkEOOU\\#BCC!!%F &9$}}S}111W..0166q9??H"kkHO~~c~222	 2 3s%   A>C, C(A C,!C*"C,*C,c               $    V ^8  d   QhRRRRRR/# )r   r   nodes.NodeNGr   r   r   r   r    )r!   s   "r"   r#   r#     s$      
)7	r$   c                h   \        V \        P                  4      '       d   V P                  p  \	        V P                  4       4      p\        V\        4      '       da   \        V \        P                  4      '       d   V P                  V9   # \        V \        P                  4      '       d   V P                  V9   # R# \        V\        P                  4      ;'       d9    VP                  V9   ;'       d"    VP                  4       P                  \         9   #   \        \        3 d
    \        p Li ; i)zReturn True if node looks like a dataclass decorator.

Uses inference to lookup the value of the node, and if that fails,
matches against specific names.
F)r-   r   rB   funcr   r   r   r   r   r   Namer=   	Attributeattrnamer   rJ   DATACLASS_MODULES)r   r   inferreds   && r"   r(   r(     s     $

##yy

% (O,,dEJJ''99//dEOO,,==O33 	8U../ 	6 	6MM_,	6 	6MMO  $55 M* s   D D10D1c                    V ^8  d   QhRRRR/# )r   r   r   r   r   r    )r!   s   "r"   r#   r#     s      - D r$   c                    V P                   pV'       g   R# VP                  4       p\        V\        P                  4      ;'       d.    \        V\        P
                  4      ;'       d    \        V4      # )zVReturn True if node was dynamically generated as the child of an AnnAssign
statement.
F)r6   scoper-   r   rY   r.   r1   )r   r6   r   s   &  r"   _looks_like_dataclass_attributer     s[     [[FLLNE65??+ 	/ 	/uenn-	/ 	/'.r$   c               $    V ^8  d   QhRRRRRR/# )r   r   r   r   r   r   r    )r!   s   "r"   r#   r#     s)     U U
U#'U	Ur$   c                H   V'       d   V P                  4       pVP                  4       p\        V\        P                  4      '       d@   VP
                  e2   \        V\        P                  4      '       d   \        V4      '       g   R#  \        V P                  P                  4       4      p\        T\        P                  4      '       g   R# TP                  \        8H  ;'       d"    TP!                  4       P                  \"        9   #   \        \        3 d     R# i ; i)zReturn True if node is calling dataclasses field or Field
from an AnnAssign statement directly in the body of a ClassDef.

If check_scope is False, skips checking the statement and body.
F)	statementr   r-   r   rY   rE   r.   r1   r   r   r   r   r   r   r=   
FIELD_NAMErJ   r   )r   r   stmtr   r   s   &&   r"   r   r     s     ~~

tU__--

&5%..11+E22		)* h 1 122==J&TT8==?+?+?CT+TT M* s   #D D! D!c                    V ^8  d   QhRRRR/# )r   r   nodes.Moduler   r   r    )r!   s   "r"   r#   r#     s     ) ), )4 )r$   c                (    V P                  4       R 8H  # )dataclasses)qnamer   s   &r"   _looks_like_dataclassesr     s    ::<=((r$   c                    V ^8  d   QhRRRR/# )r   r   r   r   Noner    )r!   s   "r"   r#   r#     s     9 9\ 9d 9r$   c                l    RV P                   9   d#   V P                   R,          V P                   R&   R# R# )z}In python/cpython@6f3c138, a _replace() method was extracted from
replace(), and this indirection made replace() uninferable._replacereplaceN)rI   r   s   &r"   "_resolve_private_replace_to_publicr     s,     T[[ !%Z!8I !r$   c                    V ^8  d   QhRRRR/# )r   
field_callr   r   _FieldDefaultReturnr    )r!   s   "r"   r#   r#   
  s      : 2E r$   c                   RRr!V P                    FA  pVP                  R8X  d   VP                  pK"  VP                  R8X  g   K5  VP                  pKC  	  Ve	   Vf   RV3# Vfj   Vef   \        P                  ! V P
                  V P                  V P                  V P                  V P                  R7      pVP                  V. . R7       RV3# R# )aP  Return a the default value of a field call, and the corresponding keyword
argument name.

field(default=...) results in the ... node
field(default_factory=...) results in a Call node with func ... and no arguments

If neither or both arguments are present, return ("", None) instead,
indicating that there is not a valid default value.
Nr   r   )r4   r5   r6   
end_linenoend_col_offset)r   rl   rC   )rC   rD   rE   r   rB   r4   r5   r6   r   r   postinit)r   r   r   rR   r   s   &    r"   r   r   
  s      $T_&&;;)#mmG[[--%mmO	 ' 6'!!?6::$$!,,$$!,,%44
 	R"E (**r$   c                    V ^8  d   QhRRRR/# r   r   r   r   r   r    )r!   s   "r"   r#   r#   ,  s      L T r$   c                    \        V 4      p\        V\        P                  4      ;'       d    VP	                  4       R8H  # )z,Return True if node is the KW_ONLY sentinel.zdataclasses._KW_ONLY_TYPE)r   r-   r   Instancer   r   r   s   & r"   r\   r\   ,  s9    $H8U^^, 	< 	<NN ;;r$   c                    V ^8  d   QhRRRR/# r   r    )r!   s   "r"   r#   r#   5  s     6 6| 6 6r$   c                     \        V P                  4       4      p\	        TRR4      R8H  #   \        \        3 d     R# i ; i)z@Return True if node is an InitVar, with or without subscripting.Fr=   rz   InitVar)r   r   r   r   getattrr   s   & r"   r]   r]   5  sF    

% 8VR(I55 M* s   + A A c               $    V ^8  d   QhRRRRRR/# )r   r   r   r   r   r   z*Iterator[UninferableBase | bases.Instance]r    )r!   s   "r"   r#   r#   K  s$     ( (
(<(/(r$   c              #    "   Rp \        V P                  VR7      4      p\        V\        P                  4      '       g   \        x  R# VP                  4       P                  R9   d4   VP                  \        9   d   VP                  4       x  R# \        x  R# VP                  4       x  R#   \        \        3 d    \        x   Li ; i5i)zInfer an instance corresponding to the type annotation represented by node.

Currently has limited support for the typing module.
Nr   >   rz   typing_collections_abc)r   r   r   r   r   r-   r   r.   rJ   r=   _INFERABLE_TYPING_TYPESinstantiate_class)r   r   klasss   && r"   r   r   K  s      ETZZZ,- eU^^,,			  

 ::00))++%%'' M* s(   CB1 BC1C
CCCc                    V ^8  d   QhRRRR/# )r   managerr   r   r   r    )r!   s   "r"   r#   r#   f  s      n  r$   c                   \         '       d*   V P                  \        P                  \        \
        4       V P                  \        P                  \        \        4       V P                  \        P                  \        \        R R7      \        4       V P                  \        P                  \        \        R R7      \        4       R# )T)raise_on_overwriteN)r
   register_transformr   Moduler   r   r.   rV   r1   rB   r   r   r   r>   r   r   )r   s   &r"   registerr   f  s    z""LL.#	
 +-H 

0TJ( /DI'r$   )	dataclass)r   marshmallow_dataclasszpydantic.dataclasses)Fr'   )T)Dict	FrozenSetListSetTuple)=__doc__
__future__r   collections.abcr   r   r   astroidr   r   r   astroid.brain.helpersr   astroid.builderr	   astroid.constr
   astroid.exceptionsr   r   r   astroid.inference_tipr   astroid.managerr   astroid.typingr   astroid.utilr   r   r   tupleNodeNGrB   r   	frozensetDATACLASSES_DECORATORSr   r   rK   r1   rV   r;   rA   rw   r   r   rG   r   r   r(   r   r   r   r   r   r\   r]   r   r   r   r    r$   r"   <module>r     s*  
 # $  ) ) . ! $ V V / * * A A 	GI,-.G%&

234  #>2 
D  ) =S
0f8< )F0&ROj.3( ;Q< U<)9D6 $ (6r$   