o
    ØÝ2gó  ã                   @  sf   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
d„Z
G dd„ deee  ƒZdS )é    )Úannotations)ÚIterableÚSetN)ÚTypeVisitor©Úsplit_module_namesÚ	type_nameú
str | NoneÚreturnú	list[str]c                 C  s    | durt | ƒ}|dd… S g S )z8Returns the module names of a fully qualified type name.Né   r   )r   Úpossible_module_names© r   úH/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/indirection.pyÚextract_module_names
   s   r   c                   @  s   e Zd ZdZdPdd„ZdQd	d
„ZdRdd„ZdSdd„ZdTdd„ZdUdd„Z	dVdd„Z
dWdd„ZdXd d!„ZdYd#d$„ZdZd&d'„Zd[d)d*„Zd\d,d-„Zd]d/d0„Zd^d2d3„Zd_d5d6„Zd`d8d9„Zdad;d<„Zdbd>d?„ZdcdAdB„ZdddDdE„ZdedGdH„ZdfdJdK„ZdgdMdN„ZdOS )hÚTypeIndirectionVisitorz7Returns all module references within a particular type.r
   ÚNonec                 C  s   i | _ tƒ | _d S ©N)ÚcacheÚsetÚseen_aliases)Úselfr   r   r   Ú__init__   s   zTypeIndirectionVisitor.__init__ÚtypsúIterable[types.Type]úset[str]c                 C  s   | j  ¡  |  |¡S r   )r   ÚclearÚ_visit)r   r   r   r   r   Úfind_modules   s   

z#TypeIndirectionVisitor.find_modulesÚtyp_or_typsú!types.Type | Iterable[types.Type]c                 C  s†   t |tjƒr	|gn|}tƒ }|D ]0}t |tjƒr$|| jv rq| j |¡ || jv r/| j| }n| | ¡}t|ƒ| j|< | 	|¡ q|S r   )
Ú
isinstanceÚtypesÚTyper   ÚTypeAliasTyper   Úaddr   ÚacceptÚupdate)r   r   r   ÚoutputÚtypÚmodulesr   r   r   r      s   


zTypeIndirectionVisitor._visitÚtútypes.UnboundTypec                 C  ó   |   |j¡S r   )r   Úargs©r   r+   r   r   r   Úvisit_unbound_type0   ó   z)TypeIndirectionVisitor.visit_unbound_typeútypes.AnyTypec                 C  ó   t ƒ S r   ©r   r/   r   r   r   Ú	visit_any3   ó   z TypeIndirectionVisitor.visit_anyútypes.NoneTypec                 C  r3   r   r4   r/   r   r   r   Úvisit_none_type6   r6   z&TypeIndirectionVisitor.visit_none_typeútypes.UninhabitedTypec                 C  r3   r   r4   r/   r   r   r   Úvisit_uninhabited_type9   r6   z-TypeIndirectionVisitor.visit_uninhabited_typeútypes.ErasedTypec                 C  r3   r   r4   r/   r   r   r   Úvisit_erased_type<   r6   z(TypeIndirectionVisitor.visit_erased_typeútypes.DeletedTypec                 C  r3   r   r4   r/   r   r   r   Úvisit_deleted_type?   r6   z)TypeIndirectionVisitor.visit_deleted_typeútypes.TypeVarTypec                 C  s$   |   |j¡|   |j¡B |   |j¡B S r   )r   ÚvaluesÚupper_boundÚdefaultr/   r   r   r   Úvisit_type_varB   s   $z%TypeIndirectionVisitor.visit_type_varútypes.ParamSpecTypec                 C  ó   |   |j¡|   |j¡B S r   ©r   rA   rB   r/   r   r   r   Úvisit_param_specE   ó   z'TypeIndirectionVisitor.visit_param_specútypes.TypeVarTupleTypec                 C  rE   r   rF   r/   r   r   r   Úvisit_type_var_tupleH   rH   z+TypeIndirectionVisitor.visit_type_var_tupleútypes.UnpackTypec                 C  s   |j  | ¡S r   )Útyper&   r/   r   r   r   Úvisit_unpack_typeK   r1   z(TypeIndirectionVisitor.visit_unpack_typeútypes.Parametersc                 C  r-   r   )r   Ú	arg_typesr/   r   r   r   Úvisit_parametersN   r1   z'TypeIndirectionVisitor.visit_parametersútypes.Instancec                 C  sV   |   |j¡}|jr)|jjD ]
}| t|jƒ¡ q|jjd ur)| t|jjjjƒ¡ |S r   )r   r.   rL   Úmror'   r   Úmodule_nameÚmetaclass_type)r   r+   ÚoutÚsr   r   r   Úvisit_instanceQ   s   z%TypeIndirectionVisitor.visit_instanceútypes.CallableTypec                 C  s8   |   |j¡|   |j¡B }|jd ur| t|jjƒ¡ |S r   )r   rO   Úret_typeÚ
definitionr'   r   Úfullname)r   r+   rU   r   r   r   Úvisit_callable_type]   s   
z*TypeIndirectionVisitor.visit_callable_typeútypes.Overloadedc                 C  rE   r   )r   ÚitemsÚfallbackr/   r   r   r   Úvisit_overloadedc   rH   z'TypeIndirectionVisitor.visit_overloadedútypes.TupleTypec                 C  rE   r   )r   r^   Úpartial_fallbackr/   r   r   r   Úvisit_tuple_typef   rH   z'TypeIndirectionVisitor.visit_tuple_typeútypes.TypedDictTypec                 C  s   |   |j ¡ ¡|   |j¡B S r   )r   r^   r@   r_   r/   r   r   r   Úvisit_typeddict_typei   s   z+TypeIndirectionVisitor.visit_typeddict_typeútypes.LiteralTypec                 C  r-   r   )r   r_   r/   r   r   r   Úvisit_literal_typel   r1   z)TypeIndirectionVisitor.visit_literal_typeútypes.UnionTypec                 C  r-   r   )r   r^   r/   r   r   r   Úvisit_union_typeo   r1   z'TypeIndirectionVisitor.visit_union_typeútypes.PartialTypec                 C  r3   r   r4   r/   r   r   r   Úvisit_partial_typer   r6   z)TypeIndirectionVisitor.visit_partial_typeútypes.TypeTypec                 C  r-   r   )r   Úitemr/   r   r   r   Úvisit_type_typeu   r1   z&TypeIndirectionVisitor.visit_type_typeútypes.TypeAliasTypec                 C  s   |   t |¡¡S r   )r   r"   Úget_proper_typer/   r   r   r   Úvisit_type_alias_typex   s   z,TypeIndirectionVisitor.visit_type_alias_typeN)r
   r   )r   r   r
   r   )r   r    r
   r   )r+   r,   r
   r   )r+   r2   r
   r   )r+   r7   r
   r   )r+   r9   r
   r   )r+   r;   r
   r   )r+   r=   r
   r   )r+   r?   r
   r   )r+   rD   r
   r   )r+   rI   r
   r   )r+   rK   r
   r   )r+   rN   r
   r   )r+   rQ   r
   r   )r+   rX   r
   r   )r+   r]   r
   r   )r+   ra   r
   r   )r+   rd   r
   r   )r+   rf   r
   r   )r+   rh   r
   r   )r+   rj   r
   r   )r+   rl   r
   r   )r+   ro   r
   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r0   r5   r8   r:   r<   r>   rC   rG   rJ   rM   rP   rW   r\   r`   rc   re   rg   ri   rk   rn   rq   r   r   r   r   r      s4    






















r   )r   r	   r
   r   )Ú
__future__r   Útypingr   r   Ú
mypy.typesr"   r   Ú	mypy.utilr   r   Ústrr   r   r   r   r   Ú<module>   s    

