+
    lh\                         R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ t	^t
^t^t^t^t^t/ tR t/ tR tRR lt ! R R4      t ! R R4      tR	 t]R
8X  d    ]! 4       tR# R#   ] d    ]! R4        R# i ; i)z3Find modules used by a script, using introspection.Nc                 P    \         P                  V . 4      P                  V4       R # N)packagePathMap
setdefaultappend)packagenamepaths   &&lib/python3.14/modulefinder.pyAddPackagePathr
      s    k2.55d;    c                     V\         V &   R # r   )replacePackageMap)oldnamenewnames   &&r	   ReplacePackager   )   s    !(gr   c                   \         P                  P                  P                  4        \         P                  P                  P	                  W4      pVf   \        RP                  V R7      V R7      hVP                  \         P                  P                  J d   RRRR\        33# VP                  \         P                  P                  J d   RRRR\        33# VP                  pVP                  P                  V 4      '       d*   R\        P                  P!                  V4      RR\"        33# \%        VP                  \         P                  P&                  4      '       d   \(        pM\%        VP                  \         P                  P*                  \         P                  P,                  34      '       d   \.        pMG\%        VP                  \         P                  P0                  4      '       d   \2        pMRRRR\4        33# \6        P8                  ! V4      p\        P                  P;                  V4      R,          pWSVRV33# )zDAn importlib reimplementation of imp.find_module (for our purposes).NzNo module named {name!r})name rb)	importlib	machinery
PathFinderinvalidate_caches	find_specImportErrorformatloaderBuiltinImporter
_C_BUILTINFrozenImporter
_PY_FROZENorigin
is_packageosr   dirname_PKG_DIRECTORY
isinstanceSourceFileLoader
_PY_SOURCEExtensionFileLoaderAppleFrameworkLoader_C_EXTENSIONSourcelessFileLoader_PY_COMPILED_SEARCH_ERRORio	open_codesplitext)r   r   spec	file_pathkindfilesuffixs   &&     r	   _find_moduler8   -   s    ""446))33D?D|4;;;FTRR {{i))999TBJ///{{i))888TBJ///I{{d##RWW__Y/"b.1III$++y22CCDD	3344

 
 	DKK!4!4!I!I	J	J TBM222<<	"DWWi(,FVT4000r   c                   0   a  ] tR t^_t o RR ltR tRtV tR# )ModuleNc                T    Wn         W n        W0n        R V n        / V n        / V n        R # r   )__name____file____path____code__globalnamesstarimports)selfr   r6   r   s   &&&&r	   __init__Module.__init__a   s,      r   c                    R V P                   : 2pV P                  e   VRV P                  : 2,           pV P                  e   VRV P                  : 2,           pVR,           pV# )zModule(, ))r<   r=   r>   )rB   ss   & r	   __repr__Module.__repr__n   sR    ==*==$dmm--A==$dmm--AGr   )r?   r=   r<   r>   r@   rA   )NN)r<   
__module____qualname____firstlineno__rC   rI   __static_attributes____classdictcell____classdict__s   @r	   r:   r:   _   s      r   r:   c                      a  ] tR t^wt o RR ltR tR tR tR tR t	RR lt
RR	 ltR
 tR tRR ltR tR tR tR tRR ltR tR tR tR tR R ltR tR tR tR tRtV tR# )!ModuleFinderNc                    Vf   \         P                  pWn        / V n        / V n        W n        ^ V n        Ve   TM. V n        Ve   TM. V n        . V n        R # r   )	sysr   modules
badmodulesdebugindentexcludesreplace_pathsprocessed_paths)rB   r   rX   rZ   r[   s   &&&&&r	   rC   ModuleFinder.__init__y   sT    <88D	
$,$8b.;.G]R!r   c                    WP                   8:  db   \        V P                  4       F  p\        R RR7       K  	  \        VRR7       V F  p\        \	        V4      RR7       K  	  \        4        R# R# )    endN)rX   rangerY   printrepr)rB   levelstrargsiargs   &&&*  r	   msgModuleFinder.msg   sU    JJ4;;'e% (#3d3iS) G r   c                    V^ ,          pW P                   8:  d+   V P                  ^,           V n        V P                  ! V!   R# R#     NrX   rY   rk   rB   rh   rf   s   &* r	   msginModuleFinder.msgin   4    QJJ++/DKHHdO r   c                    V^ ,          pW P                   8:  d+   V P                  ^,
          V n        V P                  ! V!   R# R# rn   rp   rq   s   &* r	   msgoutModuleFinder.msgout   rt   r   c                    V P                  ^RV4       \        P                  ! V4      ;_uu_ 4       pRR\        3pV P	                  RW!V4       RRR4       R#   + '       g   i     R# ; i)   
run_scriptr   r   __main__N)rk   r0   r1   r)   load_module)rB   pathnamefpstuffs   &&  r	   rz   ModuleFinder.run_script   sP    L(+\\(##rz*EZu= $###s   AA*	c                6   \         P                  P                  V4      w  r#\         P                  P                  V4      w  r4\        P
                  ! V4      ;_uu_ 4       pVR \        3pV P                  W5W4       RRR4       R#   + '       g   i     R# ; i)r   N)r$   r   splitr2   r0   r1   r)   r|   )rB   r}   dirr   extr~   r   s   &&     r	   	load_fileModuleFinder.load_file   sh    GGMM(+	GG$$T*	\\(##r$
+ETx7 $###s   !BB	c                    V P                  ^RWW44       V P                  W$R7      pV P                  WQ4      w  rgV P                  Wg4      pV'       g   V# VP                  '       d   V P                  W4       R# )   import_hookrf   N)rk   determine_parentfind_head_package	load_tailr>   ensure_fromlist)	rB   r   callerfromlistrf   parentqtailms	   &&&&&    r	   r   ModuleFinder.import_hook   si    M4A&&v&;((6NN1#H:::  -r   c                j   V P                  ^RW4       V'       d   V^ 8X  d   V P                  ^R4       R# VP                  pV^8  d   VP                  '       d
   V^,          pV^ 8X  d0   V P                  V,          pWAJ g   Q hV P                  ^RV4       V# VP                  R4      V8  d   \        R4      hRP                  VP                  R4      RV)  4      pV P                  V,          pV P                  ^RV4       V# VP                  '       d0   V P                  V,          pWJ g   Q hV P                  ^RV4       V# RV9   dR   VP                  R4      pVRV pV P                  V,          pVP                  V8X  g   Q hV P                  ^RV4       V# V P                  ^R4       R# )   r   zdetermine_parent -> NoneNzdetermine_parent ->.zrelative importpath too deep)
rr   rv   r<   r>   rV   countr   joinr   rfind)rB   r   rf   pnamer   ri   s   &&&   r	   r   ModuleFinder.determine_parent   s   

1(&8!KK56A:
ze,'''A4f={{3%'!"@AAHHU[[-gv67E\\%(FKK0&9M???\\%(F###KK0&9M%<C A"1IE\\%(F??e+++KK0&9MA12r   c                   V P                  ^RW4       RV9   d#   VP                  R4      pVRV pW#^,           R pMTpRpV'       d   VP                  : RV: 2pMTpV P                  WFV4      pV'       d   V P	                  ^RWu34       Wu3# V'       d6   TpRpV P                  WFV4      pV'       d   V P	                  ^RWu34       Wu3# V P	                  ^RV4       \        RV,           4      h)r   r   r   Nr   zfind_head_package ->"raise ImportError: No module namedNo module named )rr   findr<   import_modulerv   r   )rB   r   r   ri   headr   qnamer   s   &&&     r	   r   ModuleFinder.find_head_package   s    

1)68$;		#A8D!:DDD%5EEtF3KK1A9=7NEF""47AA5yAwA;UC,u455r   c                r   V P                  ^RW4       TpV'       d   VP                  R4      pV^ 8  d   \        V4      pVRV W$^,           R r%VP                  : RV: 2pV P	                  WVV4      pV'       d   Ki  V P                  ^RV4       \        RV,           4      hV P                  ^RV4       V# )r   r   r   Nr   r   zload_tail ->)rr   r   lenr<   r   rv   r   )rB   r   r   r   ri   r   mnames   &&&    r	   r   ModuleFinder.load_tail   s    

1k1+		#A1u#d)abq4!:$ zz40E""42A1ACUK!"4u"<==A~q)r   c                d   V P                  ^RWV4       V F  pVR8X  d:   V'       g0   V P                  V4      pV'       d   V P                  W^4       K?  KA  KC  \        W4      '       d   KV  VP                  : RV: 2pV P                  WFV4      pV'       d   K  \        RV,           4      h	  R# )r   r   *r   r   N)rk   find_all_submodulesr   hasattrr<   r   r   )rB   r   r   	recursivesuballsubnamesubmods   &&&&    r	   r   ModuleFinder.ensure_fromlist   s    %qI>Ccz 2215C,,QQ7  ! Q__%&ZZ5++C!<v%&87&BCC r   c                p   VP                   '       g   R # / p. pV\        P                  P                  R,          ,          pV\        P                  P                  R,          ,          pV\        P                  P
                  R,          ,          pVP                    Fb  p \        P                  ! V4      pT FB  pR pT F   p\        T4      p	Yi) R  T8X  g   K  TR T	)  p M	  T'       g   K5  TR8w  g   K>  YrT&   KD  	  Kd  	  VP                  4       #   \         d    T P                  ^RT4        K  i ; i)NNNNzcan't list directoryrC   )r>   r   r   EXTENSION_SUFFIXESSOURCE_SUFFIXESBYTECODE_SUFFIXESr$   listdirOSErrorrk   r   keys)
rB   r   rV   suffixesr   namesr   modsuffns
   &&        r	   r    ModuleFinder.find_all_submodules  s   zzz I''::1==I''77::I''99!<<::C

3 $DD	ABCyD("3QBi	 %
 33*,#&CL   ||~  2C8s   !DD54D5c                   V P                  ^RWV4        V P                  V,          pV P                  ^RV4       V#   \         d     Mi ; iY P                  9   d   T P                  ^R4       R# T'       d#   TP
                  f   T P                  ^R4       R#  T P                  TT;'       d    TP
                  T4      w  rVpM%  \         d    T P                  ^RR4        R# i ; i T P                  Y%Yg4      pT'       d   TP                  4        M  T'       d   TP                  4        i i ; iT'       d   \        Y1T4       T P                  ^RT4       T# )r   r   zimport_module ->zimport_module -> NoneN)rr   rV   rv   KeyErrorrW   r>   find_moduler   r|   closesetattr)rB   partnamefqnamer   r   r~   r}   r   s   &&&&    r	   r   ModuleFinder.import_module)  s;   

1ox@	V$A KK-q1H	  		
 __$KK23foo-KK23	"&"2"28393M3Mfoov#WB% 	KK-t4		  X=A
 
 Fa(A)1-s3   > AAC	 3C	 	C+*C+/D D5c                   Vw  rVpT P                  ^RY;'       d    RV4       V\        8X  d'   V P                  W4      pV P                  ^RV4       V# V\        8X  d   \        VP                  4       VR4      p	MeV\        8X  dY    VP                  4       p
\        P                  P                  W/ 4       \        P                  ! \        T
4      R,          4      p	MRp	V P!                  V4      pW8n        V	'       d;   V P$                  '       d   V P'                  V	4      p	Wn        V P+                  W4       V P                  ^RV4       V#   \         d*   pT P                  ^R\        T4      ,           T4       h Rp?ii ; i)ry   r|   r~   zload_module ->execzraise ImportError: N:   NN)rr   r&   load_packagerv   r)   compilereadr.   r   _bootstrap_external_classify_pycr   rg   marshalloads
memoryview
add_moduler=   r[   replace_paths_in_coder?   	scan_code)rB   r   r~   r}   	file_infor7   modetyper   codataexcs   &&&&&       r	   r|   ModuleFinder.load_moduleI  sC   &d

1mV[[D(C>!!!&3AKK+Q/H:Hf5B\!wwy--;;D"M z$/45BBOOF#
!!!//3JNN2!A'+  A4s3x?Js   0E F$E>>Fc                    WP                   9  d   / V P                   V&   V'       d#   ^V P                   V,          VP                  &   R# ^V P                   V,          R&   R# )   -N)rW   r<   )rB   r   r   s   &&&r	   _add_badmoduleModuleFinder._add_badmodulef  sG    &$&DOOD!56DOOD!&//2)*DOOD!#&r   c           	        WP                   9   d   V P                  W4       R #  V P                  WVR7       V'       dU   V FL  pVR,           V,           pW`P                   9   d   V P                  Wb4       K6   V P                  WV.VR7       KN  	  R # R #   \         d9   pT P	                  ^R\        T4      4       T P                  Yb4        R p?K  R p?ii ; i  \         d9   pT P	                  ^R\        T4      4       T P                  Y4        R p?R # R p?i\         d9   pT P	                  ^R\        T4      4       T P                  Y4        R p?R # R p?ii ; i)Nr   r   zImportError:zSyntaxError:)rW   r   r   r   rk   rg   SyntaxError)rB   r   r   r   rf   r   fullnamerk   s   &&&&&   r	   _safe_import_hookModuleFinder._safe_import_hookn  s)   ??"-	>T7 #C#czC/H??2++H= >((uE(J $  ' >NCH=++H==>  	.HHQC1-- 	.HHQC1--	.sA   C 9BC!-CCE '-DE 'E (-EE c              #     "   \         P                  ! V4       F
  pR V33x  K  	  \         P                  ! V4       F  w  r#pV^ 8X  d
   RWB33x  K  RW4V33x  K   	  R# 5i)storeabsolute_importrelative_importN)dis_find_store_names_find_imports)rB   r   r   rf   r   s   &&   r	   scan_opcodesModuleFinder.scan_opcodes  sf     ))"-DD7"" .%(%6%6r%:!Dz'()999'%4)@@@	 &;s   AA!c                d   VP                   pV P                  pV! V4       EF  w  rVVR 8X  d   Vw  p^VP                  V&   K"  VR8X  Ed5   Vw  r^ p	Ve#   RV9   d   ^p	V U
u. uF  qR8w  g   K  V
NK  	  pp
V P                  WrV^ R7       V	'       d   RpVP                  '       d4   V P
                  P                  VP                  R,           V,           4      pVf   V P
                  P                  V4      pVen   VP                  P                  VP                  4       VP                  P                  VP                  4       VP                  f   ^VP                  V&   EKF  EKI  ^VP                  V&   EK[  EK^  VR8X  dX   Vw  rpV'       d   V P                  WrWR7       EK  V P                  W,R7      pV P                  VP                  RV^ R7       EK  \        V4      h	  VP                   F1  p\        V\        V4      4      '       g   K   V P!                  W4       K3  	  R# u up
i )r   r   Nr   r   r   r   )co_coder   r@   r   r>   rV   getr<   updaterA   r?   r   RuntimeError	co_constsr'   r   r   )rB   r   r   codescannerwhatrh   r   r   	have_starfmmrf   r   cs   &&&            r	   r   ModuleFinder.scan_code  s   zz##!"+JDw&'d#**!%	'h$%	+3@8aCx8H@&&t&B Bzzz "\\--ajj3.>.EFz!\\--d3~,,R^^<,,R^^<;;.23AMM$/ / /0d+% & **(,%**4H*J!2212BF**6??D(RS*T #4((Q &T A!T"X&&q$ A  As   "H-/H-c                   V P                  ^RW4       \        P                  V4      pV'       d   TpV P                  V4      pW$n        V.Vn        VP
                  \        P                  V. 4      ,           Vn        V P                  RVP
                  4      w  rVp V P                  WWg4       V P                  ^RV4       TV'       d   VP                  4        # #   T'       d   TP                  4        i i ; i)ry   r   rC   zload_package ->)rr   r   r   r   r=   r>   r   r   r|   rv   r   )rB   r   r}   r   r   r~   bufr   s   &&&     r	   r   ModuleFinder.load_package  s    

1nf7#''/FOOF#
Z
 ZZ."4"4VR"@@
))*ajjA	V4KK,a0
 r
 s   &C C C9c                    WP                   9   d   V P                   V,          # \        V4      ;V P                   V&   pV# r   )rV   r:   )rB   r   r   s   && r	   r   ModuleFinder.add_module  s7    \\!<<''#)&>1Vqr   c                   Ve   VP                   R,           V,           pMTpW@P                  9   d   V P                  ^RV4       \        V4      hVf.   V\        P
                  9   d   R R RR\        33# V P                  p\        W4      # )Nr   zfind_module -> Excludedr   )	r<   rZ   rv   r   rU   builtin_module_namesr   r   r8   )rB   r   r   r   r   s   &&&& r	   r   ModuleFinder.find_module  s    s*4/HH}}$KK4h?d##<s///dRZ$89999DD''r   c           	        \        4        \        RR:R RR: 24       \        RR:R RR: 24       \        V P                  P                  4       4      pV Fj  pV P                  V,          pVP                  '       d   \        RRR7       M\        R	RR7       \        R
V,          VP
                  ;'       g    R4       Kl  	  V P                  4       w  rEV'       df   \        4        \        R4       V FJ  p\        V P                  V,          P                  4       4      p\        RVRRP                  V4      4       KL  	  V'       du   \        4        \        RRR7       \        R4       V FJ  p\        V P                  V,          P                  4       4      p\        RVRRP                  V4      4       KL  	  R# R# )zPrint a report to stdout, listing the found modules with their
paths, as well as modules that are missing, or seem to be missing.
z  Name25r`   Filez----Pra   r   z%-25sr   zMissing modules:?zimported fromrF   z7Submodules that appear to be missing, but could also bez#global names in the parent package:N)	rd   sortedrV   r   r>   r=   any_missing_mayberW   r   )rB   r   keyr   missingmayber   modss   &       r	   reportModuleFinder.report  sH    	ff-.ff-.dll'')*CS!Azzzcs#cs#'C-!1!1r2  //1G$%dood388:;c4$))D/B   GKQTU78dood388:;c4$))D/B 	 r   c                6    V P                  4       w  rW,           # )zReturn a list of modules that appear to be missing. Use
any_missing_maybe() if you want to know which modules are
certain to be missing, and which *may* be missing.
)r  )rB   r  r  s   &  r	   any_missingModuleFinder.any_missing  s    
 //1r   c                X   . p. pV P                    F  pW0P                  9   d   K  VP                  R4      pV^ 8  d   VP                  V4       K@  W4^,           R pVRV pV P                  P                  V4      pVeu   W`P                   V,          9   d   VP                  V4       K  WWP                  9   d   K  VP                  '       d   VP                  V4       K  VP                  V4       K  VP                  V4       K  	  VP                  4        VP                  4        W3# )a~  Return two lists, one with modules that are certainly missing
and one with modules that *may* be missing. The latter names could
either be submodules *or* just global names in the package.

The reason it can't always be determined is that it's impossible to
tell which names are imported when "from module import *" is done
with an extension module, short of actually importing it.
r   N)	rW   rZ   r   r   rV   r   r@   rA   sort)rB   r  r  r   ri   r   pkgnamepkgs   &       r	   r  ModuleFinder.any_missing_maybe  s     OOD}}$

3A1ut$Q34jG2AhG,,""7+Cood33 NN4(/___ LL& NN4(t$= $> 	

~r   c                   \         P                  P                  VP                  4      ;r#V P                   F2  w  rEVP                  V4      '       g   K  WS\        V4      R  ,           p M	  V P                  '       dd   W0P                  9  dT   W#8w  d   V P                  ^RV: RV: 24       MV P                  ^RV: R24       V P                  P                  V4       \        VP                  4      p\        \        V4      4       F?  p\        Wg,          \        V4      4      '       g   K&  V P!                  Wg,          4      Wg&   KA  	  VP#                  \%        V4      VR7      # )Nzco_filename z changed to z remains unchanged)r   co_filename)r$   r   normpathr  r[   
startswithr   rX   r\   rv   r   listr   rc   r'   r   r   replacetuple)rB   r   new_filenameoriginal_filenamer   rconstsri   s   &&      r	   r   "ModuleFinder.replace_paths_in_codeH  s   +-77+;+;BNN+KK&&DA ++A.. SVW#== '
 :::+3G3GG0A'8 H I A'8 ; <  ''(9:bll#s6{#A&)T"X.. 66vyA	 $ zzE&M|zLLr   )rW   rX   rZ   rY   rV   r   r\   r[   )Nro   NN)NNr   )r   )ro   r   )r<   rK   rL   rM   rC   rk   rr   rv   rz   r   r   r   r   r   r   r   r   r|   r   r   r   r   r   r   r   r  r  r  r   rN   rO   rP   s   @r	   rS   rS   w   s     
">8	!F66D8@:+>4A/%b*($ CD,\M Mr   rS   c                     ^ RI p  V P                  \        P                  R,          R4      w  r^p^ p. p. pT Fm  w  rTR8X  d
   T^,           pTR8X  d   ^pTR8X  d&   YiP                  \        P                  4      ,           pTR8X  d   ^ pTR8X  g   K\  TP                  T	4       Ko  	  T'       g   R	p
M	T^ ,          p
\        P                  R
,          p\        P                  P                  T
4      T^ &   Yk,           pT^8  d*   \	        R4       T F  p\	        R\        T4      4       K  	  \        YT4      pTR,           F]  pTR8X  d   ^pK  T'       d7   TRR R8X  d   TP                  TRR RR.4       K9  TP                  T4       KL  TP                  T4       K_  	  TP                  T
4       TP!                  4        T#   T P                   d   p\	        T4        Rp?R# Rp?ii ; i)ro   N:r   NNzdmp:qx:z-dz-mz-pz-qz-xzhello.pyr   zpath:r_   z.*r   )getoptrU   argverrorrd   r   r$   pathsepr   r   r%   re   rS   r   r   rz   r  )r,  optsrh   rk   rX   domodsaddpathexcludeoascriptr   itemmfrj   s                  r	   testr9  `  s   ]]388B<;
 EFGG9AIE9F9

 33G9E9NN1  a 88A;Dggoof%DG>DqygD%d$  
d7	+BBxx$;F23x4s3Bxu5s#LL  MM&IIKIg << c
s   )G G/G**G/r{   z
[interrupted]r   )__doc__r   importlib._bootstrap_externalr   importlib.machineryr   r$   r0   rU   r/   r)   r.   r,   r&   r   r!   r   r
   r   r   r8   r:   rS   r9  r<   r8  KeyboardInterruptrd    r   r	   <module>r?     s    9 
 $   	 	 
 


 <  )/1d 0fM fMR8v z!V   ! !s   A& &A98A9