+
    iG                       R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	H
t
 ^ RIHtHt ^ RIHt ^ RIHtHt ^ RIHtHt ^ RIHtHt ^ R	IHtHt ^ R
IHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't' ^ RI(H)t) ^ RI*H+t+H,t, Rt-R R lt. ! R R4      t/R# )zastroid manager: avoid multiple astroid build of a same module when
possible by providing a class responsible to get astroid representation
from various source and using a cache of built modules)
)annotationsN)CallableIteratorSequence)AnyClassVar)nodes)AstroidBuilderbuild_namespace_package_module)InferenceContext_invalidate_cache)AstroidBuildingErrorAstroidImportError)specutil)NoSourceFile_cache_normalize_path_	_has_initcached_os_path_isfilefile_info_from_modpathget_source_file2is_module_name_part_of_extension_package_whitelistis_python_sourceis_stdlib_moduleload_module_from_namemodpath_from_file)TransformVisitor)AstroidManagerBrainInferenceResultc                    V ^8  d   QhRRRR/# )   objr   returnstr )formats   "1/usr/lib/python3/dist-packages/astroid/manager.py__annotate__r'   +   s      3 3     c                >     \        V 4      #   \         d     R # i ; i)z???)repr	Exception)r!   s   &r&   	safe_reprr,   +   s#    Cy s   
 c                     ] tR t^2t$ RtRtR/ R/ R. RRRRR	^dR
]! 4       R]! 4       R]! 4       RR/
tR]	R&   R R lt
]R R l4       t]P                  R R l4       t]R R l4       t]P                  R R l4       t]R R l4       t]P                  R R l4       t]R 4       t]R 4       t]R  R! l4       t]R" R# l4       t]P                  R$ R% l4       tR& R' ltRHR) R* lltRIR+ R, lltR- R. ltR/ R0 ltR1 R2 ltRJR3 R4 lltR5 R6 ltR7 R8 ltRKR9 R: lltRKR; R< lltRKR= R> lltR? R@ lt RA RB lt!RC RD lt"RE RF lt#RGt$R(# )LAstroidManagerzWResponsible to build astroid from files or modules.

Use the Borg (singleton) pattern.
zastroid loaderastroid_cache_mod_file_cache_failed_import_hooksalways_load_extensionsFoptimize_astmax_inferable_valuesextension_package_whitelistmodule_denylist
_transformprefer_stubszClassVar[AstroidManagerBrain]brainc                   V ^8  d   QhRR/# r    r"   Noner$   )r%   s   "r&   r'   AstroidManager.__annotate__F   s     
A 
A$ 
Ar(   c                	   \         P                  R ,          V n        \         P                  R,          V n        \         P                  R,          V n        \         P                  R,          V n        \         P                  R,          V n        \         P                  R,          V n        \         P                  R,          V n        R# )r/   r0   r1   r5   r6   r7   r8   N)	r.   r9   r/   r0   r1   r5   r6   r7   r8   selfs   &r&   __init__AstroidManager.__init__F   s    +11/B-334EF$2$8$89O$P!+9+?+?),
(  .334EF(..|<*00@r(   c                   V ^8  d   QhRR/# r    r"   boolr$   )r%   s   "r&   r'   r=   S   s     > > >r(   c                	0    \         P                  R ,          # )r2   r.   r9   r?   s   &r&   r2   %AstroidManager.always_load_extensionsR   s    ##$<==r(   c                    V ^8  d   QhRRRR/# r    valuerE   r"   r<   r$   )r%   s   "r&   r'   r=   W   s     ? ?D ?T ?r(   c                	,    V\         P                  R &   R# )r2   NrG   r@   rK   s   &&r&   r2   rH   V   s    9>56r(   c                   V ^8  d   QhRR/# rD   r$   )r%   s   "r&   r'   r=   [        4 4d 4r(   c                	0    \         P                  R ,          # )r3   rG   r?   s   &r&   r3   AstroidManager.optimize_astZ       ##N33r(   c                    V ^8  d   QhRRRR/# rJ   r$   )r%   s   "r&   r'   r=   _        5 5$ 54 5r(   c                	,    V\         P                  R &   R# )r3   NrG   rM   s   &&r&   r3   rQ   ^       /4^,r(   c                   V ^8  d   QhRR/# )r    r"   intr$   )r%   s   "r&   r'   r=   c   s     < <c <r(   c                	0    \         P                  R ,          # )r4   rG   r?   s   &r&   r4   #AstroidManager.max_inferable_valuesb   s    ##$:;;r(   c                    V ^8  d   QhRRRR/# )r    rK   rX   r"   r<   r$   )r%   s   "r&   r'   r=   g   s     = =# =$ =r(   c                	,    V\         P                  R &   R# )r4   NrG   rM   s   &&r&   r4   rZ   f   s    7<34r(   c                	.    V P                   P                  # N)r7   register_transformr?   s   &r&   r_   !AstroidManager.register_transformj   s     111r(   c                	.    V P                   P                  # r^   )r7   unregister_transformr?   s   &r&   rb   #AstroidManager.unregister_transformo   s    333r(   c                   V ^8  d   QhRR/# )r    r"   nodes.Moduler$   )r%   s   "r&   r'   r=   t   s     . . .r(   c                	(    V P                   R ,          # )builtins)r/   r?   s   &r&   builtins_moduleAstroidManager.builtins_modules   s    !!*--r(   c                   V ^8  d   QhRR/# rD   r$   )r%   s   "r&   r'   r=   x   rO   r(   c                	0    \         P                  R ,          # )r8   rG   r?   s   &r&   r8   AstroidManager.prefer_stubsw   rR   r(   c                    V ^8  d   QhRRRR/# rJ   r$   )r%   s   "r&   r'   r=   |   rT   r(   c                	,    V\         P                  R &   R# )r8   NrG   rM   s   &&r&   r8   rl   {   rV   r(   c                    V ^8  d   QhRRRR/# )r    nodeznodes.NodeNGr"   r   r$   )r%   s   "r&   r'   r=      s     + +\ +o +r(   c                8    V P                   P                  V4      # )z8Visit the transforms and apply them to the given *node*.)r7   visit)r@   rp   s   &&r&   visit_transformsAstroidManager.visit_transforms   s    $$T**r(   Nc          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r    filepathr#   modname
str | NonefallbackrE   sourcer"   re   r$   )r%   s   "r&   r'   r=      sC     %X %X%X %X 	%X
 %X 
%Xr(   c                t   Vf    RP                  \        V4      4      pW P                  9   d6   V P                  V,          P                  V8X  d   V P                  V,          #  \        VRV P                  R7      pRpW P                  9   d6   V P                  V,          P                  V8X  d   V P                  V,          # V'       d   \        V 4      P                  W4      # V'       d   V'       d   V P                  V4      # \        RVR7      h  \         d    Tp ELi ; i  \         d     Li ; i)/Given a module name, return the astroid object..T)include_no_extr8   z"Unable to build an AST for {path}.)path)joinr   ImportErrorr/   filer   r8   r   r	   
file_buildast_from_module_namer   )r@   rv   rw   ry   rz   s   &&&&&r&   ast_from_fileAstroidManager.ast_from_file   s    ?#((#4X#>? )))""7+00H<%%g..	&D<M<MH F
 )))""7+00H<%%g..!$'228EE,,W55"#GhWW5  #"#  		s#   D &D) D&%D&)D76D7c               (    V ^8  d   QhRRRRRRRR/# )r    datar#   rw   rv   rx   r"   re   r$   )r%   s   "r&   r'   r=      s2     J JJ"%J6@J	Jr(   c                8    \        V 4      P                  WV4      # )zMGiven some source code as a string, return its corresponding astroid
object.
r	   string_build)r@   r   rw   rv   s   &&&&r&   ast_from_stringAstroidManager.ast_from_string   s     d#00IIr(   c                    V ^8  d   QhRRRR/# )r    rw   r#   r"   re   r$   )r%   s   "r&   r'   r=      s     > ># >, >r(   c                	8    \        V 4      P                  R V4      # ) r   r@   rw   s   &&r&   _build_stub_module!AstroidManager._build_stub_module   s    d#00W==r(   c               $    V ^8  d   QhRRRRRR/# )r    rw   r#   r   zSequence[str]r"   re   r$   )r%   s   "r&   r'   r=      s$     = =="/=	=r(   c                	    \        W4      # r^   )r
   )r@   rw   r   s   &&&r&   _build_namespace_module&AstroidManager._build_namespace_module   s     .g<<r(   c                    V ^8  d   QhRRRR/# )r    rw   r#   r"   rE   r$   )r%   s   "r&   r'   r=      s     
 
3 
4 
r(   c                	z    V P                   '       d   R # \        V4      '       d   R # \        WP                  4      # )T)r2   r   r   r5   r   s   &&r&   _can_load_extension"AstroidManager._can_load_extension   s5    &&&G$$A55
 	
r(   c               (    V ^8  d   QhRRRRRRRR/# )r    rw   rx   context_file	use_cacherE   r"   re   r$   )r%   s   "r&   r'   r=      s8     Q" Q"Q" !Q" 	Q"
 
Q"r(   c                	   Vf   \        R4      hWP                  9   d   \        RV: 24      hWP                  9   d   V'       d   V P                  V,          # VR8X  d   V P	                  V4      # V'       dI   \
        P                  ! 4       p\
        P                  ! \
        P                  P                  V4      4        V P                  W4      pVP                  \        P                  P                  8X  dC   V P                  VP                   4      pVe"   TV'       d   \
        P                  ! X4       # # EMAVP                  \        P                  P"                  \        P                  P$                  39   d   VP                  \        P                  P$                  8X  dH   V P'                  V4      '       g1   V P	                  V4      V'       d   \
        P                  ! X4       # #  \)        V4      pT P-                  Yq4      T'       d   \
        P                  ! X4       # # VP                  \        P                  P.                  8X  d   \        RVVP                   R7      hVP                  \        P                  P0                  8X  dE   T P3                  YP4                  ;'       g    . 4      V'       d   \
        P                  ! X4       # # VP                  \        P                  P6                  8X  d|   VP                   f1   V P	                  V4      V'       d   \
        P                  ! X4       # # V P9                  VP                   VRR	7      V'       d   \
        P                  ! X4       # # VP                   f   \        R
VR7      hV P9                  VP                   VRR	7      V'       d   \
        P                  ! X4       # #   \*         d   p\        RTTP                   R7      ThRp?ii ; i  \          dZ   pT P:                   FB  p	 T	! T4      u u Rp?T'       d   \
        P                  ! X4       # #   \          d     K@  i ; i	  ThRp?ii ; i  T'       d   \
        P                  ! X4       i i ; i)r|   NzNo module name given.zSkipping ignored module __main__z&Loading {modname} failed with:
{error})rw   r   z)Unable to load compiled module {modname}.F)ry   z'Can't find a file for module {modname}.)rw   )r   r6   r   r/   r   osgetcwdchdirr   dirnamefile_from_module_nametyper   
ModuleTypePY_ZIPMODULEzip_import_datalocation	C_BUILTINC_EXTENSIONr   r   r+   ast_from_modulePY_COMPILEDPY_NAMESPACEr   submodule_search_locations	PY_FROZENr   r1   )
r@   rw   r   r   old_cwd
found_specmodulenamed_moduleehooks
   &&&&      r&   r   #AstroidManager.ast_from_module_name   s    ?&'>??
 ***$'?{%KLL(((Y%%g..j **733iikGHHRWW__\23;	"33GJJ$//">">>--j.A.AB%!j ! m & ))++% 
 OOt'B'BB 44W==227;V ! U#8#AL ++LBD ! A DOO$?$??(?##,,  DOO$@$@@33BBHHb0 ! + DOO$=$==&&.227;& ! ! ))**=*=wQV)W  !  ""*(=w  %%j&9&97U%S ! Q ! ,A ''00 	@ $ 	11=(
 ! 	 ,  2
 G	 ! s   AP =BP P 3O >P .BP 6P AP P  8P P#O<<PP Q(Q#Q&Q#(Q()Q+ 4Q+ QQ#QQ##Q((Q+ +!Rc                    V ^8  d   QhRRRR/# )r    rv   r#   r"   znodes.Module | Noner$   )r%   s   "r&   r'   r=     s       0C r(   c                	   \         f   R # \        V 4      p\         F  p VP                  V\        P
                  P                  ,           ^4      w  rE \         P                  ! YC,           4      pTP                  \        P
                  P                  R4      pTP                  T4      '       d
   TR,           pTP                  TP                  T4      Yq4      pTu # 	  R #   \         d     K  i ; i  \         d     K  i ; i)Nr}   z	.__init__)	zipimportr	   ZIP_IMPORT_EXTSrsplitr   r   sep
ValueErrorzipimporterreplace
is_packager   
get_sourcer+   )	r@   rv   builderexteggpathresourceimporterzmodnamer   s	   &&       r&   r   AstroidManager.zip_import_data  s     &"C$,OOC"''++4Eq$I!
$00?#++BGGKK=&&x00'+5H --''18  #      s$   3C#BC5#C21C25DDc               $    V ^8  d   QhRRRRRR/# )r    rw   r#   contextfilerx   r"   zspec.ModuleSpecr$   )r%   s   "r&   r'   r=   -  s$      )3	r(   c           	     	d    V P                   W3,          p\        V\        4      '       d   VP                  R4      hV#   \         df     \        TP                  R 4      TR7      pM5  \         d(   p\        RTTP                  R4      R7      p Rp?MRp?ii ; iY0P                   Y3&    Li ; i)r}   )r   z6Failed to import module {modname} with error:
{error}.N)rw   error)	r0   KeyErrorr   splitr   r   with_traceback
isinstancer   )r@   rw   r   rK   r   s   &&&  r&   r   $AstroidManager.file_from_module_name-  s    	A((')?@E e122&&t,,!  	A
.MM#&[  *M#**40	 <A  '!78	As9   ? B/A('B/(B3BB/BB/.B/c               $    V ^8  d   QhRRRRRR/# )r    r   ztypes.ModuleTyperw   rx   r"   re   r$   )r%   s   "r&   r'   r=   D  s)     B B&B1;B	Br(   c                *   T;'       g    VP                   pW P                  9   d   V P                  V,          #  VP                  p\        V4      '       d   V P	                  W24      #  \        V 4      P                  W4      #   \
         d     L'i ; i)z4Given an imported module, return the astroid object.)__name__r/   __file__r   r   AttributeErrorr	   module_build)r@   r   rw   rv   s   &&& r&   r   AstroidManager.ast_from_moduleD  s     ,,V__(((%%g..	H))))(<< * d#00AA  		s   -B BBc               $    V ^8  d   QhRRRRRR/# )r    klassr   rw   rx   r"   znodes.ClassDefr$   )r%   s   "r&   r'   r=   V  s!      D :  r(   c                *   Vf    VP                   pV P	                  V4      pVP                  VP                  4      ^ ,          p\        V\        P                  4      '       g   Q hV#   \         d   p\        RT\        T4      TR7      ThRp?ii ; i)z Get astroid for the given class.Nz,Unable to get module for class {class_name}.)cls
class_reprrw   )

__module__r   r   r,   r   getattrr   r   r   ClassDef)r@   r   rw   exc
modastroidrets   &&&   r&   ast_from_classAstroidManager.ast_from_classV  s    ?** ..w7
  03#u~~....
 " *B(/#	
 s   A) )B4BBc               $    V ^8  d   QhRRRRRR/# )r    r!   objectcontextzInferenceContext | Noner"   zIterator[InferenceResult]r$   )r%   s   "r&   r'   r=   g  s$     13 1313$;13	"13r(   c              #  
  "   \        VR4      '       d$   \        V\        4      '       g   VP                  pM0\        V\        4      '       d   TpM\	        RR\        V4      R7      h VP                  p TP                  pT P                  T4      pY1J d   TP                  Yb4       Rj  xL
  R# TP                  Yb4       F  pTP                  4       x  K  	  R#   \         d   p\	        RT\        T4      R7      ThRp?i\         d   p\        RT\        T4      R7      ThRp?ii ; i  \         d   p\	        RT\        T4      R7      ThRp?i\         d   p\        RT\        T4      R7      ThRp?ii ; i L5i)	z"Infer astroid for the given class.	__class__z$Unable to get type for {class_repr}.N)r   r   z&Unable to get module for {class_repr}.zBUnexpected error while retrieving module for {class_repr}:
{error}z%Unable to get name for {class_repr}:
z@Unexpected error while retrieving name for {class_repr}:
{error})hasattrr   r   r   r   r,   r   r   r+   r   r   r   igetattrinstantiate_class)	r@   r!   r   r   rw   r   namer   inferreds	   &&&      r&   infer_ast_from_something'AstroidManager.infer_ast_from_somethingg  s     3$$ZT-B-BMMET""E&6$S> 
	&&G	>>D ..w7
<!**4999&//>0022 ?A  	&8$U+ 	
  	$$U+	
 	  	&8$U+ 	
  	$S$U+ 		 :sx   A&F)C 6D0 *F,F-2FD-*DD-D-D((D--F0E>;EE> E>!E99E>>Fc                    V ^8  d   QhRRRR/# )r    r   zCallable[[str], nodes.Module]r"   r<   r$   )r%   s   "r&   r'   r=     s     / /0M /RV /r(   c                <    V P                   P                  V4       R# )aS  Registers a hook to resolve imports that cannot be found otherwise.

`hook` must be a function that accepts a single argument `modname` which
contains the name of the module or package that could not be imported.
If `hook` can resolve the import, must return a node of type `nodes.Module`,
otherwise, it must raise `AstroidBuildingError`.
N)r1   append)r@   r   s   &&r&   register_failed_import_hook*AstroidManager.register_failed_import_hook  s     	!!((.r(   c                    V ^8  d   QhRRRR/# )r    r   re   r"   r<   r$   )r%   s   "r&   r'   r=     s     ; ;< ;D ;r(   c                R    V P                   P                  VP                  V4       R# )z<Cache a module if no module with the same name is known yet.N)r/   
setdefaultr   )r@   r   s   &&r&   cache_moduleAstroidManager.cache_module  s    %%fkk6:r(   c                   V ^8  d   QhRR/# r;   r$   )r%   s   "r&   r'   r=     s     . .4 .r(   c                2    ^ RI Hp VP                  4        R# )zBootstrap the required AST modules needed for the manager to work.

The bootstrap usually involves building the AST for the builtins
module, which is required by the rest of astroid to work correctly.
)raw_buildingN)astroidr   _astroid_bootstrapping)r@   r   s   & r&   	bootstrapAstroidManager.bootstrap  s     	)++-r(   c                   V ^8  d   QhRR/# r;   r$   )r%   s   "r&   r'   r=     s     ," ,"T ,"r(   c           	        ^ RI Hp ^ RIHp ^ RIHpHp ^ RIHp ^ RI	H
p ^ RIHp V! 4        \        4        V P                  P                  4        V P                   P                  4        \"        P$                  ! \&        4      \(        P*                  R,          n        VP.                  \0        \2        \4        \6        P8                  VP:                  VP<                  VV3	 F  pVP?                  4        K  	  \@        PB                   F  p	V	PD                  P?                  4        K  	  V PG                  4        V! V 4       R# )	zWClear the underlying caches, bootstrap the builtins module and
re-register transforms.
)register_all_brains)clear_inference_tip_cache)
_find_spec_is_setuptools_namespace)ObjectModel)LookupMixIn)r   r7   N)$astroid.brain.helpersr  astroid.inference_tipr   astroid.interpreter._import.specr	  r
  astroid.interpreter.objectmodelr  astroid.nodes._base_nodesr  astroid.nodes.scoped_nodesr   r   r/   clearr0   collectionsdefaultdictlistr.   r9   
transformslookupr   r   r   r   is_namespace
attributes_metaclass_lookup_attributecache_clearr   _SPEC_FINDERSfind_moduler  )
r@   r  r  r	  r
  r  r  r   	lru_cachefinders
   &         r&   clear_cacheAstroidManager.clear_cache  s     	>C	
 	@97!#  """$ 9D8O8OPT8U\*5 "!""00$

I !!#

 ((F**, ) 	 	D!r(   )r1   r0   r7   r/   r5   r6   r8   )NTF)r   N)NTr^   )%r   r   __qualname____firstlineno____doc__r   setr   r9   __annotations__rA   propertyr2   setterr3   r4   r_   rb   rh   r8   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r!  __static_attributes__r$   r(   r&   r.   r.   2   s   
 D2 %%su35&(,E( 
A > > ""? #? 4 4 5 5 < <   = != 2 2 4 4 . . 4 4 5 5+%XNJ>=

Q"f..B$"13f/;.," ,"r(   r.   )z.zipz.eggz.whlz.pyzz.pyzw)0r%  
__future__r   r  r   typesr   collections.abcr   r   r   typingr   r   r  r   astroid.builderr	   r
   astroid.contextr   r   astroid.exceptionsr   r   astroid.interpreter._importr   r   astroid.modutilsr   r   r   r   r   r   r   r   r   r   r   astroid.transformsr   astroid.typingr   r   r   r,   r.   r$   r(   r&   <module>r6     se   

 #  	   8 8    J ? G 2    0 ?;l" l"r(   