a
    g=ic                     @   s  d dl 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 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,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d d	l9m:Z: d d
l;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZBmZmCZCmDZDmEZEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZN d dlOmPZP zd dl=mQZQ W n  eRy   d dl=mEZQ Y n0 dZSdZTdZUdZVdZWdZXeYe
eZdf dddZ[e[eNZ\e\dkrdndZ]eYddd d!Z^G d"d# d#e5Z_G d$d% d%Z`e4ed&d'd(ZaG d)d* d*ZbG d+d, d,ZcG d-d. d.Zded/d0d1Zeed2d3d1Zfed4d5d1Zged6d7d1Zhed8d9d1Zied8d:d1ZjeYe1edd;d<d=ZkeYe6edd>d?d@Zle6eddAdBdCZmeYe1eddDdEdFZne6eddAdGdHZoe1eddAdIdJZpdWe2eYee eee eeQ eqeqddL	dMdNZreee(f eYdOdPdQZseee(f eYdOdRdSZteYeeeYef  dTdUdVZudS )X    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SemanticAnalyzerPluginInterface)dataclasses)set_callable_name)make_wildcard_trigger)AnyTypeCallableTypeInstanceNoneType
Overloadedr
   	TypeOfAnyTypeTypeTypeVarType	UnionTypeget_proper_type)fill_typevars)get_unique_redefinition_name)__version__)is_valid_field)
TypeVarDef)r;   pydantic-mypyzpydantic-mypy-metadatazpydantic.main.BaseModelz"pydantic.env_settings.BaseSettingszpydantic.fields.Fieldzpydantic.dataclasses.dataclass.)versionreturnc                 C   s$   t dd | ddd dD S )Nc                 s   s   | ]}t |V  qd S N)int).0part rJ   ^/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pydantic/mypy.py	<genexpr>S       z%parse_mypy_version.<locals>.<genexpr>+   r   .)tuplesplitrD   rJ   rJ   rK   parse_mypy_versionR   s    rT   )r   i  builtins__builtins__zTypingType[Plugin]c                 C   s   t 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   rJ   rJ   rK   pluginZ   s    rX   c                       s   e Zd Zedd fddZeddddZed	dd
dZeee	e
gef  dddZeee	egdf  dddZeddddZeddddZ  ZS )rW   NoptionsrE   c                    s   t || _t | d S rF   )PydanticPluginConfigplugin_configsuper__init__)selfrZ   	__class__rJ   rK   r^   e   s    
zPydanticPlugin.__init__z+Optional[Callable[[ClassDefContext], None]])fullnamerE   c                 C   s:   |  |}|r6t|jtr6tdd |jjD r6| jS d S )Nc                 s   s   | ]}t |tkV  qd S rF   )get_fullnameBASEMODEL_FULLNAMErH   baserJ   rJ   rK   rL   m   rM   z5PydanticPlugin.get_base_class_hook.<locals>.<genexpr>)lookup_fully_qualified
isinstancenoder'   anymro$_pydantic_model_class_maker_callbackr_   rb   symrJ   rJ   rK   get_base_class_hooki   s
    
z"PydanticPlugin.get_base_class_hookz+Optional[Callable[[FunctionContext], Type]]c                 C   s"   |  |}|r|jtkr| jS d S rF   )rg   rb   FIELD_FULLNAME_pydantic_field_callbackrm   rJ   rJ   rK   get_function_hookq   s    
z PydanticPlugin.get_function_hookc                 C   s   | drtS d S )Nz	.from_orm)endswithfrom_orm_callbackr_   rb   rJ   rJ   rK   get_method_hookw   s    
zPydanticPlugin.get_method_hookc                 C   s   |t krtjS d S rF   )DATACLASS_FULLNAMEr1   Zdataclass_class_maker_callbackru   rJ   rJ   rK   get_class_decorator_hook|   s    z'PydanticPlugin.get_class_decorator_hookctxrE   c                 C   s   t || j}|  d S rF   )PydanticModelTransformerr\   	transform)r_   rz   ZtransformerrJ   rJ   rK   rl      s    z3PydanticPlugin._pydantic_model_class_maker_callbackr
   c           	         s   |j  |jd dksJ d|jd dks2J d|jd }|jd }|r`|r`t|j|j  S |r|jd d }|d }t|ts|S n|r|jd d }t|t	rt
dkr|jd }n| d }t|tr|j}t|dd	}|rtd
d |D rt fdd|D |_|S  S )ax  
        Extract the type of the `default` argument from the Field function, and use it as the return type.

        In particular:
        * Check whether the default and default_factory argument is specified.
        * Output an error if both are specified.
        * Retrieve the type of the argument which is specified, and use it as return type for the function.
        r   defaultz0"default" is no longer first argument in Field()rO   default_factoryz9"default_factory" is no longer second argument in Field())r   i  argsNc                 s   s   | ]}t |tV  qd S rF   )rh   r;   )rH   argrJ   rJ   rK   rL      rM   z:PydanticPlugin._pydantic_field_callback.<locals>.<genexpr>c                 3   s   | ]
} V  qd S rF   rJ   )rH   _Zdefault_any_typerJ   rK   rL      rM   )default_return_typeZcallee_arg_namesr   +error_default_and_default_factory_specifiedapicontext	arg_typesrh   r   r8   MYPY_VERSION_TUPLEitemsr5   ret_typegetattrallrQ   )	r_   rz   Zdefault_argsZdefault_factory_argsZdefault_typeZdefault_argZdefault_factory_typer   r   rJ   r   rK   rq      s6    	



z'PydanticPlugin._pydantic_field_callback)__name__
__module____qualname__r*   r^   strro   rr   r   r   r.   r
   rv   r,   rx   rl   r-   rq   __classcell__rJ   rJ   r`   rK   rW   d   s   rW   c                   @   sB   e Zd ZU dZeed< eed< eed< eed< edddd	ZdS )
r[   )init_forbid_extra
init_typedwarn_required_dynamic_aliaseswarn_untyped_fieldsr   r   r   r   NrY   c                 C   s   |j d u rd S t|j }|d urr|di di }| jD ]4}||d}t|tsbtd| t| || q:n:t }|	|j  | jD ] }|j
t|dd}t| || qd S )NZtoolrC   Fz/Configuration value must be a boolean for key: )fallback)config_file
parse_tomlget	__slots__rh   bool
ValueErrorsetattrr   read
getbooleanCONFIGFILE_KEY)r_   rZ   Ztoml_configconfigkeysettingr\   rJ   rJ   rK   r^      s    




zPydanticPluginConfig.__init__)r   r   r   r   r   __annotations__r*   r^   rJ   rJ   rJ   rK   r[      s   
r[   ry   c                 C   s   t | jtr$t | jjtr$| jj}nDt | jtr8| j}n0d| j d| jjj d}t|| j| j	 | j
S |jjt}|du r| j
S |di d}|durtt|j| j| j	 | j
S )z3
    Raise an error if orm_mode is not enabled
    z
ctx.type: z
 (of type )Nr   orm_modeT)rh   typer5   r   r6   ra   r   error_unexpected_behaviorr   r   r   metadatar   METADATA_KEYerror_from_ormget_name)rz   Z
model_typedetailZpydantic_metadatar   rJ   rJ   rK   rt      s    
rt   c                   @   sN  e Zd ZU h dZee ed< eeddddZ	dddd	Z
ddd
dZddddZded dddZed deddddZed ddddZed eddddZeed dddZeeeeedd d!Zeeeee ef d"d#d$Zed eeeee d%d&d'Zed ded(d)d*Zeed eed+d,d-ZdS ).r{   >   allow_mutationfrozenextrar   allow_population_by_field_namealias_generatortracked_config_fieldsN)rz   r\   rE   c                 C   s   || _ || _d S rF   )_ctxr\   )r_   rz   r\   rJ   rJ   rK   r^      s    z!PydanticModelTransformer.__init__rE   c                 C   s   | j }| j jj}|   |  }| |}|D ]&}||j jdu r.|jj	s.|j
  q.tdd |jdd D }| ||| | | | j||jdu p|jdu d dd	 |D | d
|jt< dS )a  
        Configures the BaseModel subclass according to the plugin settings.

        In particular:
        * determines the model config and fields,
        * adds a fields-aware signature for the initializer and construct methods
        * freezes the class if allow_mutation = False or frozen = True
        * stores the fields, config, and if the class is settings in the mypy metadata for access by subclasses
        Nc                 s   s   | ]}t |tkV  qd S rF   )rc   BASESETTINGS_FULLNAMEre   rJ   rJ   rK   rL     rM   z5PydanticModelTransformer.transform.<locals>.<genexpr>FT)r   c                 S   s   i | ]}|j | qS rJ   )name	serializerH   fieldrJ   rJ   rK   
<dictcomp>  rM   z6PydanticModelTransformer.transform.<locals>.<dictcomp>)fieldsr   )r   clsinfoadjust_validator_signaturescollect_configcollect_fieldsr   r   r   Zfinal_iterationZdeferrj   rk   add_initializeradd_construct_method
set_frozenr   r   set_values_dictr   r   )r_   rz   r   r   r   r   is_settingsrJ   rJ   rK   r|      s     



z"PydanticModelTransformer.transformc                 C   sb   | j jjj D ]L\}}t|jtr|jjd }t|t	rt|j
tr|j
jdkrd|jj_qdS )a[  When we decorate a function `f` with `pydantic.validator(...), mypy sees
        `f` as a regular method taking a `self` instance, even though pydantic
        internally wraps `f` with `classmethod` if necessary.

        Teach mypy this by marking any function whose outermost decorator is a
        `validator()` call as a classmethod.
        r   z#pydantic.class_validators.validatorTN)r   r   r   namesr   rh   ri   r   Zoriginal_decoratorsr   calleer   rb   funcis_class)r_   r   rn   Z	first_decrJ   rJ   rK   r     s    

z4PydanticModelTransformer.adjust_validator_signaturesModelConfigDatac           	      C   s   | j }|j}t }|jjD ]d}t|ts*q|jdkr|jjD ] }t|tsLq<|	| 
| q<|jr|js| jjrt|j| q|jjdd D ]L}t|jvrq|jtt| |jt d  D ]\}}||| qq|S )zz
        Collects the values of the config attributes that are used by the plugin, accounting for parent classes.
        ZConfigrO   Nr   )r   r   r   defsbodyrh   r   r   r   updateget_config_updatehas_alias_generatorr   r\   r   error_required_dynamic_aliasesr   r   rk   r   r   add_plugin_dependencyr3   rc   r   
setdefault)	r_   rz   r   r   stmtsubstmtr   r   valuerJ   rJ   rK   r   )  s2    



z'PydanticModelTransformer.collect_configPydanticModelField)model_configrE   c                    s  | j }| j j}g }t }|jjD ]}t|ts0q |jd }t|tr t	|j
sPq |jsj| jjrjt|j| |jj|j
}|du rq |j}	t|	trq t|	tsq |	jrq | |||}
| |\}}|r|js| jjrt|j| |t|j
|
|||j|jd | |j
 q |! }|jj"dd D ]}t#|j$vr>q*g }|j%t&t'| |j$t# d ( D ]^\ } |vrt)||}|   || n( fdd|D \}|*| || qh|| }q*|S )zR
        Collects the fields for the model, accounting for parent classes
        r   Nr   is_requiredaliashas_dynamic_aliaslinecolumnrO   r   c                 3   s   | ]}|j  kr|V  qd S rF   r   )rH   ar   rJ   rK   rL     rM   z:PydanticModelTransformer.collect_fields.<locals>.<genexpr>)+r   r   setr   r   rh   r   lvaluesr   rA   r   Z
new_syntaxr\   r   error_untyped_fieldsr   r   r   r   ri   r!   r)   Zis_classvarget_is_requiredget_alias_infor   r   r   appendr   r   r   addcopyrk   r   r   r   r3   rc   r   deserializeremove)r_   r   rz   r   r   Zknown_fieldsr   lhsrn   ri   r   r   r   Z
all_fieldsr   Zsuperclass_fieldsdatar   rJ   r   rK   r   H  st    







z'PydanticModelTransformer.collect_fields)r   r   r   rE   c           
      C   s   | j }| jj}|jdu}|p,t|jo*|j }| j||||d}| ||sntd}	|	t
|	ttjdt d|jjjvrt|d|t  dS )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_aliaskwargsNr^   )r   r\   r   r   r   r   get_field_argumentsshould_init_forbid_extrar)   r   r   r4   r9   explicitr   r   r   r   
add_methodr7   )
r_   r   r   r   rz   r   r   r   Zinit_argumentsvarrJ   rJ   rK   r     s    
z(PydanticModelTransformer.add_initializer)r   rE   c              	   C   s   | j }|jt d|jt dg}t|t g}ttd||dt}| j	|dddd}|g| }|jt d}d	}|j
jd
 | }	t||	dg |}
t||	g |}tt||j
jj|< t|
tr|
}nt|
}t|d||||
dd dS )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_PydanticBaseModelrP   r   	construct)return_type	self_typetvar_defis_classmethod)r   r   
named_typeBUILTINS_NAMEr<   r7   r   r)   r   r   r   rb   rB   r(   r%   r   r   r   rh   r;   r   )r_   r   rz   Zset_strZoptional_set_strZfields_set_argumentZconstruct_argumentsobj_typeZself_tvar_nameZtvar_fullnameZtvdZself_tvar_exprr   rJ   rJ   rK   r     s0    $

z-PydanticModelTransformer.add_construct_method)r   r   rE   c                 C   s   | j jj}|D ]z}|j|j}|durD|j}t|ts<J ||_	q|j
|dd}||_||_	t|d t| |_tt||jt|< qdS )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.
        NF)r   rP   )r   r   r   r   r   r   ri   rh   r)   Zis_propertyto_varrc   r   	_fullnamer%   r   )r_   r   r   r   r   Zsym_noder   rJ   rJ   rK   r     s    
z#PydanticModelTransformer.set_frozen)r   rE   c                 C   s   |j d }t|tr |j| jv s$dS |jdkrt|jtrH|jjdk}n0t|jtrb|jjdk}nt	|j| j
j| dS t|dS |jdkrd}t|jtr|jjdkrd	}t|d
S t|jtr|jjdv rtf i |j|jjdkiS t	|j| j
j| dS )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)
        r   Nr   Zforbid)forbid_extrar   Tzbuiltins.NoneF)r   )builtins.Truezbuiltins.Falser  )r   rh   r   r   r   rvaluer#   r   r   error_invalid_config_valuer   r   r   rb   )r_   r   r   r  r   rJ   rJ   rK   r     s(    




z*PydanticModelTransformer.get_config_update)r   r   r   rE   c                 C   s   |j }t|trHt| j|j j}t|trDtdd |j	D rDdS dS t|t
rt|jtr|jjtkrt|j|jD ]4\}}|du s|dkr|jtu   S |dkrx dS qxdS t|tS )zg
        Returns a boolean indicating whether the field defined in `stmt` is a required field.
        c                 s   s   | ]}t |tV  qd S rF   )rh   r7   )rH   itemrJ   rJ   rK   rL     rM   z;PydanticModelTransformer.get_is_required.<locals>.<genexpr>FTNr}   r~   )r  rh   r&   r=   r   r   r   r<   rj   r   r   r   r"   rb   rp   zipr   	arg_namesra   r   )r   r   r   expr
value_typer   r   rJ   rJ   rK   r     s    
"z(PydanticModelTransformer.get_is_required)r   rE   c                 C   s   | j }t|trdS t|tr6t|jtr6|jjtks:dS t|j	D ]:\}}|dkrVqD|j
| }t|trx|jdf  S  dS qDdS )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.
        )NFr   F)NT)r  rh   r&   r   r   r"   rb   rp   	enumerater  r   r#   r   )r   r	  iarg_namer   rJ   rJ   rK   r   "  s$    




z'PydanticModelTransformer.get_alias_info)r   r   r   r   rE   c                    s&   | j jj fdd|D }|S )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.
        c                    s(   g | ] }r|j s|j d qS ))r   force_optionalr   )r   to_argumentr   r   r   r   r   rJ   rK   
<listcomp>H  s   
z@PydanticModelTransformer.get_field_arguments.<locals>.<listcomp>)r   r   r   )r_   r   r   r   r   	argumentsrJ   r  rK   r   ?  s
    
z,PydanticModelTransformer.get_field_arguments)r   r   rE   c                 C   s.   |j s| |t|jrdS |jr&dS | jjS )aH  
        Indicates whether the generated `__init__` should get a `**kwargs` at the end of its signature

        We disallow arbitrary kwargs if the extra config setting is "forbid", or if the plugin config says to,
        *unless* a required dynamic alias is present (since then we can't determine a valid signature).
        FT)r   is_dynamic_alias_presentr   r   r  r\   r   )r_   r   r   rJ   rJ   rK   r   O  s    z1PydanticModelTransformer.should_init_forbid_extra)r   r   rE   c                 C   s8   | D ]}|j r dS q|r4| D ]}|jdu r dS qdS )z
        Returns whether any fields on the model have a "dynamic alias", i.e., an alias that cannot be
        determined during static analysis.
        TNF)r   r   )r   r   r   rJ   rJ   rK   r  ]  s    
z1PydanticModelTransformer.is_dynamic_alias_present) r   r   r   r   r   r   r   r,   r[   r^   r|   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r	   r   r   r   r   r  rJ   rJ   rJ   rK   r{      s(   
	T%r{   c                   @   st   e Zd Zeeee eeedddZeee	dddZ
eeeeeddd	Zed
ddZeeed dddZdS )r   r   c                 C   s(   || _ || _|| _|| _|| _|| _d S rF   r   )r_   r   r   r   r   r   r   rJ   rJ   rK   r^   n  s    zPydanticModelField.__init__)r   r   rE   c                 C   s,   | j }|r| jd ur| j}t||| j  jS rF   )r   r   r)   r   )r_   r   r   r   rJ   rJ   rK   r   x  s    zPydanticModelField.to_var)r   r   r  r   rE   c                 C   sR   |r"|| j  jd ur"|| j  j}n
ttj}t| |||d |sF| jsJtnt	dS )N)variabletype_annotationZinitializerkind)
r   r   r4   r9   r   r   r   r   r   r   )r_   r   r   r  r   r  rJ   rJ   rK   r  ~  s    

zPydanticModelField.to_argumentr   c                 C   s   | j S rF   )__dict__r_   rJ   rJ   rK   r     s    zPydanticModelField.serialize)r   r   rE   c                 C   s   | f i |S rF   rJ   )r   r   r   rJ   rJ   rK   r     s    zPydanticModelField.deserializeN)r   r   r   r   r   r   rG   r^   r'   r)   r   r   r  r   r   classmethodr   rJ   rJ   rJ   rK   r   m  s   
r   c                   @   sz   e Zd Zdee ee ee ee ee ee dddZeeef dddZ	ed  ddd	d
Z
eeddddZdS )r   Nr  r   r   r   r   r   c                 C   s(   || _ || _|| _|| _|| _|| _d S rF   r  )r_   r  r   r   r   r   r   rJ   rJ   rK   r^     s    	zModelConfigData.__init__r   c                 C   s   dd | j  D S )Nc                 S   s   i | ]\}}|d ur||qS rF   rJ   )rH   kvrJ   rJ   rK   r     rM   z3ModelConfigData.set_values_dict.<locals>.<dictcomp>)r  r   r  rJ   rJ   rK   r     s    zModelConfigData.set_values_dict)r   rE   c                 C   s2   |d u rd S |   D ]\}}t| || qd S rF   )r   r   r   )r_   r   r  r  rJ   rJ   rK   r     s    zModelConfigData.update)r   r   rE   c                 C   s   t | |d u rt| || d S rF   )r   r   )r_   r   r   rJ   rJ   rK   r     s    zModelConfigData.setdefault)NNNNNN)r   r   r   r   r   r^   r   r   r   r   r   r   rJ   rJ   rJ   rK   r     s"         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 defaults)
model_namer   r   rE   c                 C   s   |j d|  d|td d S )N"z" does not have orm_mode=Truecode)fail	ERROR_ORM)r  r   r   rJ   rJ   rK   r     s    r   )r   r   r   rE   c                 C   s   |j d|  d|td d S )NzInvalid value for "Config.r  r   )r"  ERROR_CONFIG)r   r   r   rJ   rJ   rK   r    s    r  )r   r   rE   c                 C   s   | j d|td d S )Nz#Required dynamic aliases disallowedr   )r"  ERROR_ALIASr   r   rJ   rJ   rK   r     s    r   )r   r   r   rE   c                 C   s4   d}d|  d}|d| d7 }|j ||td d S )Nz6https://github.com/pydantic/pydantic/issues/new/choosez7The pydantic mypy plugin ran into unexpected behavior: 
z&Please consider reporting this bug at z so we can try to fix it!r   )r"  ERROR_UNEXPECTED)r   r   r   linkZfull_messagerJ   rJ   rK   r     s    r   c                 C   s   | j d|td d S )NzUntyped fields disallowedr   )r"  ERROR_UNTYPEDr&  rJ   rJ   rK   r     s    r   c                 C   s   | j d|td d S )Nz>Field default and default_factory cannot be specified togetherr   )r"  ERROR_FIELD_DEFAULTSr&  rJ   rJ   rK   r     s    r   F)	rz   r   r   r   r   r   r   is_newrE   c                 C   s  | j j}||jv r@|j| }	|	jr@t|	jtr@| j jj	|	j |pJt
|}|sT|rpttdt|dtg}
n |pzt
|}ttd|dtg}
|
| }g g g   }}}|D ]:}|jsJ d||j |t|j ||j q| jt d}t|||||}|r|g|_t||tt g}||_t|||_||_t|d | |_ |j!|_!||jv rt"||j}|j| |j|< |rd|_#t||j}||_|j |_ d|_$t%|t&dg|}|j!|_!t't(|}	n
t't(|}	d|	_|	|j|< |j)jj| dS )	z}
    Adds a new method to a class.

    This can be dropped if/when https://github.com/python/mypy/issues/7301 is merged
    _clsNZ__pydantic_self__z"All arguments must be fully typed.z	.functionrP   Tr  )*r   r   r   Zplugin_generatedrh   ri   r   r   r   r   r>   r   r)   r:   Zmake_normalizedr   r  r   r   r  r  r   r   r   r5   	variablesr   r    r2   r   r   rc   r  r   r?   Zis_decoratedr   r   r   r%   r   Zdefn)rz   r   r   r   r   r   r   r,  r   rn   firstr   r  Z	arg_kindsr   Zfunction_type	signaturer   Zr_namer  decrJ   rJ   rK   r     sV    



r   )xrE   c                 C   s   | j }t|r| S |S zc
    Used for compatibility with mypy 0.740; can be dropped once support for 0.740 is dropped.
    )rb   callabler2  fnrJ   rJ   rK   rc   (  s    rc   c                 C   s   | j }t|r| S |S r3  )r   r4  r5  rJ   rJ   rK   r   2  s    r   )r   rE   c                 C   s   |  dsd S d}tjdkr&dd l}nZzdd l}W nL ty~   d}zdd l}W n( tyx   dd l}|d Y Y d S 0 Y n0 t	| |}|
|W  d    S 1 s0    Y  d S )Nz.tomlrb)      r   rzJNo TOML parser installed, cannot read configuration from `pyproject.toml`.)rs   sysversion_infotomllibtomliImportErrortomlwarningswarnopenload)r   Z	read_modeZtoml_rA  rfrJ   rJ   rK   r   <  s"    



r   )NNFF)vr;  configparserr   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   Zmypy.pluginsr1   Zmypy.semanalr2   Zmypy.server.triggerr3   Z
mypy.typesr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Zmypy.typevarsr>   Z	mypy.utilr?   Zmypy.versionr@   Zmypy_versionZpydantic.utilsrA   rB   r?  r   r   rd   r   rp   rw   r   rG   rT   r   r   rX   rW   r[   rt   r{   r   r   r#  r$  r%  r(  r*  r+  r   r  r   r   r   r   r   r   rc   r   r   rJ   rJ   rJ   rK   <module>   s   ,| 4
W   %	    S

