
    X-Ph{                       U d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
mZ ddlmZmZ ddlmZ ddlmZ dd	l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 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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 dd
l4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZFmGZG ddlHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZY erddlZm[Z[ ddhZ\de]d<   dZ^de]d<   dZ_de]d<    e!dddde^          Z`de]d<   dZade]d <   d!Zbde]d"<    G d# d$          Zc G d% d&          ZddLd+ZedMd.ZfdNd0ZgdOd4ZhdPd7ZidQd8ZjdRd?ZkdSdCZldTdDZmdQdEZndUdJZodKS )Vz-Plugin that provides support for dataclasses.    )annotations)Iterator)TYPE_CHECKINGFinalLiteral)
errorcodesmessage_registry)expand_typeexpand_type_by_instance)
meet_types)format_type_bare) 	ARG_NAMEDARG_NAMED_OPTARG_OPTARG_POSARG_STAR	ARG_STAR2MDEFArgumentAssignmentStmtBlockCallExprClassDefContextDataclassTransformSpec	DecoratorEllipsisExpr
ExpressionFuncDefFuncItemIfStmtJsonDictNameExprNodePlaceholderNodeRefExpr	StatementSymbolTableNodeTempNode	TypeAliasTypeInfoTypeVarExprVar)ClassDefContextFunctionSigContextSemanticAnalyzerPluginInterface)_get_callee_type_get_decorator_bool_argumentadd_attribute_to_classadd_method_to_classdeserialize_and_fixup_type)find_dataclass_transform_specrequire_bool_literal_argument)make_wildcard_trigger)state)map_type_from_supertypetry_getting_literals_from_type)AnyTypeCallableTypeFunctionLikeInstanceLiteralTypeNoneType
ProperType	TupleTypeType	TypeOfAny	TypeVarIdTypeVarTypeUninhabitedType	UnionTypeget_proper_type)fill_typevars)TypeChecker	dataclasszdataclasses.dataclassr   dataclass_makers)dataclasses.Fieldzdataclasses.fieldDATACLASS_FIELD_SPECIFIERS_DTSELF_TVAR_NAMETF)
eq_defaultorder_defaultkw_only_defaultfrozen_defaultfield_specifiers_TRANSFORM_SPEC_FOR_DATACLASSESz__mypy-replace_INTERNAL_REPLACE_SYM_NAMEz__mypy-post_init_INTERNAL_POST_INIT_SYM_NAMEc                  V    e Zd Zd&dZd'dZd(dZd)dZd*d Zed+d"            Z	d,d$Z
d%S )-DataclassAttributenamestralias
str | None
is_in_initboolis_init_varhas_defaultlineintcolumntypeType | Noneinfor+   kw_onlyis_neither_frozen_nor_nonfrozenapir0   returnNonec                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        d S N)r]   r_   ra   rc   rd   re   rg   rh   rj   rk   rl   _api)selfr]   r_   ra   rc   rd   re   rg   rh   rj   rk   rl   rm   s                X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/plugins/dataclasses.py__init__zDataclassAttribute.__init__c   s_     	
$&&			/N,			    current_infoof/Literal['__init__', 'replace', '__post_init__']r   c                  |dk    rIt           }| j        r| j        rt          }n\| j        r| j        st          }nF| j        s| j        rt
          }n0|dk    r| j        r| j        st          nt          }n|dk    rt           }t          |                     |          | 	                    |          | j        rt                      nd |          S )Nru   replace__post_init__)variabletype_annotationinitializerkind)r   rk   rd   r   r   r   rc   r   to_varr
   r   )rs   rw   rx   arg_kinds       rt   to_argumentzDataclassAttribute.to_argument   s     H| # 0 #( #d&6 #$\ #d&6 #"9__$($4`T=M`yyS`HH?"" H[[.. ,,\::*.*:D	
 
 
 	
rv   c                   | j         z| j        j        nt          j        | j        j        j                  5  t          | j         | j        j        j	        t          |          i          cd d d            S # 1 swxY w Y   | j         S rq   )rh   rj   	self_typer9   strict_optional_setrr   optionsstrict_optionalr
   idrK   rs   rw   s     rt   r
   zDataclassAttribute.expand_type   s    9 TY%8%D
 *49+<+LMM  "I	 3 6l8S8ST                 ys   3A77A;>A;r-   c                `    t          | j        p| j        |                     |                    S rq   )r-   r_   r]   r
   r   s     rt   r   zDataclassAttribute.to_var   s)    4:*D,<,<\,J,JKKKrv   r"   c                    | j         sJ | j        | j        | j        | j        | j        | j        | j        | j                                         | j	        | j
        d
S )N)
r]   r_   ra   rc   rd   re   rg   rh   rk   rl   )rh   r]   r_   ra   rc   rd   re   rg   	serializerk   rl   )rs   s    rt   r   zDataclassAttribute.serialize   s`    yIZ/++IkI''))|/3/S
 
 	
rv   datac                    |                                 }t          |                    d          |          } | d||d|d|iS )Nrh   )rh   rj   rm    )copyr5   pop)clsrj   r   rm   typs        rt   deserializezDataclassAttribute.deserialize   sT     yy{{(&)9)93??s8$88$88C8888rv   sub_typec                    | j         ^t          j        | j        j        j                  5  t          | j         || j                  | _         ddd           dS # 1 swxY w Y   dS dS )zoExpands type vars in the context of a subtype when an attribute is inherited
        from a generic super type.N)rh   r9   r   rr   r   r   r:   rj   )rs   r   s     rt   expand_typevar_from_subtypez.DataclassAttribute.expand_typevar_from_subtype   s     9 *49+<+LMM T T3DIxSS	T T T T T T T T T T T T T T T T T T ! s   !AA AN)r]   r^   r_   r`   ra   rb   rc   rb   rd   rb   re   rf   rg   rf   rh   ri   rj   r+   rk   rb   rl   rb   rm   r0   rn   ro   )rw   r+   rx   ry   rn   r   )rw   r+   rn   ri   )rw   r+   rn   r-   )rn   r"   )rj   r+   r   r"   rm   r0   rn   r\   )r   r+   rn   ro   )__name__
__module____qualname__ru   r   r
   r   r   classmethodr   r   r   rv   rt   r\   r\   b   s           8 
  
  
  
D
 
 
 
L L L L
 
 
 
 9 9 9 [9T T T T T Trv   r\   c                      e Zd ZdZd:dZd;dZd<dZd<dZd<dZd=dZ	d>dZ
d?dZd@dZdAd!Zd<d"Z	 dBdCd%ZdDd(ZdEd)ZdFd-ZdGd1ZdHd3ZdId8Zd9S )JDataclassTransformera  Implement the behavior of @dataclass.

    Note that this may be executed multiple times on the same class, so
    everything here must be idempotent.

    This runs after the main semantic analysis pass, so you can assume that
    there are no placeholders.
    r   r   reasonExpression | Statementspecr   rm   r0   rn   ro   c                >    || _         || _        || _        || _        d S rq   )_cls_reason_specrr   )rs   r   r   r   rm   s        rt   ru   zDataclassTransformer.__init__   s$     	
			rv   rb   c                     j         j                                         }|dS |D ]}|j         dS                      dd                               d j        j                                       d j        j                                       d j        j                                       dd                               d	d          d
} j	        j
        j        }|d         r#dj        vsj        d         j        r|r fd|D             }j        r|D ]}|j        t           k    rt"          |_        d |D             }d}||v r	|dz  }||v 	d}	|	|v r	|	dz  }	|	|v 	t%          t'          |          t)          t*          j                  dt.                    g|t%          t'          |	          t)          t*          j                  dt0                    }t3           j	         j         d|t5                                 |d         r                    d          |d         r{ j	                            d          }
t;          t<          j        dz   t<          z   g |
t)          t*          j                             }tC          tD          |          j        t<          <   |d         rM|d         s  j	        #                    d j$                   dD ]!} j	                            d          }
tK          t<          j         dt<           tM          dj         d|           g |
t)          t*          j                             } j	                            d          }t%          t'          d|          |dt                     g}                    |          }|4|j        s-|j'        sJ  j	        #                    d| d|j'                   t3           j	         j         |||||           #g }j(        dd         D ]B}|j)                            d           }|r$tU          |          s|+                    |           C|d         ratY          d! |D                       r j	        #                    d"            -                    |d#            .                    |           nItY          d$ |D                       r j	        #                    d%            -                    |           |d         r /                    ||d&k    '            0                    |           |d	         rd(j        vsj        d(         j        rr|d&k    rl j	                            d)          fd*|D             }tc          | j	                            d+                    }te           j	         j         d(|            3                                  4                    |            j	        j
        j        d,k    r 5                    |           d-j        v r 6                    |           d. |D             |d         d/j)        d <   dS )0zApply all the necessary transformations to the underlying
        dataclass so as to ensure it is fully type checked according
        to the rules in PEP 557.
        NFinitTeqorderfrozenslots
match_args)r   r   r   r   r   r   ru   c                    g | ]:}|j         	                    |j                  #|                    d           ;S )ru   rx   )ra   _is_kw_only_typerh   r   ).0attrrj   rs   s     rt   
<listcomp>z2DataclassTransformer.transform.<locals>.<listcomp>  s^       ? ,0+@+@+K+K  * 55  rv   c                &    h | ]}|j         j        S r   )r}   r]   )r   args     rt   	<setcomp>z1DataclassTransformer.transform.<locals>.<setcomp>  s    &I&I&ISs|'8&I&I&Irv   generated_args_generated_kwargsargsreturn_type__eq__zbuiltins.object.z$"eq" must be True if "order" is True)__lt____gt____le____ge__)	namespace)r   valuesupper_bounddefaultbuiltins.boolotherzYou may not have a custom "z" method when "order" is True)r   r   r   tvar_def   rM   c              3  (   K   | ]}|d           V  dS r   Nr   r   parents     rt   	<genexpr>z1DataclassTransformer.transform.<locals>.<genexpr>i  s*      QQFvh''QQQQQQrv   z;Frozen dataclass cannot inherit from a non-frozen dataclass)settablec              3  &   K   | ]}|d          V  dS r   r   r   s     rt   r   z1DataclassTransformer.transform.<locals>.<genexpr>n  s'      MM6(#MMMMMMrv   z;Non-frozen dataclass cannot inherit from a frozen dataclass)   
   )correct_version__match_args__builtins.strc                V    g | ]%}|j         	|j        t          |j                  &S r   )ra   rk   r@   r]   )r   r   str_types     rt   r   z2DataclassTransformer.transform.<locals>.<listcomp>  sI     $ $ $?$ ,0<$DIx00$ $ $rv   builtins.tuple)r      r|   c                6    g | ]}|                                 S r   )r   r   r   s     rt   r   z2DataclassTransformer.transform.<locals>.<listcomp>  s"    CCC4>>++CCCrv   )
attributesr   )7r   rj   collect_attributesrh   _get_bool_argr   rS   rT   rV   rr   r   python_versionnamesplugin_generatedfallback_to_anyr   r   r   r   r-   r<   rE   explicitr   r   r4   rA   get
named_typer,   rR   fullnamefrom_omitted_genericsr(   r   failr   rG   rF   nodemrometadata)_has_direct_dataclass_transform_metaclassappendany_propertize_callables_freeze	add_slotsreset_init_only_varsrC   r3   %_add_dataclass_fields_magic_attribute_add_internal_replace_method_add_dunder_replace_add_internal_post_init_method)rs   r   r   decorator_arguments
py_versionr   r   existing_args_namesgen_args_namegen_kwargs_nameobj_typeself_tvar_exprmethod_nameorder_tvar_deforder_return_type
order_argsexisting_methodparent_decorator_argumentsr   parent_argsliteralsmatch_args_typerj   r   s   `                     @@rt   	transformzDataclassTransformer.transform   sP   
 y~,,..
5 	 	Dy uu ! &&vt44$$T4:+@AA''1IJJ((4:3LMM''77,,\4@@
 
 Y&5
  '"	4:--J1G1X- .    &  D #    + +Cx7**#*&I&ID&I&I&I# 0#':::!S(M $':::"4%)<<<#s*O &)<<< S//9K1L1LdT\]] S1179;M3N3NPTV_``  	49jt   
  %	O""*"7+ + y++,=>>H(#n4	788 N *9~)N)NDJ~& w' %	&t, U	Et|TTTG ! !  9//0ABB!,"}77~77 $-/O/O+/O/OPPP (#I$CDD" " " %)I$8$8$I$I!S.99>4QXYY
 #'((;"7"7".7W.*////INN`k```',  
 $II# 1,+     &("hqtn 	? 	?F /--k::K
  ?#LV#T#T ?*11+>>>x( 	3QQ6PQQQQQ d	\^bccc&&zE&BBBLL$$$$MM2LMMMMM d	\^bccc&&z222w' 	TNN4Z7=RNSSS!!$
333  -	\ !
22djAQ6R6c2g%%y++N;;H$ $ $ $&$ $ $H
 ($)2F2FGW2X2XYYO"49di9I?[[[22444))*5559+w66$$Z000dj((//
;;; DC
CCC)(3&
 &
k"
 trv   r   list[DataclassAttribute]c           
           fd|D             }d  j         j        D             }t           j         j         d|t	           j         j        |                     dS )zbAdd a `__replace__` method to the class, which is used to replace attributes in the `copy` module.c                `    g | ]*}|j         	|                    j        j        d           +S r{   r   )ra   r   r   rj   r   r   rs   s     rt   r   z<DataclassTransformer._add_dunder_replace.<locals>.<listcomp>  sH     
 
 

TY^	::
 
 
rv   c                    g | ]}|S r   r   )r   tvs     rt   r   z<DataclassTransformer._add_dunder_replace.<locals>.<listcomp>  s    666BR666rv   __replace__r   N)r   	type_varsr4   rr   r?   rj   )rs   r   r   r  s   `   rt   r   z(DataclassTransformer._add_dunder_replace  s    
 
 
 
"
 
 

 76$)"5666	II ;;	
 	
 	
 	
 	
 	
rv   c                     t           j         j        t           fd|D             t	                      d           dS )z
        Stashes the signature of 'dataclasses.replace(...)' for this specific dataclass
        to be used later whenever 'dataclasses.replace' is called for this dataclass.
        c                R    g | ]#}|                     j        j        d           $S r  )r   r   rj   r  s     rt   r   zEDataclassTransformer._add_internal_replace_method.<locals>.<listcomp>  s0    XXXT$""49>i"@@XXXrv   T)r   r   is_staticmethodN)r4   rr   r   rY   rA   rs   r   s   ` rt   r   z1DataclassTransformer._add_internal_replace_method  sT    
 	II&XXXXZXXX 

 	
 	
 	
 	
 	
 	
rv   c                ~     t           j         j        t           fd|D             t	                                 d S )Nc                `    g | ]*}|j         	|                    j        j        d           +S )r|   r   )rc   r   r   rj   r  s     rt   r   zGDataclassTransformer._add_internal_post_init_method.<locals>.<listcomp>  sI       #  O DD  rv   r   )r4   rr   r   rZ   rA   r  s   ` rt   r   z3DataclassTransformer._add_internal_post_init_method  s`    II(   &  
 !


	
 
	
 
	
 
	
 
	
 
	
rv   rj   r+   r   c               <    |s" j                             d j                   d S d |D             }|j        |j        |k    s|j                            d          r? j                             d                     j        j                   j                   d S t          d |j
        dd         D                       rd S ||_        t           fd|D              j                             d	                    }t           j          j        d|           d S )
NzPKeyword argument "slots" for "dataclass" is only valid in Python 3.10 and higherc                    h | ]	}|j         
S r   r]   r   s     rt   r   z1DataclassTransformer.add_slots.<locals>.<setcomp>  s    <<<49<<<rv   	__slots__z;"{}" both defines "__slots__" and is used with "slots=True"c              3  (   K   | ]}|j         d u V  d S rq   )r   )r   ps     rt   r   z1DataclassTransformer.add_slots.<locals>.<genexpr>  s(      771qw$777777rv   r   r   c                D    g | ]}j                             d           S )r   )rr   r   )r   r   rs   s     rt   r   z2DataclassTransformer.add_slots.<locals>.<listcomp>  s)    KKKaTY!!.11KKKrv   r   )rr   r   r   r   r   r   formatr   r]   r   r   rC   r   r3   )rs   rj   r   r   generated_slots
slots_types   `     rt   r   zDataclassTransformer.add_slots  sL     	 INNb   F<<<<<J"tz_'D'DJ
 J
'D INNMTTIN  		   F77277777 	 F$
 KKKK?KKKI  !122
 

 	ty$)[*MMMMMrv   c                :   |D ]}|j         r|j        |j        v r|j        |j        = n	|j         sJ |j        j        j        D ]W}t          |t                    r@|j        r9|j	        d         }t          |t                    r|j        |j        k    rd|_        XdS )zERemove init-only vars from the class and reset init var declarations.r   N)rc   r]   r   defndefsbody
isinstancer   unanalyzed_typelvaluesr#   r   )rs   rj   r   r   stmtlvalues         rt   r   z)DataclassTransformer.reset_init_only_vars  s     	/ 	/D /9
**
49--  ++++ IN/ / /D!$77 /D<P /!%a%fh77 /FK49<T<T +/FK	/ 	/rv   r)  r!   Iterator[AssignmentStmt]c              #     K   |j         D ]$}|j        s|                     |          E d {V  %|j        .|j        j        s$|                     |j                  E d {V  d S d S d S rq   )r%  is_unreachable%_get_assignment_statements_from_block	else_body)rs   r)  r%  s      rt   ,_get_assignment_statements_from_if_statementzADataclassTransformer._get_assignment_statements_from_if_statement  s       I 	L 	LD& LEEdKKKKKKKKK>%dn.K%AA$.QQQQQQQQQQQ &%%%rv   blockr   c              #     K   |j         D ]L}t          |t                    r|V  t          |t                    r|                     |          E d {V  Md S rq   )r%  r&  r   r!   r0  )rs   r1  r)  s      rt   r.  z:DataclassTransformer._get_assignment_statements_from_block  s}      J 	S 	SD$// S



D&)) SLLTRRRRRRRRR		S 	Srv   list[DataclassAttribute] | Nonec                ,   | j         }i }d}t          |j        j        dd                   D ]}d|j        v rd|j        vr dS d|j        vr"| j                            t          |j                             d}|j        d         d         D ]}|d	         }t          
                    ||| j                  }|                    |j                   |||<   |j        j                            |          }|rA|j        r:t          |j        t                     s | j                            d
|j                   t%                      }	|                     d| j        j                  }
|                     |j                  D ]}|j        s|j        d         }t          |t4                    s.|j        j                            |j                  }|U|j        }t          |t8                    rJ t          |t:                    r| j                            d|           t          |t<                    rt          |t                     sJ |j        rd}tA          |j!                  }t          |tD                    r$|j!        j        dk    rd}|j#        d         |_!        | $                    |          rd}
| %                    |j&                  \  }}|                    d          }|| '                    |j&                  }n'tQ          | j        )                    |                    }d}|rd|v pd|v pd|v }nt          |j&        tT                    sd}|s| j        tV          u rd|_,        |
}|                    d          }|?| j        )                    |          }||}n | j                            d|j&                   |j!        r|j-        rk|j.        rd| j        /                    |j&        d          }|r||_!        n9| j                            d|           ta          tb          j2                  |_!        d}d|v rX| j        3                    |d                   }|6| j                            th          j5        |j&        tl          j7                   |	8                    |j                   ts          j:        | j        j;        j<                  5  | =                    ||j        |          }ddd           n# 1 swxY w Y   t          |j        |||||j>        |j?        ||j        |t          |j                  | j                  ||j        <   t          |B                                          }|r|C                    d            d}d}|D ]}|rV|jD        rO|jE        sH|jF        sA|}|j        |	v rt          |j>        |j?                  }| j                            d|           |p|jE        o|jD        }|r[| $                    |j!                  rA|}|j        |	v rt          |j>        |j?                  }| j                            d|           |p| $                    |j!                  }|S )a@  Collect all attributes declared in the dataclass and its parents.

        All assignments of the form

          a: SomeType
          b: SomeOtherType = ...

        are collected.

        Return None if some dataclass base class hasn't been processed
        yet and thus we'll need to ask for another pass.
        Fr   r   dataclass_tagrM   NTr   r]   z?Dataclass attribute may only be overridden by another attributerk   r   zFType aliases inside dataclass definitions are not supported at runtimezdataclasses.InitVarr   r   default_factoryfactoryz,"kw_only" argument must be a boolean literal)is_finalzGNeed type argument for Final[...] with non-literal default in dataclassr_   )code)r]   r_   ra   rc   rd   re   rg   rh   rj   rk   rl   rm   c                    | j         S rq   )rk   )as    rt   <lambda>z9DataclassTransformer.collect_attributes.<locals>.<lambda>  s     rv   )key)re   rg   z>Attributes without a default cannot follow attributes with onez:There may not be more than one field with the KW_ONLY type)Hr   reversedrj   r   r   rr   add_plugin_dependencyr8   r   r\   r   r   r   r   r   r&  r-   r   setr   r   rU   r.  r$  
new_syntaxr(  r#   r]   r%   r*   r   is_classvarrJ   rh   r?   r   r   _collect_field_argsrvalue+_get_default_init_value_for_field_specifierrb   
parse_boolr)   rX   implicitr8  is_inferredanalyze_simple_literal_typer<   rE   
from_errorparse_str_literalr	   %DATACLASS_FIELD_ALIAS_MUST_BE_LITERALr   LITERAL_REQaddr9   r   r   r   _infer_dataclass_attr_init_typere   rg   r   listr   sortra   rd   rk   r   ) rs   r   found_attrsfound_dataclass_supertyperj   r   r]   r   sym_nodecurrent_attr_namesrk   r)  lhssymr   rc   	node_typehas_field_call
field_argsis_in_init_paramra   rd   
is_kw_onlyfield_kw_only_paramvaluer   r_   	init_type	all_attrsfound_defaultfound_kw_sentinelcontexts                                    rt   r   z'DataclassTransformer.collect_attributes  sl    i 68$)!SX\!B$/00 	 	D$-//Kt}4T4Ttt$-// I++,A$-,P,PQQQ(,%k2<@   L)55dD$)LL 00:::$(D!8>--d33  jPS6T6T INNY   $ (+uu$$Y
0JKK>>sxHH K	 K	D ?  ,q/Cc8,, (.$$SX..C{8D!$88888$	** 	]   $	**  dC(((((    K'	22I9h//.N+/DDD"%N1-	$$Y// )-)A)A$+)N)N&NJ)~~f55'!MMdkZZ

!$)"6"67G"H"HII
K  
#+ /(J6/ !J.	   X66 #" $4:1P#P#P  $ J #-..";";".	,,-@AA$!&JJINN#QSWS^___xDMd6F i;;DKRV;WW > #DIIINNa   !(	(< = =DIE*$$	33Jw4GHH=INN(N'3 #    ""38,,,*49+<+LMM V V @@chPTUU	V V V V V V V V V V V V V V V$6X%''Y{X"0YH1 1 I% % %K!!" ++--..	$ 	4NN22N333
 ! 	V 	VD   9I RVR^  $'9 222%49T[IIIG	TV]   *Sd.>.R4?M  T%:%:49%E%E 9 222%49T[IIIG	PRY   !2 UT5J5J495U5Us   ,TT	T	c                   | j         j        }|D ]}|j        r
|j                            |j                  }|,|j        }t          |t                    r|j	        rOd|_
        W|                    |          }||_        d|_
        |j        dz   |j        z   |_        t          t          |          |j        |j        <   dS )zaConverts all attributes to @property methods in order to
        emulate frozen classes.
        NTr   )r   rj   rl   r   r   r]   r   r&  r-   r8  is_propertyr   r   	_fullnamer(   r   )rs   r   rj   r   rT  vars         rt   r   zDataclassTransformer._freeze  s     y~ 	B 	BD
 3 z~~di00H#mc3'' +| ! &*COkk$''"& $ 3ch >'6tS'A'A
38$$)	B 	Brv   Tr   c                <   | j         j        }|D ]}t          t          |j                  t
                    rc|                    |          }||_        d|_        ||_        |j	        dz   |j
        z   |_        t          t          |          |j        |j
        <   dS )a  Converts all attributes with callable types to @property methods.

        This avoids the typechecker getting confused and thinking that
        `my_dataclass_instance.callable_attr(foo)` is going to receive a
        `self` argument (it is not).

        Tr   N)r   rj   r&  rJ   rh   r=   r   re  is_settable_propertyr   r]   rf  r(   r   r   )rs   r   r   rj   r   rg  s         rt   r   z*DataclassTransformer._propertize_callables  s     y~ 	B 	BD/$)44lCC Bkk$''"&+3( $ 3ch >'6tS'A'A
38$	B 	Brv   r   ri   c                v    |dS t          |          }t          |t                    sdS |j        j        dk    S )z=Checks if the type of the node is the KW_ONLY sentinel value.NFzdataclasses.KW_ONLY)rJ   r&  r?   rh   r   )rs   r   rX  s      rt   r   z%DataclassTransformer._is_kw_only_type#  sA    <5#D))	)X.. 	5~&*???rv   c                   d}t          t          j                  }| j        t          u r| j                            d|g          p|}n|}| j                            d| j                            d          |g          }t          ||          }| j	        j
        |_
        | j	        j
        j        dz   |z   |_        d|_        t          t          |d          | j	        j
        j        |<   d S )	N__dataclass_fields__rO   zbuiltins.dictr   )r]   rh   r   T)r   r   r   )r<   rE   r   r   rX   rr   named_type_or_noner   r-   r   rj   r   rf  rB  r(   r   r   )rs   	attr_nameany_type
field_type	attr_typerg  s         rt   r   z:DataclassTransformer._add_dataclass_fields_magic_attribute,  s    *	9-.. :888556IH:VVbZbJJ!JI((di22>BBJO
 
	 yy1119>	/#5	A*9C$+
 +
 +
	Y'''rv   exprr   "tuple[bool, dict[str, Expression]]c                   t          |t                    rt          |j        t                    r|j        j        | j        j        v ri }t          |j        |j	        |j
                  D ]n\  }}}|                                sK|                    d          rd}n| j        t          urBd}| j                            ||           di fc S |J |||<   od|fS di fS )zReturns a tuple where the first value represents whether or not
        the expression is a call to dataclass.field and the second is a
        dictionary of the keyword arguments that field() was called with.
        T)starz0Unpacking **kwargs in "field()" is not supportedz."field()" does not accept positional argumentsNF)r&  r   calleer&   r   r   rW   zip	arg_namesr   	arg_kindsis_namedrX   rr   r   )rs   rr  r   r]   r   r   messages          rt   rC  z(DataclassTransformer._collect_field_argsD  s    tX&&	4;00	 $
(CCC D#&t~ty$.#Q#Q ! !c4}} $}}$}// S #U+JJJ
 !"RINN7D1118OOO''' T

:byrv   r]   r^   r   c                   t          | j        t                    r/t          t	          | j        | j        | j                  ||          S | j        j                            |          }|t          | j        |||          S |S rq   )
r&  r   r   r2   r.   r   rr   keywordsr   r7   )rs   r]   r   
expressions       rt   r   z"DataclassTransformer._get_bool_argf  s~     dlJ// 	/	4<CCT7   Y'++D11
!0JgVVVrv   callc                    t          |t                    sdS t          |          }|dS |                    d          }|dS t	          |j        t          d          }|t          |          dk    rdS |d         S )aX  
        Find a default value for the `init` parameter of the specifier being called. If the
        specifier's type signature includes an `init` parameter with a type of `Literal[True]` or
        `Literal[False]`, return the appropriate boolean value from the literal. Otherwise,
        fall back to the standard default of `True`.
        TNr   r   r   r   )r&  r   r1   argument_by_namer;   r   rb   len)rs   r  specifier_type	parameterr  s        rt   rE  z@DataclassTransformer._get_default_init_value_for_field_specifieru  s     $)) 	4)$//!4"33F;;	41)-WWs8}}114{rv   rW  r(   rc  r   c                   |j         }|j        r|S t          |j                   }t          |t                    s|S |j                             d          }|r!t          |j        t                    r|j                             d          }|sJ |j         r)t          t          |j         |j         |                    }nt          t          j                  S t          |t                    r8|j        t          t          t          gk    rt!          |j        d         |          S | j                            d|j         j         d|           n)| j                            d|j         j         d|           |S )zvInfer __init__ argument type for an attribute.

        In particular, possibly use the signature of __set__.
        __set__   z(Unsupported signature for "__set__" in ""zUnsupported "__set__" in ")rh   rG  rJ   r&  r?   r   r   r   get_containing_type_infor:   r<   rE   unannotatedr=   ry  r   r   	arg_typesrr   r   r]   )	rs   rW  r]   rc  r   tsetter
super_infosetter_types	            rt   rO  z4DataclassTransformer._infer_dataclass_attr_init_type  s~    (< 	NCH%% !X&& 	NI&& 	U&+w// UV<<YGG
!!!!; :"1/QVZPP# #KK #9#8999k<88 	[=RW > >
 3;3H3KQOOOINNQ16;QQQSZ    	JAFKJJJGTTTrv   N)
r   r   r   r   r   r   rm   r0   rn   ro   )rn   rb   )r   r	  rn   ro   )rj   r+   r   r	  r   rb   rn   ro   )rj   r+   r   r	  rn   ro   )r)  r!   rn   r+  )r1  r   rn   r+  )rn   r3  )T)r   r	  r   rb   rn   ro   )r   ri   rn   rb   )rn   ro   )rr  r   rn   rs  )r]   r^   r   rb   rn   rb   )r  r   rn   rb   )rW  r(   r]   r^   rc  r   rn   ri   )r   r   r   __doc__ru   r  r   r   r   r   r   r0  r.  r   r   r   r   r   rC  r   rE  rO  r   rv   rt   r   r      s           m m m m^
 
 
 
 
 
 
 

 
 
 
(N (N (N (NT/ / / /"R R R RS S S Sf f f fPB B B B8 FJB B B B B(@ @ @ @
 
 
 
0       D      0* * * * * *rv   r   rj   r+   rn   ro   c                    i | j         d<   d S )Nr5  )r   rj   s    rt   add_dataclass_tagr    s    %'DM/"""rv   ctxr.   c                8    t          | j        j                   dS )zRecord that we have a dataclass in the main semantic analysis pass.

    The later pass implemented by DataclassTransformer will use this
    to detect dataclasses in base classes.
    N)r  r   rj   r  s    rt   dataclass_tag_callbackr    s     cgl#####rv   rb   c                0   t          d | j        j        j        D                       r(| j                            d| j        j                   dS t          | j        | j        t          | j                  | j                  }|	                                S )zIHooks into the class typechecking process to add support for dataclasses.c              3  $   K   | ]}|j         V  d S rq   )is_named_tuple)r   is     rt   r   z1dataclass_class_maker_callback.<locals>.<genexpr>  s%      
6
61
6
6
6
6
6
6rv   z"A NamedTuple cannot be a dataclassr  T)
r   r   rj   r   rm   r   r   r   _get_transform_specr  )r  transformers     rt   dataclass_class_maker_callbackr    s    

6
6SW\%5
6
6
666 9sw|LLLt&0<<cg K   """rv   r   r   r   c                h    t          |           rt          S t          |           }|
J d            |S )a  Find the relevant transform parameters from the decorator/parent class/metaclass that
    triggered the dataclasses plugin.

    Although the resulting DataclassTransformSpec is based on the typing.dataclass_transform
    function, we also use it for traditional dataclasses.dataclass classes as well for simplicity.
    In those cases, we return a default spec rather than one based on a call to
    `typing.dataclass_transform`.
    Nztrying to find dataclass transform spec, but reason is neither dataclasses.dataclass nor decorated with typing.dataclass_transform)_is_dataclasses_decoratorrX   r6   )r   r   s     rt   r  r    sG     !(( /..(00D	4  Krv   r   r$   c                    t          | t                    r| j        } t          | t                    r| j        t
          v S dS )NF)r&  r   rv  r&   r   rN   )r   s    rt   r  r    s@    $!! {$   1} 0005rv   c                :    | j         d uo| j         j        j        d uS rq   )declared_metaclassrh   dataclass_transform_specr  s    rt   r   r     s)    t+ 	N#(AMrv   r/   r   rB   display_typ
parent_typlist[CallableType] | Nonec                .   t          |t                    rHg }|                                D ]/}t          |          }t	          | |||          }||||z  }-d}0|S t          |t
                    r$t	          | t          |j                  ||          S t          |t                    ri|j        	                    t                    }|dS |j        }t          |t                    sJ t          |t                    sJ t          ||          gS dS )a
  
    For a given type, determine what dataclasses it can be: for each class, return the field types.
    For generic classes, the field types are expanded.
    If the type contains Any or a non-dataclass, returns None; in the latter case, also reports an error.
    N)r&  rI   relevant_itemsrJ    _get_expanded_dataclasses_fieldsrG   r   r?   rh   
get_methodrY   rB   r=   r   )	r  r   r  r  retitem
item_typesreplace_symreplace_sigs	            rt   r  r    s0    #y!! )+&&(( 	 	D"4((D9#tT:VVJ:#9z!
	C	%	% /11;

 
 	
 
C	"	" 	h))*DEE4!&+z22222+|44444'S99::trv   sigslist[CallableType]r=   c                J   d t          | d         j        | d         j        | d         j                  D             }| dd         D ]}d t          |j        |j        |j                  D             }g |                                |                                R D ]}|                    |t                      t          f          \  }}|                    |t                      t          f          \  }}t          ||          ||cxk    rt          k    r
n nt          nt          f||<   | d         
                    t          |                                          d |                                D             d |                                D                       S )	zX
    Produces the lowest bound of the 'replace' signatures of multiple dataclasses.
    c                     i | ]\  }}}|||fS r   r   r   r]   r   r   s       rt   
<dictcomp>z&_meet_replace_sigs.<locals>.<dictcomp>  s4       D#t 	sDk  rv   r   r   Nc                     i | ]\  }}}|||fS r   r   r  s       rt   r  z&_meet_replace_sigs.<locals>.<dictcomp>%  s4     
 
 
c4 3+
 
 
rv   c                    g | ]\  }}|S r   r   )r   r   r   s      rt   r   z&_meet_replace_sigs.<locals>.<listcomp>3  s    333633333rv   c                    g | ]\  }}|S r   r   )r   r   r   s      rt   r   z&_meet_replace_sigs.<locals>.<listcomp>4  s    555GAt4555rv   )rx  r  ry  )rw  rx  r  ry  keysr   rH   r   r   r   copy_modifiedrP  r   )	r  r   sigsig_argsr]   sig_typsig_kindsig2_typ	sig2_kinds	            rt   _meet_replace_sigsr    s    "47#4d1g6GaIZ[[  D
 ABBx  
 
#&s}cmS]#S#S
 
 
 5diikk4HMMOO44 	 	D $0A0A=/Q R RGX"*,,to6G6G5W"X"XHi7H--!)Y!G!G!G!G-!G!G!G!G!GYDJJ	 7  tyy{{##33T[[]]33355t{{}}555 !   rv   c           
        t          | j                  dk    r5| j                            d| j        j         d| j                   | j        S t          | j        d                   dk    r| j        S | j        d         d         }t          | j                            |                    }t          || j        j
                  }t          | |||          }|| j        S t          |          }|                    dg|j        t          g|j        |g|j        || j        j        | j        j         d|           S )	z
    Returns a signature for the 'dataclasses.replace' function that's dependent on the type
    of the first positional argument.
    r  r  z " has unexpected type annotationr   r   Nz of )rx  ry  r  ret_typefallbackr]   )r  r   rm   r   default_signaturer]   rc  rJ   get_expression_typer   r   r  r  r  rx  r   ry  r  r  )r  obj_argr   inst_type_strreplace_sigsr  s         rt   replace_function_sig_callbackr  8  sF   
 38}}U.3UUUWZWbccc$$
38A;1$$hqk!nGsw::7CCDDH$Xsw??M3C8XVVL$$$\22K$$0+/03[234k34&/%*???? %   rv   c                2    t          |           od| j        v S )NrM   )rb   r   r  s    rt   is_processed_dataclassr  X  s    ::6+66rv   rm   rL   r#  r    c           
     t   |j         d S t          |j         t                    sJ |                    t                    }||j         J |j         }t          |t
                    sJ t          |t                    sJ |                    d          }|                     |j         |ddddd|           d S )Nr|   r  rM   F)overrideoriginalr]   name_in_super	supertypeoriginal_class_or_staticoverride_class_or_staticr   )	rh   r&  r>   r  rZ   rB   r=   r  check_override)rm   r#  rj   ideal_sig_method	ideal_sigs        rt   check_post_initr  \  s    ydi.....'CDD',<,A,M,M,M %Ii,,,,,i.....''_'==I%!&!&  	 	 	 	 	rv   N)rj   r+   rn   ro   )r  r.   rn   ro   )r  r.   rn   rb   )r   r   rn   r   )r   r$   rn   rb   )rj   r+   rn   rb   )
r  r/   r   rB   r  rB   r  rB   rn   r  )r  r  rn   r=   )r  r/   rn   r=   )rm   rL   r#  r    rj   r+   rn   ro   )pr  
__future__r   collections.abcr   typingr   r   r   mypyr   r	   mypy.expandtyper
   r   	mypy.meetr   mypy.messagesr   
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*   r+   r,   r-   mypy.pluginr.   r/   r0   mypy.plugins.commonr1   r2   r3   r4   r5   mypy.semanal_sharedr6   r7   mypy.server.triggerr8   
mypy.stater9   mypy.typeopsr:   r;   
mypy.typesr<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   mypy.typevarsrK   mypy.checkerrL   rN   __annotations__rP   rR   rX   rY   rZ   r\   r   r  r  r  r  r  r   r  r  r  r  r  r   rv   rt   <module>r     s   3 3 3 " " " " " " $ $ $ $ $ $ 0 0 0 0 0 0 0 0 0 0 - - - - - - - - @ @ @ @ @ @ @ @             * * * * * *! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !D ] \ \ \ \ \ \ \ \ \              ] \ \ \ \ \ \ \ 5 5 5 5 5 5       P P P P P P P P                                 " ( ' ' ' ' ' )(((((( '(?@  @ @ @ @$N  N N N N     )?)?/* * *      %5  4 4 4 4&8  8 8 8 8jT jT jT jT jT jT jT jTZh h h h h h h hV( ( ( (
$ $ $ $# # # #   (         J   :   @7 7 7 7     rv   