+
    i\  c                   s    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                 sP    \         P                  V . 4      P                  V4       R # N)packagePathMapZ
setdefaultappend)Zpackagenamepath   &&%/usr/lib64/python3.14/modulefinder.pyAddPackagePathr      s    k2.55d;    c                 s    V\         V &   R # r    )replacePackageMap)Zoldnamenewnamer   r   ReplacePackager
   )   s    !(gr   c                s   \         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	machineryZ
PathFinderZinvalidate_cachesZ	find_specImportErrorZformatZloaderZBuiltinImporter
_C_BUILTINZFrozenImporter
_PY_FROZENZoriginZ
is_packageosr   dirname_PKG_DIRECTORY
isinstanceZSourceFileLoader
_PY_SOURCEZExtensionFileLoaderZAppleFrameworkLoader_C_EXTENSIONZSourcelessFileLoader_PY_COMPILED_SEARCH_ERRORio	open_codesplitext)r   r   ZspecZ	file_pathZkindfilesuffix   &&     r   _find_moduler"   -   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                   s0   a  ] tR t^_t o RR ltR tRtV tR# )ModuleNc                sT    Wn         W n        W0n        R V n        / V n        / V n        R # r    )__name____file____path____code__globalnamesstarimports)selfr   r   r   s   &&&&r   __init__ZModule.__init__a   s,      r   c                s    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(, Z))r$   r%   r&   )r*   Zss   & r   __repr__ZModule.__repr__n   sR    ==*==$dmm--A==$dmm--AGr   )r'   r%   r$   r&   r(   r)   )NN)r$   
__module____qualname____firstlineno__r+   r-   __static_attributes____classdictcell__Z__classdict__   @r   r#   r#   _   s      r   r#   c                   s   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                s    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)r*   r   r9   r;   r<   s   &&&&&r   r+   ZModuleFinder.__init__y   sT    <88D	
$,$8b.;.G]R!r   c                s    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# )    ZendN)r9   ranger:   printrepr)r*   levelstrargsiargs   &&&*  r   msgZModuleFinder.msg   sU    JJ4;;'e% (#3d3iS) G r   c                s    V^ ,          pW P                   8:  d+   V P                  ^,           V n        V P                  ! V!   R# R#     Nr9   r:   rI   r*   rF   rD      &* r   msginZModuleFinder.msgin   4    QJJ++/DKHHdO r   c                s    V^ ,          pW P                   8:  d+   V P                  ^,
          V n        V P                  ! V!   R# R# rJ   rL   rM   rN   r   msgoutZModuleFinder.msgout   rP   r   c                s    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)rI   r   r   r   load_module)r*   pathnamefpstuffs   &&  r   rS   ZModuleFinder.run_script   sP    L(+\\(##rz*EZu= $###s   AA*	c                s6   \         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   splitr   r   r   r   rU   )r*   rV   dirr   ZextrW   rX   r!   r   	load_fileZModuleFinder.load_file   sh    GGMM(+	GG$$T*	\\(##r$
+ETx7 $###s   !BB	c                s    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rD   N)rI   determine_parentfind_head_package	load_tailr&   ensure_fromlist)	r*   r   callerfromlistrD   parentqtailms	   &&&&&    r   r]   ZModuleFinder.import_hook   si    M4A&&v&;((6NN1#H:::  -r   c                sj   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)
rO   rQ   r$   r&   r7   Zcountr   joinrY   rfind)r*   rc   rD   Zpnamere   rG   s   &&&   r   r_   Z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                s   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)ri   r`   rj   Nr   zfind_head_package ->"raise ImportError: No module namedNo module named )rO   findr$   import_modulerQ   r   )r*   re   r   rG   headrg   Zqnamerf      &&&     r   r`   Z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                sr   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# )ri   ra   rj   Nrm   rn   zload_tail ->)rO   ro   lenr$   rp   rQ   r   )r*   rf   rg   rh   rG   rq   Zmnames   &&&    r   ra   ZModuleFinder.load_tail   s    

1k1+		#A1u#d)abq4!:$ zz40E""42A1ACUK!"4u"<==A~q)r   c                sd   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# )ri   rb   *rj   rn   N)rI   find_all_submodulesrb   Zhasattrr$   rp   r   )r*   rh   rd   Z	recursivesubZallsubnameZsubmod   &&&&    r   rb   ZModuleFinder.ensure_fromlist   s    %qI>Ccz 2215C,,QQ7  ! Q__%&ZZ5++C!<v%&87&BCC r   c                sp   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 directoryr+   )r&   r   r   ZEXTENSION_SUFFIXESZSOURCE_SUFFIXESZBYTECODE_SUFFIXESr   ZlistdirZOSErrorrI   rs   keys)
r*   rh   r7   ZsuffixesrZ   Znamesr   ZmodZsuffZns
   &&        r   ru   Z 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                s   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\   rp   zimport_module ->zimport_module -> NoneN)rO   r7   rQ   ZKeyErrorr8   r&   find_moduler   rU   closeZsetattr)r*   Zpartnamefqnamere   rh   rW   rV   rX   rx   r   rp   Z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                s   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)rR   rU   rW   zload_module ->Zexeczraise ImportError: N:i   NN)rO   r   load_packagerQ   r   ZcompileZreadr   r   Z_bootstrap_externalZ_classify_pycr   rE   marshalZloadsZ
memoryview
add_moduler%   r<   replace_paths_in_coder'   	scan_code)r*   r}   rW   rV   Z	file_infor    Zmodetyperh   coZdataZexcs   &&&&&       r   rU   Z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                s    WP                   9  d   / V P                   V&   V'       d#   ^V P                   V,          VP                  &   R# ^V P                   V,          R&   R# )   Z-N)r8   r$   )r*   r   rc   s   &&&r   _add_badmoduleZModuleFinder._add_badmodulef  sG    &$&DOOD!56DOOD!&//2)*DOOD!#&r   c           	     s   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^   rj   zImportError:zSyntaxError:)r8   r   r]   r   rI   rE   ZSyntaxError)r*   r   rc   rd   rD   rv   fullnamerI   s   &&&&&   r   _safe_import_hookZ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              #  s   "   \         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)disZ_find_store_namesZ_find_imports)r*   r   r   rD   rd   s   &&   r   scan_opcodesZModuleFinder.scan_opcodes  sf     ))"-DD7"" .%(%6%6r%:!Dz'()999'%4)@@@	 &;s   AA!c                sd   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   Nrt   r^   rj   r   )Zco_coder   r(   r   r&   r7   getr$   Zupdater)   r'   r_   ZRuntimeError	co_constsr   r   r   )r*   r   rh   ZcodeZscannerZwhatrF   r   rd   Z	have_starfZmmrD   re   Zcs   &&&            r   r   Z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                s   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)rR   r~   r+   zload_package ->)rO   r   r   r   r%   r&   r   r{   rU   rQ   r|   )r*   r}   rV   r	   rh   rW   ZbufrX   rr   r   r~   Z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                s    WP                   9   d   V P                   V,          # \        V4      ;V P                   V&   pV# r    )r7   r#   )r*   r}   rh   s   && r   r   ZModuleFinder.add_module  s7    \\!<<''#)&>1Vqr   c                s   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      # )Nrj   zfind_module -> Excludedr   )	r$   r;   rQ   r   r6   Zbuiltin_module_namesr   r   r"   )r*   r   r   re   r   s   &&&& r   r{   ZModuleFinder.find_module  s    s*4/HH}}$KK4h?d##<s///dRZ$89999DD''r   c           	     s   \        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  ZNameZ25r?   ZFilez----ZPr@   rh   z%-25sr   zMissing modules:Z?zimported fromr,   z7Submodules that appear to be missing, but could also bez#global names in the parent package:N)	rB   Zsortedr7   rz   r&   r%   any_missing_mayber8   rk   )r*   rz   Zkeyrh   missingmayber   Zmods   &       r   reportZ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                s6    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   )r*   r   r   s   &  r   any_missingZModuleFinder.any_missing  s    
 //1r   c                sX   . 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.
rj   N)	r8   r;   rl   r   r7   r   r(   r)   Zsort)r*   r   r   r   rG   rw   ZpkgnameZpkgr   r   r   ZModuleFinder.any_missing_maybe  s     OOD}}$

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

~r   c                s   \         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   Znormpathr   r<   Z
startswithrs   r9   r=   rQ   r   Zlistr   rA   r   r   r   ZreplaceZtuple)r*   r   Znew_filenameZoriginal_filenamer   ZrZconstsrG   s   &&      r   r   Z"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   )r8   r9   r;   r:   r7   r   r=   r<   )NrK   NN)NNr   )r   )rK   r    )r$   r.   r/   r0   r+   rI   rO   rQ   rS   r[   r]   r_   r`   ra   rb   ru   rp   rU   r   r   r   r   r~   r   r{   r   r   r   r   r1   r2   r3   r4   r   r5   r5   w   s     
">8	!F66D8@:+>4A/%b*($ CD,\M Mr   r5   c                  s   ^ 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)rK   N:r   NNzdmp:qx:z-dz-mz-pz-qz-xzhello.pyry   zpath:r>   z.*rt   i)getoptr6   ZargvZerrorrB   rY   r   Zpathsepr   r   r   rC   r5   r]   r[   rS   r   )r   ZoptsrF   rI   r9   ZdomodsZaddpathZexcludeZoZaZscriptr   ZitemmfrH   s                  r   testr   `  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/rT   z
[interrupted]r    )Z__doc__r   Zimportlib._bootstrap_externalr   Zimportlib.machineryr   r   r   r6   r   r   r   r   r   r   r   r   r   r   r
   r"   r#   r5   r   r$   r   ZKeyboardInterruptrB   ) r   r   <module>r      s    9 
 $   	 	 
 


 <  )/1d 0fM fMR8v z!V   ! !s   A& &A98A9