
    %^g                    n    d dl mZ d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d	dZ
 G d deee            Zy)
    )annotations)IterableSetN)TypeVisitorsplit_module_namesc                *    | t        |       }|dd S g S )z8Returns the module names of a fully qualified type name.N   r   )	type_namepossible_module_namess     0lib/python3.12/site-packages/mypy/indirection.pyextract_module_namesr   
   s%     29 =$QR((	    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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d-dZd.dZd/dZd0dZd1dZd2dZy)3TypeIndirectionVisitorz7Returns all module references within a particular type.c                0    i | _         t               | _        y N)cachesetseen_aliases)selfs    r   __init__zTypeIndirectionVisitor.__init__   s    13
69er   c                X    | j                   j                          | j                  |      S r   )r   clear_visit)r   typss     r   find_modulesz#TypeIndirectionVisitor.find_modules   s#    !{{4  r   c                   t        |t        j                        r|gn|}t               }|D ]  }t        |t        j                        r*|| j
                  v r,| j
                  j                  |       || j                  v r| j                  |   }n)|j                  |       }t        |      | j                  |<   |j                  |        |S r   )

isinstancetypesTyper   TypeAliasTyper   addr   acceptupdate)r   typ_or_typsr   outputtypmoduless         r   r   zTypeIndirectionVisitor._visit   s     *;

 C}5C#u223$+++!!%%c*djj **S/**T*"%g,

3MM'"  r   c                8    | j                  |j                        S r   )r   argsr   ts     r   visit_unbound_typez)TypeIndirectionVisitor.visit_unbound_type0       {{166""r   c                    t               S r   r   r,   s     r   	visit_anyz TypeIndirectionVisitor.visit_any3   	    ur   c                    t               S r   r1   r,   s     r   visit_none_typez&TypeIndirectionVisitor.visit_none_type6   r3   r   c                    t               S r   r1   r,   s     r   visit_uninhabited_typez-TypeIndirectionVisitor.visit_uninhabited_type9   r3   r   c                    t               S r   r1   r,   s     r   visit_erased_typez(TypeIndirectionVisitor.visit_erased_type<   r3   r   c                    t               S r   r1   r,   s     r   visit_deleted_typez)TypeIndirectionVisitor.visit_deleted_type?   r3   r   c                    | j                  |j                        | j                  |j                        z  | j                  |j                        z  S r   )r   valuesupper_bounddefaultr,   s     r   visit_type_varz%TypeIndirectionVisitor.visit_type_varB   s<    {{188$t{{1=='AADKKPQPYPYDZZZr   c                p    | j                  |j                        | j                  |j                        z  S r   r   r>   r?   r,   s     r   visit_param_specz'TypeIndirectionVisitor.visit_param_specE   '    {{1==)DKK		,BBBr   c                p    | j                  |j                        | j                  |j                        z  S r   rB   r,   s     r   visit_type_var_tuplez+TypeIndirectionVisitor.visit_type_var_tupleH   rD   r   c                8    |j                   j                  |       S r   )typer$   r,   s     r   visit_unpack_typez(TypeIndirectionVisitor.visit_unpack_typeK   s    vv}}T""r   c                8    | j                  |j                        S r   )r   	arg_typesr,   s     r   visit_parametersz'TypeIndirectionVisitor.visit_parametersN   s    {{1;;''r   c                   | j                  |j                        }|j                  r|j                  j                  D ]&  }|j	                  t        |j                               ( |j                  j                  B|j	                  t        |j                  j                  j                  j                               |S r   )r   r+   rH   mror%   r   module_namemetaclass_type)r   r-   outss       r   visit_instancez%TypeIndirectionVisitor.visit_instanceQ   s    kk!&&!66 VVZZ

-amm<=  vv$$0

-aff.C.C.H.H.T.TUV
r   c                    | j                  |j                        | j                  |j                        z  }|j                  .|j	                  t        |j                  j                               |S r   )r   rK   ret_type
definitionr%   r   fullname)r   r-   rQ   s      r   visit_callable_typez*TypeIndirectionVisitor.visit_callable_type]   sQ    kk!++&QZZ)@@<<#JJ+ALL,A,ABC
r   c                p    | j                  |j                        | j                  |j                        z  S r   )r   itemsfallbackr,   s     r   visit_overloadedz'TypeIndirectionVisitor.visit_overloadedc   s'    {{177#dkk!**&===r   c                p    | j                  |j                        | j                  |j                        z  S r   )r   rZ   partial_fallbackr,   s     r   visit_tuple_typez'TypeIndirectionVisitor.visit_tuple_typef   s)    {{177#dkk!2D2D&EEEr   c                    | j                  |j                  j                               | j                  |j                        z  S r   )r   rZ   r=   r[   r,   s     r   visit_typeddict_typez+TypeIndirectionVisitor.visit_typeddict_typei   s.    {{177>>+,t{{1::/FFFr   c                8    | j                  |j                        S r   )r   r[   r,   s     r   visit_literal_typez)TypeIndirectionVisitor.visit_literal_typel   s    {{1::&&r   c                8    | j                  |j                        S r   )r   rZ   r,   s     r   visit_union_typez'TypeIndirectionVisitor.visit_union_typeo   s    {{177##r   c                    t               S r   r1   r,   s     r   visit_partial_typez)TypeIndirectionVisitor.visit_partial_typer   r3   r   c                8    | j                  |j                        S r   )r   itemr,   s     r   visit_type_typez&TypeIndirectionVisitor.visit_type_typeu   r/   r   c                J    | j                  t        j                  |            S r   )r   r    get_proper_typer,   s     r   visit_type_alias_typez,TypeIndirectionVisitor.visit_type_alias_typex   s    {{500344r   N)returnNone)r   zIterable[types.Type]rn   set[str])r&   z!types.Type | Iterable[types.Type]rn   rp   )r-   ztypes.UnboundTypern   rp   )r-   ztypes.AnyTypern   rp   )r-   ztypes.NoneTypern   rp   )r-   ztypes.UninhabitedTypern   rp   )r-   ztypes.ErasedTypern   rp   )r-   ztypes.DeletedTypern   rp   )r-   ztypes.TypeVarTypern   rp   )r-   ztypes.ParamSpecTypern   rp   )r-   ztypes.TypeVarTupleTypern   rp   )r-   ztypes.UnpackTypern   rp   )r-   ztypes.Parametersrn   rp   )r-   ztypes.Instancern   rp   )r-   ztypes.CallableTypern   rp   )r-   ztypes.Overloadedrn   rp   )r-   ztypes.TupleTypern   rp   )r-   ztypes.TypedDictTypern   rp   )r-   ztypes.LiteralTypern   rp   )r-   ztypes.UnionTypern   rp   )r-   ztypes.PartialTypern   rp   )r-   ztypes.TypeTypern   rp   )r-   ztypes.TypeAliasTypern   rp   )__name__
__module____qualname____doc__r   r   r   r.   r2   r5   r7   r9   r;   r@   rC   rF   rI   rL   rS   rX   r\   r_   ra   rc   re   rg   rj   rm    r   r   r   r      s    A<!"#[CC#(
>FG'$#5r   r   )r   z
str | Nonern   z	list[str])
__future__r   typingr   r   
mypy.typesr    r   	mypy.utilr   r   strr   ru   r   r   <module>r{      s0    "    " (e5[S2 e5r   