
    *e                       U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZ ddlmZ e	j        dk    rddlZnddlZddlmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&  G d de          Z'ee(e)f         Z*ee*         Z+ee(eee,e,f         eee,e,f                  f         f         Z-de.d<   ddgZ/de.d<   e G d de                      Z0ee(e0f         Z1 G d d          Z2 G d d          Z3 G d d          Z4dDd'Z5dEd)Z6dFd,Z7dGd.Z8dHd/Z9dId5Z: ej;        d6          dJd9            Z<	 dKdLd?Z=dMd@Z>dNdBZ?dOdCZ@dS )PzmLow-level infrastructure to find modules.

This builds on fscache.py; find_sources.py builds on top of this.
    )annotationsN)Enumunique)CompileError)      )DictFinalList
NamedTupleOptionalTupleUnion)	TypeAlias)pyinfo)FileSystemCache)MypyFile)Options)approved_stub_package_existsc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )SearchPathstuple[str, ...]python_path	mypy_pathpackage_pathtypeshed_pathN)__name__
__module____qualname____annotations__     1lib/python3.11/site-packages/mypy/modulefinder.pyr   r   #   sB             !!!!""""""r"   r   
_TypeAliasStdlibVersionsz.pyi.pyr
   PYTHON_EXTENSIONSc                  &    e Zd ZdZdZdZdZdd	Zd
S )ModuleNotFoundReasonr         r   daemonboolreturntuple[str, list[str]]c                
   d}| t           j        u rd}|g}nj| t           j        u rd}dg}nV| t           j        u rd}|g}nB| t           j        u r2d}dg}|s|                    d           |                    |           nJ ||fS )NzKSee https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-importszFCannot find implementation or library stub for module named "{module}"zOYou may be running mypy in a subpackage, mypy should be run on the package rootz`Skipping analyzing "{module}": module is installed, but missing library stubs or py.typed markerz*Library stubs not installed for "{module}"z*Hint: "python3 -m pip install {stub_dist}"zD(or run "mypy --install-types" to install all missing stub packages))r)   	NOT_FOUNDWRONG_WORKING_DIRECTORYFOUND_WITHOUT_TYPE_HINTSAPPROVED_STUBS_NOT_INSTALLEDappend)selfr,   doc_linkmsgnotess        r#   error_message_templatesz,ModuleNotFoundReason.error_message_templatesJ   s    `'111ZCJEE)AAAZC9EE )BBB%  JEE)FFF>CABE Z   LL""""LEzr"   N)r,   r-   r.   r/   )r   r   r   r1   r3   r2   r4   r:   r!   r"   r#   r)   r)   7   sG         I  !   $%      r"   r)   c                  *    e Zd ZdZ	 	 	 dddZddZdS )BuildSourcezA single source file.NFpath
str | Nonemoduletextbase_dirfollowedr-   r.   Nonec                P    || _         |pd| _        || _        || _        || _        d S )N__main__)r=   r?   r@   rA   rB   )r6   r=   r?   r@   rA   rB   s         r#   __init__zBuildSource.__init__p   s0     	*
	  r"   strc                j    d                     | j        | j        | j        d u| j        | j                  S )NzLBuildSource(path={!r}, module={!r}, has_text={}, base_dir={!r}, followed={}))formatr=   r?   r@   rA   rB   r6   s    r#   __repr__zBuildSource.__repr__~   s4    Zaa	4;	(=t}dm 	
r"   )NNF)r=   r>   r?   r>   r@   r>   rA   r>   rB   r-   r.   rC   )r.   rG   )r   r   r   __doc__rF   rK   r!   r"   r#   r<   r<   m   sR          #! ! ! ! !
 
 
 
 
 
r"   r<   c                  "    e Zd ZdZddZdd
ZdS )BuildSourceSetzIHelper to efficiently test a file's membership in a set of build sources.sourceslist[BuildSource]r.   rC   c                    d| _         i | _        t                      | _        |D ]S}|j        d| _         |j        r| j                            |j                   |j        r|j        pd| j        |j        <   Td S )NFT )source_text_presentsource_modulessetsource_pathsr@   r=   addr?   )r6   rO   sources      r#   rF   zBuildSourceSet.__init__   s    #( .0&)ee 	G 	GF{&+/({ 3!%%fk222} G5;[5FB#FM2	G 	Gr"   filer   r-   c                V    |j         r|j         | j        v p|j        | j        v p| j        S N)r=   rV   	_fullnamerT   rS   )r6   rY   s     r#   	is_sourcezBuildSourceSet.is_source   s8    Y949(99 (~!44('	
r"   N)rO   rP   r.   rC   )rY   r   r.   r-   )r   r   r   rL   rF   r]   r!   r"   r#   rN   rN      sF        SSG G G G
 
 
 
 
 
r"   rN   c                      e Zd ZdZ	 	 d1d2dZd3dZd4dZd5dZd6dZddd7d Z	d8d"Z
d9d&Zd:d)Zd;d*Zd<d,Zd=d.Zd>d0ZdS )?FindModuleCacheaK  Module finder with integrated cache.

    Module locations and some intermediate results are cached internally
    and can be cleared with the clear() method.

    All file system accesses are performed through a FileSystemCache,
    which is not ever cleared by this class. If necessary it must be
    cleared by client code.
    Nsearch_pathsr   fscacheFileSystemCache | NoneoptionsOptions | Nonestdlib_py_versionsStdlibVersions | None
source_setBuildSourceSet | Noner.   rC   c                    || _         || _        |pt                      | _        i | _        i | _        i | _        || _        d }|r|j        }|pt          |          | _
        d S r[   )r`   rg   r   ra   initial_componentsresultsns_ancestorsrc   custom_typeshed_dirload_stdlib_py_versionsre   )r6   r`   ra   rc   re   rg   rm   s          r#   rF   zFindModuleCache.__init__   s     )$3/"3"3 PR68,." 	>")"="4 #
8O9
 9
r"   c                    | j                                          | j                                         | j                                         d S r[   )rk   clearrj   rl   rJ   s    r#   rp   zFindModuleCache.clear   sF    %%'''!!!!!r"   idrG   ModuleSearchResult | Nonec                ,     j         sdS  j         j                            |d          }|r j                            |          rt
          j                            |          t          |	                    d                    D ]E}t           fdt          D                       s dS t
          j                                      F|S |                    d          }|dk    r                     |d|                   t          t                    sdS t
          j                                      \  }}t          fdt          D                       s/|t          v r& j                            |          st$          j        S dS )zFast path to find modules by looking through the input sources

        This is only used when --fast-module-lookup is passed on the command line.N.c              3     K   | ]?}j                             t          j                            d |z                       V  @dS rF   N)ra   isfileosr=   join).0xdr6   s     r#   	<genexpr>z=FindModuleCache.find_module_via_source_set.<locals>.<genexpr>   sX        MNDL''Q
Q(G(GHH     r"   c              3  H   K   | ]}                     d |z             V  dS rv   )endswith)rz   r{   parents     r#   r}   z=FindModuleCache.find_module_via_source_set.<locals>.<genexpr>   s3      RR1vzA~66RRRRRRr"   )rg   rT   getra   rw   rx   r=   dirnamerangecountanyr'   rfindfind_module_via_source_set
isinstancerG   splitextisdirr)   r1   )	r6   rq   p_idxbasenameextr|   r   s	   `      @@r#   r   z*FindModuleCache.find_module_via_source_set   s     	4O*..r488 	$$Q'' 	
 ""A288C==)) ' '     Rc        44GOOA&&Hhhsmm"99 44RX>>F~Z%<%<~tG,,V44MHcRRRR@QRRRRR 6(((1C1CH1M1M( ,55tr"   lib_pathr   PackageDirsc                   |                     d          }t          j                            |dd                   }g }|                     ||d                   D ]p}t          j                            t          j                            ||                    }| j                            |          r|	                    |df           q|S )zFind which elements of a lib_path have the directory a module needs to exist.

        This is run for the python_path, mypy_path, and typeshed_path search paths.
        rt   Nr~   r   T)
splitrx   sepry   get_toplevel_possibilitiesr=   normpathra   r   r5   )r6   rq   r   
components	dir_chaindirspathitemdirs           r#   find_lib_path_dirsz"FindModuleCache.find_lib_path_dirs   s    
 XXc]]
FKK
3B300	77*Q-PP 	) 	)H'""27<<)#D#DEEC|!!#&& )S$K(((r"   	list[str]c                   || j         v r!| j         |                             |g           S i }|D ]}	 | j                            |          }n# t          $ r g }Y nw xY w|D ]P}t
          j                            |          d         }|                    |g           	                    |           Q|| j         |<   |                    |g           S )a  Find which elements of lib_path could contain a particular top-level module.

        In practice, almost all modules can be routed to the correct entry in
        lib_path by looking at just the first component of the module name.

        We take advantage of this by enumerating the contents of all of the
        directories on the lib_path and building a map of which entries in
        the lib_path could contain each potential top-level module that appears.
        r   )
rj   r   ra   listdirOSErrorrx   r=   r   
setdefaultr5   )r6   r   rq   r   r   contentsnames          r#   r   z*FindModuleCache.get_toplevel_possibilities  s     t...*8488R@@@ ,.
 
	< 
	<C<//44   
 ! < <w''--a0%%dB//66s;;;;< -7)~~b"%%%s   AAAF)	fast_pathr   r-   ModuleSearchResultc                  || j         vr|                    d          d         }d}|| j        v r|                     |          }n|| j        v r|                     |          }|                     ||          | j         |<   |sU| j        | j        j        sB| j         |         t          j        u r)| 	                    |          rt          j
        | j         |<   | j         |         S )zReturn the path of the module source file or why it wasn't found.

        If fast_path is True, prioritize performance over generating detailed
        error descriptions.
        rt   r   T)rk   	partitionre   _typeshed_has_version_find_modulerc   fast_module_lookupr)   r1   _can_find_module_in_parent_dirr2   )r6   rq   r   	top_leveluse_typesheds        r#   find_modulezFindModuleCache.find_module'  s     T\!!S))!,ILT,,,#99"==d555#99)DD#00\BBDLP#'<#;@_#;L$(<(FFF77;; G $8#OR |Br"   r?   c                |    | j         sdS t          | j                   }| j        |         \  }}||k    o	|d u p||k    S )NT)rc   typeshed_py_versionre   )r6   r?   versionmin_versionmax_versions        r#   r   z%FindModuleCache._typeshed_has_version=  sQ    | 	4%dl33#'#:6#B [+%Y;$+>+X'[BXYr"   r   pkg_dir$OnePackageDir | ModuleNotFoundReasonc                   d}|}t          |          D ]\  }}t          j                            ||          }| j                            t          j                            |d                    r't          j        j        |g|d d         R  |dk    fc S |s9| j                            |          s| j                            |dz             rd}| j                            |          s nt          t          |          dd          D ]:}t          d                    |d |                             rt          j        c S ;|rt          j        S t          j        S )NFpy.typedr~   r   r&   Trt   )	enumeraterx   r=   ry   ra   rw   r   r   lenr   r)   r4   r3   r1   )r6   r   r   plausible_matchdir_pathindex	componentis           r#   _find_module_non_stub_helperz,FindModuleCache._find_module_non_stub_helperD  su      )* 5 5 
	 
	E9w||Hi88H|""27<<*#E#EFF 'w|G>j"o>>>
JJJJ$ '""8,,'040C0CHuDT0U0U' #'<%%h// s:2.. 	I 	IA+CHHZ^,D,DEE I+HHHHI 	2'@@'11r"   matchtuple[str, bool]c                $   |\  }}t          dt          |                    D ]l}d                    |d |                    }|| j        vr$| j                            |          r
|| j        |<   t          j                            |          }md S )Nr*   rt   )	r   r   ry   rl   ra   r   rx   r=   r   )r6   r   r   r=   verifyr   pkg_ids          r#   _update_ns_ancestorsz$FindModuleCache._update_ns_ancestors\  s    fq#j//** 	) 	)AXXj1"o..FT...4<3E3Ed3K3K.,0!&)7??4((DD		) 	)r"   c                    t          j                    }t          t          dddd          | j        | j        | j                  }t          d t          j        |          D                       rt           j	        
                    |          }t          |fddd          |_        t          |                    |d          t                    sdS t          d t          j        |          D                       dS )zsTest if a module can be found by checking the parent directories
        of the current working directory.
        r!   )re   c              3  4   K   | ]}t          |          V  d S r[   )is_init_file)rz   rY   s     r#   r}   zAFindModuleCache._can_find_module_in_parent_dir.<locals>.<genexpr>o  s*      II,t$$IIIIIIr"   FT)rx   getcwdr_   r   ra   rc   re   r   r   r=   r   r`   r   r   r)   )r6   rq   working_dirparent_searchs       r#   r   z.FindModuleCache._can_find_module_in_parent_dird  s     ikk'BB''LL#6	
 
 
 IIK1H1HIIIII 	'//+66K)4k^RR)P)PM&m88UCCEYZZ t	 IIK1H1HIIIII 	
 ur"   r   c                6  " | j         "| j        !| j        j        r|                               nd }|r|S                     d          }t
          j                            |d d                   }g }g }d}d}	| j        j	        D ]}
|d         dz   }t
          j
                            |
|          }"                    |          rH|                     |          r2t
          j
                            |d          }|g|dd          z   }t          j
        j        |
g|d d         R  }"                    |          rЉ"                    |          r"                    |                                                                          dk    rOt
          j
                            |
|          }|                    |d	f           |                    |df           n/|                    |d	f           n|                    |d	f           |                     ||
          }t'          |t(                    r$|t(          j        u rd	}|t(          j        u rd	}	|                    |           |                     ||           | j        r6| j        j        r*|                                 |                                 d}| j        j        | j        j        z   }|                     |          }|r#||                     | j        j                  z  }|||z   z  }t
          j        |d         z   }t
          j        d
z   }g }|D ]\  }}||z   }d}|}t=          t?          |          dz
            D ]!}t
          j
                             |          }"tB          D ]}||z   |z   }|dz   |z   |z   }""                    ||          r4d	}|r*tG          "||          s|                    ||f           Y|c c S ""                    ||          r2|r*tG          "||          s|                    ||f           |c c S | j        rQ| j        j$        rE|sC"%                    ||          r-""                    ||          s|                    ||f           tB          D ]O}||z   }""                    ||          r2|r*tG          "||          s|                    ||f           I|c c S P| j        rM| j        j$        rA|r?"fd|D             }|&                    tO          |                    } ||          d         S | j(        )                              }!|!|!S |	rt(          j        S |rt(          j        S t(          j*        S )Nrt   r~   Fr   z-stubsr   r*   partialTrF   c                :    g | ]\  }}t          ||          S r!   )highest_init_level)rz   r=   
dir_prefixra   rq   s      r#   
<listcomp>z0FindModuleCache._find_module.<locals>.<listcomp>  s;       $D* #7BjAA  r"   )+ra   rc   r   r   r   rx   r   ry   r`   r   r=   r   _is_compatible_stub_packagerw   readdecodestripr5   r   r   r)   r3   r4   r   use_builtins_fixturesrp   r   r   r   r   r   r   r   r'   isfile_caseverify_modulenamespace_packagesexists_caser   maxrl   r   r1   )#r6   rq   r   r   r   r   third_party_inline_dirsthird_party_stubs_dirs-found_possible_third_party_missing_type_hintsneed_installed_stubsr   	stub_namestub_dirstub_typed_filestub_componentsr=   runtime_pathnon_stub_matchpython_mypy_pathcandidate_base_dirsseplastsepinitnear_missesrA   r   	base_pathhas_initr   r   	extension
path_stubslevelsr   ancestorra   s#    `                                @r#   r   zFindModuleCache._find_modulev  s   ,> (T\-L( ++B/// 	

  	H XXc]]
FKK
3B300	 02.08=5$(5 !	F !	FG"10Iw||GY77H}}X&& D4+K+KH+U+U D"$',,x"D"D#,+
122">w|GCocrc.BCCC==&& D~~o66 D
 #<<88??AAGGIIYVV+-7<<+K+KL3::L$;OPPP 3994-HHHH 3994,GGGG.55tTlCCC!>>z7SSN.*>?? F!%9%RRRDHAA#';'XXX+/('..~>>>))*nEEEE< 	BDL> 	B#))+++"((***<A9,69J9VV"55b:JKK 	`  4#:#:2t?P?^#_#__58OOO &:b>)&:% 3 &	  &	 Hf 7*IH!J3z??Q.// 9 9W__Z88

. & &	 7*Y6&1G;iG
&&tZ88 
&#H !mGRz&R&R !#**D*+=>>> KKKKK((Z@@ & !mGRZ&X&X !#**J
+CDDD %%%%%%	& | @ ? @ @++IzBB@ $//	:FF@
  &&	:'>??? /    	 9,&&tZ88   !mGRz&R&R !#**D*+=>>> KKKKK	  : < 	)DL; 	) 	)    (3  F LLV--Eu%a(( $((,,O 	2'DD: 	2'@@'11r"   r   c                B   t           j                            |d          }t           j                            |          sdS t	          |d          5 }t          j        |          }ddd           n# 1 swxY w Y   t          |                    dd                    S )zDoes a stub package support the target Python version?

        Stub packages may contain a metadata file which specifies
        whether the stubs are compatible with Python 2 and 3.
        zMETADATA.tomlTrbNpython3)	rx   r=   ry   rw   opentomllibloadr-   r   )r6   r   metadata_fnamfmetadatas        r#   r   z+FindModuleCache._is_compatible_stub_package5  s     X??w~~m,, 	4-&& 	'!|AH	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'HLLD11222s   A33A7:A7rP   c                >   |                      |          }t          |t                    rg S t          ||d           g}d }t	          |          r t
          j                            |          }n| j        	                    |          r|}||S t                      }t          | j                            |                    }|D ]}|dv s|                    d          rt
          j                            ||          }| j        r0t!          || j        j        | j        | j        j        dk              rt| j        	                    |          r| j        r| j        j        sp| j                            t
          j                            |d                    s8| j                            t
          j                            |d                    rC|                    |           |                    |                     |dz   |z                        Vt
          j                            |          \  }	}
|	dk    r|	|vrPd|	vrL|
t2          v rC|                    |	           |                    |                     |dz   |	z                        |S )N)__pycache__zsite-packagesnode_modulesrt   r+   __init__.py__init__.pyirF   )r   r   r)   r<   r   rx   r=   r   ra   r   rU   sortedr   
startswithry   rc   matches_excludeexclude	verbosityr   rw   rW   extendfind_modules_recursiver   r'   )r6   r?   module_pathrO   r   seennamesr   subpathstemsuffixs              r#   r  z&FindModuleCache.find_modules_recursiveB  s   &&v..k#788 	I{FD99:$$ 	'7??;77LL\,, 	'&LN t|++L99:: 	U 	UDGGG4??[^K_K_Ggll<66G| -t|T\=SWX=X! !  |!!'** UL UT\%D UL''Wm(L(LMMU|**27<<+P+PQQU HHTNNNNN4#>#>v|d?R#S#STTT!w//55f:%%t##4FFW<W<W HHTNNNNN4#>#>v|d?R#S#STTTr"   )NN)r`   r   ra   rb   rc   rd   re   rf   rg   rh   r.   rC   )r.   rC   )rq   rG   r.   rr   )rq   rG   r   r   r.   r   )r   r   rq   rG   r.   r   )rq   rG   r   r-   r.   r   )r?   rG   r.   r-   )r   r   r   rG   r.   r   )r   r   r   r   r.   rC   )rq   rG   r.   r-   )rq   rG   r   r-   r.   r   )r   rG   r.   r-   )r?   rG   r.   rP   )r   r   r   rL   rF   rp   r   r   r   r   r   r   r   r   r   r   r  r!   r"   r#   r_   r_      sH         59,0
 
 
 
 
2" " " "
/ / / /b    & & & &> 9>            ,Z Z Z Z2 2 2 20) ) ) )   $}2 }2 }2 }2~3 3 3 31 1 1 1 1 1r"   r_   r
  rG   excludesr   ra   r   verboser-   r.   c                >   |sdS t           j                            |                               t           j        d          }|                    |           r|dz  }|D ]>}t          j        ||          r'|r"t          d| d| dt          j
                    dS ?dS )NF/zTRACE: Excluding z (matches pattern )rY   T)rx   r=   relpathreplacer   r   researchprintsysstderr)r
  r  ra   r  subpath_strr  s         r#   r  r  v  s      u'//'**22263??K}}W s  9Wk** 	 QQQwQQQX[Xb    44	 5r"   r=   c                D    t           j                            |           dv S )N)r   r   )rx   r=   r   )r=   s    r#   r   r     s    7D!!%DDDr"   rq   prefixc                :    t                    rt          j                                      t	          |                    d                    D ]F}t          j                                      t           fdt          D                       s dS GdS )z;Check that all packages containing id have a __init__ file.rt   c              3     K   | ];}                     t          j                            d |                     V  <dS rv   r   rx   r=   ry   rz   r   ra   r=   r  s     r#   r}   z verify_module.<locals>.<genexpr>  s`       
 
 T3Ii3I3I J JFSS
 
 
 
 
 
r"   FTr   rx   r=   r   r   r   r   r'   )ra   rq   r=   r  r   s   ` `` r#   r   r     s    D %wt$$288C==!!  wt$$ 
 
 
 
 
 
.
 
 
 
 
 	 55		
 4r"   intc                B    t                    rt          j                                      d}t	          |                    d                    D ]H}t          j                                      t           fdt          D                       r|dz   }I|S )z:Compute the highest level where an __init__ file is found.r   rt   c              3     K   | ];}                     t          j                            d |                     V  <dS rv   r  r   s     r#   r}   z%highest_init_level.<locals>.<genexpr>  s`       
 
 T3Ii3I3I J JFSS
 
 
 
 
 
r"   r*   r!  )ra   rq   r=   r  levelr   s   ` ``  r#   r   r     s    D %wt$$E288C==!!  wt$$ 
 
 
 
 
 
.
 
 
 
 
 	 EELr"   c                 p    t          j        d          } | sg S |                     t           j                  S )NMYPYPATH)rx   getenvr   pathsep)path_envs    r#   r   r     s2    y$$H 	>>"*%%%r"   data_dir	pyversiontuple[int, int]rm   r>   c                   g }|rt           j                            |d          }t           j                            |dd          }t           j                            |d          }t           j                            |          rt           j                            |          s6t          d                    |                     t          j        d           nt           j                            | d          }t           j                            |          r|} t           j                            | dd          }t           j                            | ddd          }|	                    |           |	                    |           t          j
        d	k    r|	                    d
           |sMt          d                    t          j        |           t          j                   t          j        d           |S )z-Return default standard library search paths.stdlibstubszmypy-extensionsVERSIONSzDerror: --custom-typeshed-dir does not point to a valid typeshed ({})r+   z
stubs-autotypeshedwin32z/usr/local/lib/mypyz~Could not resolve typeshed subdirectories. Your mypy install is broken.
Python executable is located at {}.
Mypy located at {}r  r*   )rx   r=   ry   r   rw   r  rI   r  exitr5   platform
executabler  )r+  r,  rm   r=   typeshed_dirmypy_extensions_dirversions_fileautos           r#   default_lib_pathr;    s    D ]w||$7BB gll+>IZ[[\:>>w}}\** 	"'..2O2O 	V]]'   
 HQKKKw||Hl337== 	Hw||Hj(CC gll8ZJ[\\KK 	KK#$$$ |w)*** FFLfG G 	
 	
 	
 	
 	Kr"   )maxsizepython_executabletuple[list[str], list[str]]c                J   | g g fS | t           j        k    rt          j                    \  }}ni t	          t
          j                  ddi}	 t          j        t          j
        | t          j        dg|t          j                                                            \  }}n}# t          j        $ r.}t          |j                   t          |j                    d}~wt$          $ r5}t          j        |j                  }t+          d|  d| g          |d}~ww xY w||fS )zFind package directories for given python.

    This runs a subprocess call, which generates a list of the directories in sys.path.
    To avoid repeatedly calling a subprocess (which can be slow!) we
    lru_cache the results.
    NPYTHONSAFEPATH1getsearchdirs)envr  z!mypy: Invalid python executable 'z': )r  r6  r   rB  dictrx   environastliteral_eval
subprocesscheck_output__file__PIPEr   CalledProcessErrorr  r  stdoutr   strerrorerrnor   )r=  sys_pathsite_packagesrC  errreasons         r#   get_search_dirsrT    sO     Bx	cn	,	,"("6"8"8-- :bj!!9#3S99	&)&6'&I%?   &((' '#Hmm , 	 	 	#*#* 	 	 	[++FS5FSS6SST 	
 ]""s%   AB$ $D3)CD)0DDrO   rP   rc   r   alt_lib_pathc                   t          j        t          ||j        |j                            }|j        rt          j        dd          }|sAt          j        	                    t          j        	                    t                              }|                    t          j                            |ddd                     g }|sc| D ])}|j        r |j        }||vr|                    |           *|j        rd}nt          j                    }||vr|                    d|           t%                      }	|	                    |j                   |r|	                    d|           t)          |j                  \  }
}|D ]|vsJ |	v sGt-          fd	|	D                       s,t          j        j        rht-          fd
|	D                       rMt1           dt2          j                   t1          dt2          j                   t3          j        d           t9          t;          t=          |                    t;          |	          t;          |
|z             t;          |                    S )a/  Compute the search paths as specified in PEP 561.

    There are the following 4 members created:
    - User code (from `sources`)
    - MYPYPATH (set either via config or environment variable)
    - installed package directories (which will later be split into stub-only and inline)
    - typeshed
    )rm   MYPY_TEST_PREFIXNz	test-dataunitzlib-stubrt   r   c              3  f   K   | ]+}|                     t          j        j        z             V  ,d S r[   )r  rx   r=   r   rz   r   sites     r#   r}   z'compute_search_paths.<locals>.<genexpr>F  s8      FF1<<rw{ 233FFFFFFr"   c              3  f   K   | ]+}|                     t          j        j        z             V  ,d S r[   )r  rx   r=   altseprZ  s     r#   r}   z'compute_search_paths.<locals>.<genexpr>G  s8      &]&]qq||D27>4I'J'J&]&]&]&]&]&]r"   z& is in the MYPYPATH. Please remove it.r  zbSee https://mypy.readthedocs.io/en/stable/running_mypy.html#how-mypy-handles-imports for more infor*   )r   r   r   r   )collectionsdequer;  python_versionrm   r   rx   r(  r=   r   rJ  
appendleftry   rA   r5   bazelr   insertr   r  rT  r=  r   r]  r  r  r  r4  r   tuplereversed)rO   rc   r+  rU  r   root_dirr   rX   r   mypypathrP  rQ  r[  s               @r#   compute_search_pathsrh    s     g,'B]	
 	
 	
 H $ U
 9/66 	Bwrwx'@'@AAHBGLL;
SSTTT  K ' 	, 	,F ,ok))&&s+++ = 	CC)++Chq#&&& {{H OOG%&&&  )<(((-g.GHHHm  8####HFFFFXFFFFF  #&&]&]&]&]T\&]&]&]#]#]  TAAA
SSSS:Z   
 HQKKK(;//00//8m344Hoo	   r"   c                P   | pAt           j                            t           j                            t                    d          }t           j                            |d          }i }t           j                            |d          }t           j                            |          sJ | |t          f            t          |          5 }|D ]}|                    d          d                                         }|dk    r6|                    d          \  }}|                    d          }	t          |	d                   }
t          |	          d	k    r/|	d
                                         rt          |	d
                   nd}|
|f||<   	 ddd           n# 1 swxY w Y   |S )zReturn dict with minimum and maximum Python versions of stdlib modules.

    The contents look like
    {..., 'secrets': ((3, 6), None), 'symbol': ((2, 7), (3, 9)), ...}

    None means there is no maximum version.
    r2  r/  r1  #r   rR   :-r+   r*   N)rx   r=   ry   r   rJ  rw   r   r   r   parse_versionr   )rm   r7  
stdlib_dirresultversions_pathr   liner?   version_rangeversionsr   r   s               r#   rn   rn   Y  s    ']"',,rwx7P7PR\*]*]LlH55JFGLLZ88M7>>-((XX+>x*XXXX	m		 6 
	6 
	6D::c??1%++--Drzz$(JJsOO!FM$**3//H'44K.1(mmq.@.@Xa[EVEVEXEX.@hqk***^b  )+5F6NN
	66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 Ms   CFF"Fr   c                    |                                                      d          \  }}t          |          t          |          fS )Nrt   )r   r   r"  )r   majorminors      r#   rm  rm  v  s8    ==??((--LE5u::s5zz!!r"   c                ,    t          | j        d          S )zIReturn Python version used for checking whether module supports typeshed.)r      )r   r`  )rc   s    r#   r   r   {  s     w%v...r"   )
r
  rG   r  r   ra   r   r  r-   r.   r-   )r=   rG   r.   r-   )
ra   r   rq   rG   r=   rG   r  rG   r.   r-   )
ra   r   rq   rG   r=   rG   r  rG   r.   r"  )r.   r   )r+  rG   r,  r-  rm   r>   r.   r   )r=  r>   r.   r>  r[   )
rO   rP   rc   r   r+  rG   rU  r>   r.   r   )rm   r>   r.   r%   )r   rG   r.   r-  )rc   r   r.   r-  )ArL   
__future__r   rF  r^  	functoolsrx   r  rH  r  enumr   r   mypy.errorsr   version_infor   tomlitypingr	   r
   r   r   r   r   r   typing_extensionsr   r$   mypyr   mypy.fscacher   
mypy.nodesr   mypy.optionsr   mypy.stubinfor   r   rG   r-   OnePackageDirr   r"  r%   r    r'   r)   r   r<   rN   r_   r  r   r   r   r   r;  	lru_cacherT  rh  rn   rm  r   r!   r"   r#   <module>r     s    
 # " " " " " 



         				 				     



         $ $ $ $ $ $wNNNN H H H H H H H H H H H H H H H H H H 5 5 5 5 5 5       ( ( ( ( ( (                   6 6 6 6 6 6# # # # #* # # # c4i =! "#uU38_huSRUX>W-W'X"XY Y Y Y Y"E?  * * * * - - - - -4 - - -d 3 445 
 
 
 
 
 
 
 
2
 
 
 
 
 
 
 
0U U U U U U U Up   $E E E E      & & & &) ) ) )X T""""# "# "# #""#L ]aT T T T Tn   :" " " "
/ / / / / /r"   