
    ^hg=                        % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJr  S SKJrJrJr  S SKJrJr  S SKJrJrJrJrJrJrJr  S SKJr  S S	KJr  \(       a  S S
K J!r!  \RD                  " \#5      r$\" \RJ                  RL                  5      r'\" \RJ                  RP                  5      r)Sr*S\+S'   SSS.S jjr,S r- " S S\5      r. " S S\5      r/S\S   S\4S jr0\	S\S   S\S   4S j5       r1g)    N)contextmanager)MetaPathFinder)SourceFileLoader)decode_source	find_specspec_from_loader)CodeType
ModuleType)TYPE_CHECKINGCallableDict	GeneratorListOptionalTuple)
TraceEvent)clone_function)
BaseTracerTraceLoader_pyccolo_loaderoptimizationc                    U R                  SS5      u  p4[        R                  U 5      nUS:X  a
  [        XUS9$ [        U SU SU 3UUS9$ )N.   pyccolodebug_overrider   )rsplitr   make_cache_signatureorig_cache_from_source)pathr   r   path_no_extextsigs         N/home/james-whalen/.local/lib/python3.13/site-packages/pyccolo/import_hooks.pypyccolo_cache_from_sourcer'       sh    {{3*K

.
.t
4C
i%l
 	
 "-qQse$%!     c                     U R                  S5      n[        U5      S:  a<  US   R                  S5      (       a#  [        SR	                  US S USS  -   5      5      $ [        U 5      $ )Nr      r   )splitlen
startswithorig_source_from_cachejoin)r"   partss     r&   pyccolo_source_from_cacher3   /   s^    JJsOE
5zQ59//	::%chhuSbzE"#J/F&GHH%d++r(   c                   B  ^  \ rS rSrS\S   SS4U 4S jjrS\S\S   4S jrS\S\4S	 jr\	S
 5       r
\	S\S   4S j5       rS\S\4U 4S jjrSS\\   S\4U 4S jjjrS\\   4U 4S jjrS\4U 4S jjrSS.S\4U 4S jjjr SSS.S jjrS\SS4U 4S jjrSrU =r$ )r   7   tracersr   returnNc                    > [         TU ]  " U0 UD6  Xl        US   R                  S S9U l        / U l        U H8  nU R
                  R                  XDR                  U R                  5      45        M:     SU l        g )N)r"   F)	super__init___tracersmake_ast_rewriter_ast_rewriter_syntax_augmentersappendmake_syntax_augmenters_augmentation_context)selfr6   argskwargstracer	__class__s        r&   r;   TraceLoader.__init__8   s{    $)&)$R[:::EMOF##**66t7I7IJK  ,1"r(   r"   c                 v    U R                    Vs/ s H  nUR                  U5      (       d  M  UPM     sn$ s  snf N)r<   _should_instrument_file_impl)rC   r"   rF   s      r&   get_tracers_for_path TraceLoader.get_tracers_for_pathC   s;     --
'2248 '
 	
 
s   66c                 D   0 n/ nU R                    H  nUR                  (       d    gUR                  U5      (       d  M.  UR                  nUR	                  UR
                  5        UR                  R                  S5      S   n[        [        R                  R                  U5      SS 5      n[        U[        [        45      (       d  M  [        U5      X&'   M     SR                  S/[!        S UR#                  5        5       5      -   U-   5      R%                  SS5      $ )Nr   r   r   __version__-c              3   D   #    U  H  nS R                  U5      v   M     g7f)rP   N)r1   ).0vs     r&   	<genexpr>3TraceLoader.make_cache_signature.<locals>.<genexpr>Z   s     ?*>QSXXa[[*>s    _)r<   bytecode_caching_allowedshould_instrument_filerG   r@   __name__
__module__r-   getattrsysmodulesget
isinstanceintstrr1   sorteditemsreplace)rC   r"   version_dictsuffix_partsrF   
tracer_clspkgpkg_versions           r&   r     TraceLoader.make_cache_signatureJ   s    ')mmF22 22488))J
 3 34''--c215C!#++//#"6tLK+Sz22$'$4! $ xxK?,*<*<*>??@
 '#s
		r(   c              #   ^   #    U R                   n SU l         S v   Xl         g ! Xl         f = f7f)NT)rB   )rC   orig_aug_contexts     r&   syntax_augmentation_context'TraceLoader.syntax_augmentation_context^   s.     55	:)-D&)9&)9&s   -" -*-NNNc              #   $  #    [         R                  R                  R                  n[         R                  R                  R                  n [
        R                  [         R                  R                  l        [        R                  [         R                  R                  l        [        US'   [        US'   U =US'   US'   S v   [        R                  [         R                  R                  l        [        R                  [         R                  R                  l        UR                  SS 5        UR                  SS 5        UR                  SS 5        UR                  SS 5        g ! [        R                  [         R                  R                  l        [        R                  [         R                  R                  l        UR                  SS 5        UR                  SS 5        UR                  SS 5        UR                  SS 5        f = f7f)Nr!   r0   r   )	importlibutilcache_from_source__globals__source_from_cacher'   __code__r3   r!   r0   pop)rC   cfs_globalssfc_globalss      r&   patch_cache_handlers TraceLoader.patch_cache_handlersg   sz    nn66BBnn66BB	5)22 NN,,5 *22 NN,,5 5KK014JK01NRRK)*[9J-K8N8W8WINN,,58N8W8WINN,,5OO4d;OO4d;OO-t4OO-t4 9O8W8WINN,,58N8W8WINN,,5OO4d;OO4d;OO-t4OO-t4s!   A	HA:E) B#H)B$HHc                   >^	 [         R                  R                  U5      u  p#[         R                  R                  nX4S-   :X  a  [	        S U R
                   5       5      nUR                  U5      nU(       a  [        U5      S:  a  [        T
U ]%  U5      $ [        U5      nU(       a)  U R                  U5      US   S4;   a  [        T
U ]%  U5      $ Un[        U5      m	U R                  (       d$  [        U	4S jU R
                   5       5      (       d  [        T
U ]%  U5      $ U R                  5          U R!                  U5      n[#        USS9sS S S 5        $ ! , (       d  f       g = f)	Npycc              3   8   #    U  H  oR                   v   M     g 7frJ   rW   rR   rF   s     r&   rT   'TraceLoader.get_data.<locals>.<genexpr>   s      +>KF//m   r*   r+   r   c              3   D   >#    U  H  oR                  T5      v   M     g 7frJ   )rK   )rR   rF   path_strs     r&   rT   r      s       1
HUf//99s    utf-8encoding)osr"   splitextextsepallr<   r-   r.   r:   get_datar3   r    ra   rB   anyrm   get_augmented_sourcebytes)rC   r"   r#   r$   seprW   r2   source_pathsourcer   rG   s            @r&   r   TraceLoader.get_data~   s2   77++D1ggnn+'* +>Bmm+ ($ JJsOE'CJNw'--3D9K'D,E,Ek,Rb	W - w'--Dt9%%S 1
HL1
 .
 .
 7#D))--/..t4F'2 0//s   4E
E'namec           	         > [         TU ]  U5      n[        U R                  5       HA  nUR	                  [
        R                  R                  S [        R                  " 5       UUS9nMC     U$ )N)retqualified_module_name)
r:   get_filenamereversedr<   _emit_eventr   before_importvaluer\   	_getframe)rC   r   r   rF   rG   s       r&   r   TraceLoader.get_filename   sc    g*40t}}-F ,,((..&* - K . r(   c                    > [        S U R                   5       5      (       a)  U R                  5          [        TU ]  U5      sS S S 5        $ U R                  U5      nU R                  U5      nU R                  X25      $ ! , (       d  f       g = f)Nc              3   8   #    U  H  oR                   v   M     g 7frJ   r   r   s     r&   rT   'TraceLoader.get_code.<locals>.<genexpr>   s     K]6..]r   )r   r<   rz   r:   get_coder   r   source_to_code)rC   fullnamer   source_bytesrG   s       r&   r   TraceLoader.get_code   ss    KT]]KKK**,w'1 -, ++H5K==5L&&|AA -,s   A??
Bc                 @  > [         T	U ]  U5      nSn [        U5      nSn[	        U5      nU R
                   H.  u  pgUR                  U5      (       d  M  U H  nU" U5      nM     M0     U(       a  [        [        USS95      nU$ ! [         a    [	        USS9n N{f = f)NTFr   r   )r:   r   r   SyntaxErrorra   r?   rK   r   )
rC   r   r   still_needs_decoder   source_path_strrF   
augmenters	augmenterrG   s
            r&   r    TraceLoader.get_augmented_source   s    w'4!	9"<0F!& k*"&"9"9F66GG'	"6* ( #:
 "5'#BCF%  		9 8F		9s   B BBr9   	_optimizec          	        > [        U5      n U R                  U5      nU(       a_  U R                  R                  XT5         [	        U R                  R                  [        R                  " U5      5      USSUS9sS S S 5        $ [        TU ]%  XUS9$ ! , (       d  f       g = f! [         a'    [        R                  SU5        [        TU ]%  XUS9s $ f = f)NexecT)dont_inheritoptimizer   z+exception during source to code for path %s)ra   rL   r>   tracer_override_contextcompilevisitastparser:   r   	Exceptionlogger	exception)rC   datar"   r   r   tracers_for_pathrG   s         r&   r   TraceLoader.source_to_code   s    t9	K#88B''??$ #**004A%)!*  w-dI-NN   	KJDQ7)$	)JJ	Ks5   3B$ :B;	B$ B$ 
B!B$ !B$ $.CCr   c                    U R                  5          [        R                  R                  XUS9sS S S 5        $ ! , (       d  f       g = f)Nr   )rz   rq   rr   rs   )rC   r"   r   r   s       r&   _pyccolo_cache_from_source&TraceLoader._pyccolo_cache_from_source   s8     &&(>>33, 4  )((s	   9
Amodulec                   > [        U R                  UR                  5      5      n/ nSnS nSn[        U R                  5       H|  nSnUR                  U5      (       a+  UR                  =(       a    UnU=(       d    UR                  nOUR                  nUR                  U5        U(       d  Ml  UR                  5         M~     U=(       a    UnS nU(       aE  U R                  U5      n	[        R                  R                  U	5      S   S-   nU R                  S   nUS L=(       a    [        R                  R                  U5      n
Ub  Ub  U
(       a  X%R                   ;  d   e[#        US5       n[$        R&                  " U5      R)                  [+        U5      5      u  pS S S 5        UR-                  W[+        U5      5        WUR.                  U'   UR1                  5         [2        TU ]i  U5        UbC  Ub@  U
(       d9  [#        US5       n[$        R6                  " UR                   U   U5        S S S 5        [9        U R                  U5       H[  u  p^UR;                  [<        R>                  R@                  S [B        RD                  " 5       US9  U(       d  MK  URG                  5         M]     g ! , (       d  f       GN= f! , (       d  f       N= f)	NFTr   z.pklr9   rbwb)r   )$ra   r   rY   r   r<   rK   rW   requires_ast_bookkeeping_is_tracing_enabledr@   _disable_tracingr   r   r"   r   existsast_bookkeeper_by_fnameopenpickleloadremapidadd_bookkeepingnode_id_remapping_by_fnamereverser:   exec_moduledumpzipr   r   after_importr   r\   r   _enable_tracing)rC   r   r   should_reenable_saved_stateenforce_pickled_bookkeepingrF   rW   should_disablepickle_path
cache_pathpickle_path_existsfnew_bookkeeping	remappingshould_reenablerG   s                  r&   r   TraceLoader.exec_module   sV   $++FOO<=&(#&+##' t}}-F"N22;??33P8P ) 0R63R3R , "(!;!;'..~>~'') . (D,D 	$ &88EJ''**:6q9FBK]]2&F(4T9T"v'9>P&D&DDDDk4(A-3[[^-A-A"V*-M* )""?BvJ?=FF--k:#++-F#"v'9BTk4(AF::;GK )'*4==:U'V#F''--tS]]_V   &&( (W )( )(s   01J.%K .
J= 
K)r>   rB   r?   r<   rJ   )rY   rZ   __qualname____firstlineno__r   r;   ra   rL   r    r   rm   r   rz   r   r   r   r   r	   r   r   r   r   r
   r   __static_attributes____classcell__)rG   s   @r&   r   r   7   s   	1\ 2 	1 	1
 
l1C 
  ( : : 5i0@&A 5 5,3S 3U 34
# 
# 
 
BHX$6 B3 4 79 KX K K, $(9=.)* .) .) .)r(   c                   L    \ rS rSrS
S jr\S\S   4S j5       rS rSS jr	S	r
g)TraceFinderi  r7   Nc                 D    Xl         [        R                  " 5       U l        g rJ   )r6   	threadingcurrent_thread_thread)rC   r6   s     r&   r;   TraceFinder.__init__  s     //1r(   ro   c              #      #    [         R                  n [         R                  [         R                  R                  U 5      S-   S [         l        Sv   U[         l        g! U[         l        f = f7f)zN
Clear all preceding finders from sys.meta_path, and restore them afterwards.
r   N)r\   	meta_pathindex)rC   orig_finderss     r&   _clear_preceding_finders$TraceFinder._clear_preceding_finders  sM     
 }}	)MM#--*=*=d*Ca*G*IJCM(CMLCMs   A0A A  A0 A--A0c                 *   SnSn[         R                   H{  nX`L a  SnM  U(       a  SUR                  ;   a  M$  [        US5      (       a  UR	                  XUS9nO[        US5      (       a  [        X5      nUc  Mg  UR                  S:w  d  My  Us  $    g)	zJTry to find the original module using all the
remaining meta_path finders.NFTpytestr   )targetload_modulebuiltin)r\   r   rZ   hasattrr   r   origin)rC   r   r"   r   spec	self_seenfinders          r&   _find_plain_specTraceFinder._find_plain_spec(  s     	mmF~ 	(f.?.?"?
 v{++''v'F//'9DKK9$<! $r(   c                    [         R                  " 5       U R                  La  g Uc%  U R                  5          [	        X5      nS S S 5        OU R                  XU5      nWb?  [        UR                  S5      (       a$  [        UR                  R                  5      (       d  US:w  a  [        R                  SU5        g [        UR                  [        5      (       d  g UR                  R                  U5      n/ nU R                   H  nUR!                  U5      (       d`  UR#                  [$        R&                  R(                  U5      (       d1  UR#                  [$        R*                  R(                  U5      (       d  My  UR-                  U5        M     [/        U5      S:X  a  g [1        XdR                  R2                  UR                  R4                  5      Ul        U$ ! , (       d  f       GN= f)N
get_sourceorgzFailed finding spec for %sr   )r   r   r   r   r   r   r   loadercallabler  r   debugr_   r   r   r6   rK   _file_passes_filter_implr   r   r   r   r@   r.   r   r   r"   )rC   r   r"   r   r   r   tracers_to_userF   s           r&   r   TraceFinder.find_spec?  s   ##%T\\9>..0 0 10 ((@D<DKK..8DKK<R<R3S3S5  98D$++'788kk..x8llF33K@@22,,22K  22++11;  %%f- # ~!#!.++2B2BDKKDTDTUA 10s   G
G.)r   r6   )r7   N)NN)rY   rZ   r   r   r;   r   r   r   r   r   r    r(   r&   r   r     s2    2 	))4D*E 	) 	).$r(   r   r6   r   r7   c                 R  ^ S mU4S jn[        [        R                  5      S:  aW  [        [        R                  S   [        5      (       a1  [        R                  S   m[	        U 5      [        R                  S'   U$ [        R                  R                  S[	        U 5      5        U$ )Nc                  V   > T c  [         R                  S	 g T [         R                  S'   g )Nr   )r\   r   )orig_meta_path_entrys   r&   cleanup_callback5patch_meta_path_non_context.<locals>.cleanup_callbacki  s#    'a 3CMM!r(   r   )r.   r\   r   r_   r   insert)r6   r  r  s     @r&   patch_meta_path_non_contextr  f  s    4 3==A*S]]1-={"K"K"}}Q/&w/a  	QG 45r(   ro   c              #   f   #    S n [        U 5      nS v   Ub  U" 5         g g ! Ub  U" 5         f f = f7frJ   )r  )r6   r  s     r&   patch_meta_pathr  w  sA     6w?' (' (s   1! 1.1rJ   )2r   importlib.utilrq   loggingr   r   r\   r   
contextlibr   importlib.abcr   importlib.machineryr   r   r   r   typesr	   r
   typingr   r   r   r   r   r   r   pyccolo.trace_eventsr   pyccolo.utilsr   pyccolo.tracerr   	getLoggerrY   r   rr   rs   r!   ru   r0   r   __annotations__r'   r3   r   r   r  r  r	  r(   r&   <module>r     s    
   	  
  % ( 0 E E & R R R + ()			8	$ (	(H(HI '	(H(HI  "& % ,[)" [)@L. L^l);  " T,/ I>N4O  r(   