
    ȅi{E              	          S SK r S SKJr  S SKJrJr  S SKrS SKJr  S SK	J
r
  S SKJrJr  SSKJr  SS	KJr  SS
KJrJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  \(       a  S SK"J#r#  SSK$J%r%  S SK&J'r'  \RP                  r(S\S\S\)4S jr*S\+\   S\S\)4S jr,S\RZ                  SSSS4S jr.S\RZ                  S\)4S jr/S\)S\R`                  4S  jr1S\)S\Rd                  4S! jr3\'" S"S#S$9S%\)S&\)SS4S' j5       r4\4Rj                  S%\)S&\)SS4S( j5       r6\" \Rn                  Rp                  Rr                  Rt                  5        \'" S)S#S$9S%\)S&\)SS4S* j5       r;\;Rj                  S%\)S&\)SS4S+ j5       r6\" \Rn                  Rp                  Rx                  Rt                  5        \'" S,S#S$9S-\)S.\)SS4S/ j5       r=\=Rj                  S-\)S.\)SS4S0 j5       r6\" \Rn                  Rp                  Rz                  Rt                  5        \'" S1S#S$9S-\)S.\)SS4S2 j5       r>\>Rj                  S-\)S.\)SS4S3 j5       r6\" \Rn                  Rp                  R|                  Rt                  5        \'" S4S#S$9S5\)S6\)SS4S7 j5       r?\?Rj                  S-\)S.\)SS4S8 j5       r6\" \Rn                  Rp                  R~                  Rt                  5        \'" S9S#S$9S:\)S;\)S<\RP                  SS4S= j5       r@\" \Rn                  Rp                  R                  Rt                  5        \'" S>S#S$9S?\RP                  S.\)SS4S@ j5       rA\ARj                  S;\)S:\)S<\RP                  SS4SA j5       r6 " SB SC5      rB " SD SE\5      rC " SF SG\C5      rD " SH SI\5      rEg)J    N)Callable)AnyOptional)ConstDictVariable)TupleVariable)has_side_effectProxy   )graph_break_hints)create_call_function)TYPE_CHECKINGunimplemented)get_external_object_by_indexregister_graph_created_objectCurrentStreamSource   )VariableTracker)ConstantVariable)FxTracebackAnnotateVariable)LazyVariableTracker)InstructionTranslator)	PyCodegen)	custom_opargskwargsreturnc            	          [         R                  " U 0 UD6n[        U[        R	                  [        / 5      [        0 5      5      5      $ N)torchEventr   EventVariable make_construct_in_graph_event_fnr   r   )r   r   events      Y/home/james-whalen/.local/lib/python3.13/site-packages/torch/_dynamo/variables/streams.py	new_eventr&   #   sC    KK((E(66"04	
     c            	          [         R                  " U 0 UD6n[        U[        R	                  [        / 5      [        0 5      5      5      $ r   )r    Streamr   StreamVariable!make_construct_in_graph_stream_fnr   r   )r   r   streams      r%   
new_streamr-   -   sC    \\4*6*F(88"04	
 r'   devicecgr   c                    ^ TR                  U4S j5        T" [        U 5      5        TR                  [        SS5      5        g )Nc                  l   > T R                  [        R                  R                  R                  S5      $ Nstash_graph_created_objectload_import_fromr    _dynamograph_bytecode_inputs__name__)r/   s   r%   <lambda>)_codegen_current_stream.<locals>.<lambda>9   s&    ##MM//88(
r'   r   F)add_push_nullr   extend_outputr   )r.   r/   s    `r%   _codegen_current_streamr=   7   s<    	
 6"#)!U34r'   c                 b   ^  [         R                  R                  T 5      n[        UU 4S j5      $ )Nc                    > [        TU5      $ r   )r=   )_r/   r.   s     r%   r9   $get_current_stream.<locals>.<lambda>E   s    5fbAr'   )r    acceleratorcurrent_streamr   )r.   r,   s   ` r%   get_current_streamrD   B   s,    --f5F(A r'   indexc                 n    [        U 5      n[        U[        R                  5      (       d
   SU  35       eU$ )Nz3Fork/join stream expected a stream object at index )r   
isinstancer    r)   )rE   r,   s     r%   _get_stream_by_indexrH   I   s;    )%0Ffell++ 
=eWE+ Mr'   c                 n    [        U 5      n[        U[        R                  5      (       d
   SU  35       eU$ )Nz4Record/wait event expected an event object at index )r   rG   r    r!   )rE   r$   s     r%   _get_event_by_indexrJ   Q   s;    (/EeU[[)) 
>ugF) Lr'   zstreams::fork )mutates_args
from_indexto_indexc                 T    [         R                  R                  [        U5      5        g r   r    rB   
set_streamrH   rM   rN   s     r%   fork_streamrS   Y   s    
 
  !5h!?@r'   c                     g r   rK   rR   s     r%   r@   r@   a       
 	r'   zstreams::joinc                 T    [         R                  R                  [        U5      5        g r   rP   rR   s     r%   join_streamrW   l   s    	  !5h!?@r'   c                     g r   rK   rR   s     r%   r@   r@   q   rU   r'   zstreams::record_eventevent_indexstream_indexc                 R    [        U 5      n[        U5      nUR                  U5        g r   )rJ   rH   record_eventrY   rZ   r$   r,   s       r%   r\   r\   |   s$    ,E!,/F
r'   c                     g r   rK   rY   rZ   s     r%   r@   r@      rU   r'   zstreams::wait_eventc                 R    [        U 5      n[        U5      nUR                  U5        g r   )rJ   rH   
wait_eventr]   s       r%   ra   ra      s$    ,E!,/F
er'   c                     g r   rK   r_   s     r%   r@   r@      rU   r'   zstreams::wait_streamwaiting_stream_indexwaited_on_stream_indexc                 R    [        U 5      n[        U5      nUR                  U5        g r   )rH   wait_stream)rc   rd   waiting	waited_ons       r%   rf   rf      s&    "#78G$%;<I	"r'   c                     g r   rK   r_   s     r%   r@   r@      rU   r'   zstreams::sync_deallocwait_event_indexsrc_stream_index
to_deallocc                 j    [         R                  R                  R                  R	                  X5        g)au  An op which waits on an event and moves the last usage of to_dealloc
after the wait, so that after the sync occurs, the deallocation or
subsequent reuse of the tensor's memory will be guaranteed to happen
after a side stream is finished using it.
See https://docs.pytorch.org/docs/stable/generated/torch.Tensor.record_stream.html#torch.Tensor.record_stream
for more detailsN)r    opsstreamsra   default)rj   rk   rl   s      r%   sync_deallocrq      s#     
II  (()9Lr'   zstreams::record_streamtensorc                 8    U R                  [        U5      5        g r   )record_streamrH   )rr   rZ   s     r%   rt   rt      s    
-l;<r'   c                     g r   rK   )rk   rj   rl   s      r%   r@   r@      s     	r'   c                   t    \ rS rSrSrSS jrSS jrSS jrSS	\\	R                     SS4S
 jjrS\4S jrSrg)SymbolicStreamState   z)Track the currently entered stream if anyr   Nc                 P   SSK Jn  / n[        R                  R	                  5       (       a`  [
        R                  " [        R                  R                  5       U" [        R                  R                  5       R                  5      S9nU/n[        R                  " U5      U l        g )Nr
   r   )source)rz   r   r    rB   is_availabler   createrC   r.   collectionsdequecur_stream_stack)selfr   	cur_stack
stream_vars       r%   __init__SymbolicStreamState.__init__   s~    0*,	))++,33!!002*5+<+<+K+K+M+T+TUJ $ICNCTCTD
r'   r*   c                 :    U R                   R                  U5        g r   )r   append)r   r,   s     r%   enter_stream SymbolicStreamState.enter_stream   s    $$V,r'   c                 8    U R                   R                  5         g r   )r   popr   s    r%   exit_streamSymbolicStreamState.exit_stream   s    !!#r'   r.   c                     Ub0  [        U R                  5       H  nUR                  U:X  d  M  Us  $    U R                  S   $ )N)reversedr   r.   )r   r.   r,   s      r%   
cur_streamSymbolicStreamState.cur_stream   sA    "4#8#89==F*!M : $$R((r'   c                 2    [        U R                  5      S:  $ )Nr   )lenr   r   s    r%   in_stream_context%SymbolicStreamState.in_stream_context   s    4(()A--r'   )r   )r   N)r,   r*   r   Nr   )r8   
__module____qualname____firstlineno____doc__r   r   r   r   r    r.   r   boolr   __static_attributes__rK   r'   r%   rw   rw      s=    3
-$)%,,!7 )CS ).4 .r'   rw   c            	          ^  \ rS rSrSr\SSSSS\\\4   SS 4S	 j5       r	S
\
S   S\SS4U 4S jjrSSS\S\4U 4S jjrSSS\S\4U 4S jjrS\4S jrSS jrSrU =r$ )StreamContextVariable   z(This represents torch.cuda.StreamContexttxr   stream_to_enterr*   r   r   c                     [        U40 UD6$ r   )r   )r   r   r   s      r%   r|   StreamContextVariable.create   s     %

 	
r'   r,   Nc                 l   > Xl         [        TU ]  " SSU R                  5       R                  0S S.UD6  g )Nr,   )target_valuesinitial_valuesrK   )r,   superr   
get_streamuser_object_index)r   r,   r   	__class__s      r%   r   StreamContextVariable.__init__  s<     	
#T__%6%H%HI	
 	
r'   r   c                 t   > UR                   R                  U R                  5       5        [        TU ]  U5      $ r   )symbolic_stream_stater   r   r   enterr   r   r   r   s      r%   r   StreamContextVariable.enter
  s/    
 	  --doo.?@w}R  r'   c                 Z   > UR                   R                  5         [        TU ]  " U/UQ76 $ r   )r   r   r   exitr   s      r%   r   StreamContextVariable.exit  s+    
 	  ,,.w|B&&&r'   c                     g)NTrK   r   s    r%   supports_graph_breaks+StreamContextVariable.supports_graph_breaks  s    r'   c                 J    U R                   (       d   S5       eU R                   $ )Nz,Stream context should have a separate streamr,   r   s    r%   r    StreamContextVariable.get_stream  s    {{JJJ{{{r'   r   r   r*   )r8   r   r   r   r   staticmethoddictstrr   r|   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r%   r   r      s    2
#
)
 sCx.
 
!	
 

x(89 
S 
T 
!)!2A!	!')'2A'	't  r'   r   c                     ^  \ rS rSrSr SS\S\R                  S\\	   S\
SS4
U 4S	 jjjrS\4S
 jrSSS\S\\   S\\\4   S\4
U 4S jjrS\4S jrS\4S jrS\4S jrSS jrSS jr\S\S\S\\	S/S4   4S j5       rSrU =r$ )r*   i"  z1Represents the device-agnostic torch.Stream classNproxyvaluer   r   r   c                    > Ub9  SUR                   R                  ;   a  UR                   R                  S   U:X  d   eXl        X l        UR                  U l        X0l        [        TU ]  " S0 UD6  g )Nexample_valuer   )nodemetar   r   r.   r   r   r   r   r   r   r   r   r   s        r%   r   StreamVariable.__init__%  s`     EJJOO!C::???3u<<<

ll!2((r'   c                 "    [         R                  $ r   )r    r)   r   s    r%   python_typeStreamVariable.python_type9  s    ||r'   r   r   namer   c                   > [        U R                  U5      (       d
   SU 35       eSSKJnJn  SSKJn  US;   a4  UR                  R                  " SU/U" U /U-   U5      Q76   [        S 5      $ US:X  a3  U" [        UUR                  R                  " SU/U" U /U-   U5      Q76 S	9$ US
:X  a3  U" [        UUR                  R                  " SU/U" U /U-   U5      Q76 S	9$ X%;   Ga  [        U5      S:X  a  U(       d  SSKJnJn	  U R                  (       a+  U	" U R                  R!                  UR"                  5      5        US   n
[%        U
[&        5      (       d  [        R(                  " [*        5      $ U
R                  (       a:  U R                  c   eU	" U R                  R!                  UR"                  5      5        [        R(                  " XR   " U R                  U
R                  5      5      $ [,        TU ]]  XX45      $ )Nzno stream method found named r
   )cmp_name_to_op_mappingproxy_args_kwargsr   wrap_fx_proxy_cls)rf   synchronizera   call_methodquery
target_clsr   r   r\   )GuardBuilderinstall_guardr   )hasattrr   utilsr   r   builderr   outputcreate_proxyr   r"   r   guardsr   r   rz   
make_guardEQUALS_MATCHrG   r*   r|   NotImplementedr   r   )r   r   r   r   r   r   r   r   r   r   otherr   s              r%   r   StreamVariable.call_method<  s    tzz4((P,I$*PP(E.??II""t&7v&N $D))W_$+ii,,!4*;TFTM6*R  ^#$(ii,,!4*;TFTM6*R  +D	Qv<{{dkk44\5N5NOP GEe^44'..~>>||{{...dkk44\5N5NOP#**&,TZZE  w"2T::r'   c                     U R                   $ r   r   r   s    r%   as_proxyStreamVariable.as_proxyr      zzr'   c                     g)Nztorch._CrK   r   s    r%   module_nameStreamVariable.module_nameu  s    r'   c                     g)Nr)   rK   r   s    r%   fn_nameStreamVariable.fn_namex  s    r'   r   c                   ^ U R                   (       a   eU R                  b[  TR                  U4S j5        TR                  TR	                  U R                  5      5        TR                  [        SS5      5        g SU R                   3nTR                  R                  R                  X R                  5      nTR                  TR                  USS95        g )Nc                  l   > T R                  [        R                  R                  R                  S5      $ )Nr   r4   codegens   r%   r9   ,StreamVariable.reconstruct.<locals>.<lambda>  s&    00MM77@@2r'   r   F_stream_Tadd)rz   r   r;   append_outputcreate_load_constr<   r   r.   r   r   install_global_by_idr   create_load_globalr   r   prefixr   s    `  r%   reconstructStreamVariable.reconstruct{  s     ;;!!-!! !!'";";D<R<R"ST!!"6q%"@A  }-F::$$99&**MD!!'"<"<Tt"<"LMr'   c                     U $ r   rK   r   s    r%   r   StreamVariable.get_stream  s    r'   c                 0   ^ ^ S[         SSSS 4U U4S jjnU$ )NrE   r   r   r   c                    >^ TR                  U4S j5        TR                  U4S j5        T" T5        T" T5        TR                  [        SS5      5        TR                  [        SS5      5        g )Nc                  l   > T R                  [        R                  R                  R                  S5      $ r2   r4   r   s   r%   r9   NStreamVariable.make_construct_in_graph_stream_fn.<locals>.fn.<locals>.<lambda>  &    00MM77@@0r'   c                  l   > T R                  [        R                  R                  R                  S5      $ )Nbuild_streamr5   r    r6   r   r8   r   s   r%   r9   r    s%    00MM''00.r'   r
   Fr   r;   r<   r   rE   r   r   r   s    `r%   fn<StreamVariable.make_construct_in_graph_stream_fn.<locals>.fn  g    !! !!
 DMFO!!"6q%"@A!!"6q%"@Ar'   intr   r   r  s   `` r%   r+   0StreamVariable.make_construct_in_graph_stream_fn  .    	Bc 	BK 	BD 	B 	B" 	r'   )r.   r   r   r   r   r   r   r   Nr   )r8   r   r   r   r   r	   r    r)   r   r  r   r   typer   r   listr   r   r   r   r   r   r   r   r   r   r   r   r+   r   r   r   s   @r%   r*   r*   "  s   ; ,0	)) ||) $C=	)
 ) 
) )(T 4;#4; 4; ?#	4;
 S/)*4; 
4;l% S  N& %6	3$d*	+ r'   r*   c            
         ^  \ rS rSrS\S\R                  S\\   S\	SS4
U 4S jjr
S	S
S\S\\   S\\\4   S\4
S jrS\4S jr\S	S
S\\   S\\\4   SS4S j5       r\S\S\S\\S/S4   4S j5       rSS jrSrU =r$ )r"   i  r   r   r   r   r   Nc                    > Ub9  SUR                   R                  ;   a  UR                   R                  S   U:X  d   e[        TU ]  " S0 UD6  Xl        X l        X0l        g )Nr   rK   )r   r   r   r   r   r   r   r   s        r%   r   EventVariable.__init__  sU     EJJOO!C::???3u<<<"6"

!2r'   r   r   r   r   c                    SSK Jn  SSKJn  US:X  au  UR                  R                  S[        R                  R                  R                  U R                  [        R                  XU5      R                  40 5        [        S 5      $ US:X  au  UR                  R                  S[        R                  R                  R                  U R                  [        R                  XU5      R                  40 5        [        S 5      $ US:X  a4  UR                  R
                  " S	U/U" U /U-   U5      Q76   [        S 5      $ US
:X  a3  U" [        UUR                  R
                  " S	U/U" U /U-   U5      Q76 S9$ [        U R                   5      R"                   S[        U R                   5      R$                   SU 3n['        S[)        U5      SU S3/ [*        R,                  QS9  g )Nr
   )r   r   r   waitcall_functionrecordr   r   r   r   .zUnsupported event methodz#Dynamo doesn't support tracing the zC method. We currently support wait, record, synchronize, and query.)gb_typecontextexplanationhints)r   r   r   r   r   r   r    rn   ro   ra   r   r"   _get_stream_argr   r\   r  r   r   r   r   r   r   SUPPORTABLE)r   r   r   r   r   r   r   method_names           r%   r   EventVariable.call_method  s    	..6>II""		!!,,**!11"FCUU  $D))XII""		!!..**!11"FCUU  $D))]"II""t&7v&N $D))W_$+ii,,!4*;TFTM6*R  

#../qdjj1A1N1N0OqQUPVW  2D	A+ OM N&22r'   c                     U R                   $ r   r   r   s    r%   r   EventVariable.as_proxy  r   r'   r*   c                     S nU(       a  US   nOU(       a  UR                  S5      nU(       d  U R                  R                  5       nU$ )Nr   r,   )getr   r   )r   r   r   
stream_args       r%   r"  EventVariable._get_stream_arg  sC     
aJH-J11<<>Jr'   r   c                 0   ^ ^ S[         SSSS 4U U4S jjnU$ )NrE   r   r   r   c                    >^ TR                  U4S j5        TR                  U4S j5        T" T5        T" T5        TR                  [        SS5      5        TR                  [        SS5      5        g )Nc                  l   > T R                  [        R                  R                  R                  S5      $ r2   r4   r   s   r%   r9   LEventVariable.make_construct_in_graph_event_fn.<locals>.fn.<locals>.<lambda>  r  r'   c                  l   > T R                  [        R                  R                  R                  S5      $ )Nbuild_eventr  r   s   r%   r9   r/    s%    00MM''00-r'   r
   Fr   r	  r
  s    `r%   r  :EventVariable.make_construct_in_graph_event_fn.<locals>.fn  r  r'   r  r  s   `` r%   r#   .EventVariable.make_construct_in_graph_event_fn  r  r'   c                     U R                   (       a   eSnUR                  R                  R                  X R                  5      nUR                  UR                  USS95        g )N_eventTr   )rz   r   r   r   r   r   r   r   s       r%   r   EventVariable.reconstruct  sQ     ;;zz  55fjjIg8848HIr'   )r   r   r   r  )r8   r   r   r   r	   r    r!   r   r  r   r   r   r  r   r   r   r   r   r"  r   r   r   r#   r   r   r   r   s   @r%   r"   r"     s   33 {{3 $C=	3
 3 
39#9 9 ?#	9
 S/)*9 
9v%  #?# S/)* 
	   %6	3$d*	+ ,J Jr'   r"   )Fr}   collections.abcr   typingr   r   r    torch._dynamo.variables.dictsr   torch._dynamo.variables.listsr   torch.fxr   r	    r   bytecode_transformationr   excr   r   r7   r   r   rz   r   baser   constantr   ctx_managerr   lazyr   torch._dynamo.symbolic_convertr   r   r   torch._library.custom_opsr   Tensorr  r&   tupler-   r.   r=   rD   r)   rH   r!   rJ   rS   register_faker@   rn   ro   forkrp   rW   joinr\   ra   rf   rq   rt   rw   r   r*   r"   rK   r'   r%   <module>rJ     s    $    ; 7 +   : . ) ! & 4 % D# / 
S C C eCj C C 5ELL 5k 5d 5u||    s u{{  ?,AAA 
A -A 			 
	 	 		!!&&.. / ?,AC A3 A4 A -A 			 
	 	 		!!&&.. / "4c    5 			 
	 	 		!!..66 7  r2C s t  3 			 
	 	 		!!,,44 5 !3#c #3 #4 # 4# 			 
	 	 		!!--55 6 "4	M	M-0	M>Cll	M		M 5	M 		!!..66 7 #"5=%,, =c =d = 6= 			 	 
		 	!. !.H+7 +\D* DN|JO |Jr'   