
    iE              	          d dl Z d dlmZ d dlmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! erd dl"m#Z# ddl$m%Z% d dl&m'Z' ejP                  Z(dedede)fdZ*de+e   dede)fdZ,dejZ                  ddddfdZ.dejZ                  de)fdZ/de)dej`                  fd Z1de)dejd                  fd!Z3 e'd"d#$      d%e)d&e)ddfd'       Z4e4jj                  d%e)d&e)ddfd(       Z6 eejn                  jp                  jr                  jt                          e'd)d#$      d%e)d&e)ddfd*       Z;e;jj                  d%e)d&e)ddfd+       Z6 eejn                  jp                  jx                  jt                          e'd,d#$      d-e)d.e)ddfd/       Z=e=jj                  d-e)d.e)ddfd0       Z6 eejn                  jp                  jz                  jt                          e'd1d#$      d-e)d.e)ddfd2       Z>e>jj                  d-e)d.e)ddfd3       Z6 eejn                  jp                  j|                  jt                          e'd4d#$      d5e)d6e)ddfd7       Z?e?jj                  d-e)d.e)ddfd8       Z6 eejn                  jp                  j~                  jt                          e'd9d#$      d:e)d;e)d<ejP                  ddfd=       Z@ eejn                  jp                  j                  jt                          e'd>d#$      d?ejP                  d.e)ddfd@       ZAeAjj                  d;e)d:e)d<ejP                  ddfdA       Z6 G dB dC      ZB G dD dEe      ZC G dF dGeC      ZD G dH dIe      ZEy)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            	          t        j                  | i |}t        |t        j	                  t        g       t        i                   S N)torchEventr   EventVariable make_construct_in_graph_event_fnr   r   )r   r   events      Y/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/variables/streams.py	new_eventr&   #   sC    KK((E(66"04	
     c            	          t        j                  | i |}t        |t        j	                  t        g       t        i                   S 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                     j                  fd        t        |              j                  t        dd             y )Nc                  l     j                  t        j                  j                  j                  d      S Nstash_graph_created_objectload_import_fromr    _dynamograph_bytecode_inputs__name__)r/   s   r%   <lambda>z)_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                 `     t         j                  j                         }t        | fd      S )Nc                     t        |      S r   )r<   )_r/   r.   s     r%   r9   z$get_current_stream.<locals>.<lambda>E   s    5fbA r'   )r    acceleratorcurrent_streamr   )r.   r,   s   ` r%   get_current_streamrB   B   s,    --f5F(A r'   indexc                 d    t        |       }t        |t        j                        s
J d|         |S )Nz3Fork/join stream expected a stream object at index )r   
isinstancer    r)   )rC   r,   s     r%   _get_stream_by_indexrF   I   s8    )%0Ffell+ 
=eWE+ Mr'   c                 d    t        |       }t        |t        j                        s
J d|         |S )Nz4Record/wait event expected an event object at index )r   rE   r    r!   )rC   r$   s     r%   _get_event_by_indexrH   Q   s8    (/EeU[[) 
>ugF) Lr'   zstreams::fork )mutates_args
from_indexto_indexc                 T    t         j                  j                  t        |             y r   r    r@   
set_streamrF   rK   rL   s     r%   fork_streamrQ   Y   s    
 
  !5h!?@r'   c                      y r   rI   rP   s     r%   r?   r?   a       
 	r'   zstreams::joinc                 T    t         j                  j                  t        |             y r   rN   rP   s     r%   join_streamrU   l   s    	  !5h!?@r'   c                      y r   rI   rP   s     r%   r?   r?   q   rS   r'   zstreams::record_eventevent_indexstream_indexc                 R    t        |       }t        |      }|j                  |       y r   )rH   rF   record_eventrW   rX   r$   r,   s       r%   rZ   rZ   |   s$    ,E!,/F
r'   c                      y r   rI   rW   rX   s     r%   r?   r?      rS   r'   zstreams::wait_eventc                 R    t        |       }t        |      }|j                  |       y r   )rH   rF   
wait_eventr[   s       r%   r_   r_      s$    ,E!,/F
er'   c                      y r   rI   r]   s     r%   r?   r?      rS   r'   zstreams::wait_streamwaiting_stream_indexwaited_on_stream_indexc                 R    t        |       }t        |      }|j                  |       y r   )rF   wait_stream)ra   rb   waiting	waited_ons       r%   rd   rd      s&    "#78G$%;<I	"r'   c                      y r   rI   r]   s     r%   r?   r?      rS   r'   zstreams::sync_deallocwait_event_indexsrc_stream_index
to_deallocc                 l    t         j                  j                  j                  j	                  | |       y)a  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streamsr_   default)rh   ri   rj   s      r%   sync_deallocro      s&     
II  (()9;KLr'   zstreams::record_streamtensorc                 8    | j                  t        |             y r   )record_streamrF   )rp   rX   s     r%   rr   rr      s    
-l;<r'   c                      y r   rI   )ri   rh   rj   s      r%   r?   r?      s     	r'   c                   `    e Zd ZdZddZddZddZddeej                     ddfd	Z
defd
Zy)SymbolicStreamStatez)Track the currently entered stream if anyr   Nc                 H   ddl m} g }t        j                  j	                         rbt        j                  t        j                  j                          |t        j                  j                         j                              }|g}t        j                  |      | _        y )Nr
   r   )source)rw   r   r    r@   is_availabler   createrA   r.   collectionsdequecur_stream_stack)selfr   	cur_stack
stream_vars       r%   __init__zSymbolicStreamState.__init__   s{    0*,	))+,33!!002*5+<+<+K+K+M+T+TUJ $ICNCTCTD
r'   r*   c                 :    | j                   j                  |       y r   )r|   append)r}   r,   s     r%   enter_streamz SymbolicStreamState.enter_stream   s    $$V,r'   c                 8    | j                   j                          y r   )r|   popr}   s    r%   exit_streamzSymbolicStreamState.exit_stream   s    !!#r'   r.   c                 ~    |-t        | j                        D ]  }|j                  |k(  s|c S  | j                  d   S )N)reversedr|   r.   )r}   r.   r,   s      r%   
cur_streamzSymbolicStreamState.cur_stream   sF    "4#8#89 "==F*!M" $$R((r'   c                 2    t        | j                        dkD  S )Nr   )lenr|   r   s    r%   in_stream_contextz%SymbolicStreamState.in_stream_context   s    4(()A--r'   )r   N)r,   r*   r   Nr   )r8   
__module____qualname____doc__r   r   r   r   r    r.   r   boolr   rI   r'   r%   ru   ru      s=    3
-$)%,,!7 )CS ).4 .r'   ru   c            	            e Zd ZdZedddddeeef   dd fd       Zd	e	d   dedd
f fdZ
dddedef fdZdddedef fdZdefdZddZ xZS )StreamContextVariablez(This represents torch.cuda.StreamContexttxr   stream_to_enterr*   r   r   c                     t        |fi |S r   )r   )r   r   r   s      r%   ry   zStreamContextVariable.create   s     %

 	
r'   r,   Nc                 l    || _         t        |   dd| j                         j                  id d| y )Nr,   )target_valuesinitial_valuesrI   )r,   superr   
get_streamuser_object_index)r}   r,   r   	__class__s      r%   r   zStreamContextVariable.__init__  s>     	
#T__%6%H%HI	
 	
r'   r   c                 t    |j                   j                  | j                                t        |   |      S r   )symbolic_stream_stater   r   r   enterr}   r   r   r   s      r%   r   zStreamContextVariable.enter
  s/    
 	  --doo.?@w}R  r'   c                 X    |j                   j                          t        |   |g| S r   )r   r   r   exitr   s      r%   r   zStreamContextVariable.exit  s+    
 	  ,,.w|B&&&r'   c                      y)NTrI   r   s    r%   supports_graph_breaksz+StreamContextVariable.supports_graph_breaks  s    r'   c                 @    | j                   sJ d       | j                   S )Nz,Stream context should have a separate stream)r,   r   s    r%   r   z StreamContextVariable.get_stream  s    {{JJJ{{{r'   r   r*   )r8   r   r   r   staticmethoddictstrr   ry   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                        e Zd ZdZ	 ddedej                  dee   de	ddf
 fdZ
defd	Zd
ddedee   deeef   def
 fdZdefdZdefdZdefdZddZddZedededeedgdf   fd       Z xZS )r*   z1Represents the device-agnostic torch.Stream classNproxyvaluer   r   r   c                     |6d|j                   j                  v r|j                   j                  d   |k(  sJ || _        || _        |j                  | _        || _        t        |   di | y )Nexample_valuer   )nodemetar   r   r.   r   r   r   r}   r   r   r   r   r   s        r%   r   zStreamVariable.__init__%  sf     EJJOO!C::???3u<<<

ll!2((r'   c                 "    t         j                  S r   )r    r)   r   s    r%   python_typezStreamVariable.python_type9  s    ||r'   r   r   namer   c                    t        | j                  |      s
J d|        ddlm}m} ddlm} |dv r4 |j                  j                  d|g || g|z   |        t        d       S |dk(  r6 |t        | |j                  j                  d|g || g|z   |       	      S |d
k(  r6 |t        | |j                  j                  d|g || g|z   |       	      S ||v rt        |      dk(  r|sddlm}m}	 | j                  r+ |	| j                  j!                  |j"                               |d   }
t%        |
t&              st        j(                  t*              S |
j                  r9| j                  J  |	| j                  j!                  |j"                               t        j(                   ||   | j                  |
j                              S t,        | ]  ||||      S )Nzno stream method found named r
   )cmp_name_to_op_mappingproxy_args_kwargsr   wrap_fx_proxy_cls)rd   synchronizer_   call_methodquery
target_clsr   r   rZ   )GuardBuilderinstall_guardr   )hasattrr   utilsr   r   builderr   outputcreate_proxyr   r"   r   guardsr   r   rw   
make_guardEQUALS_MATCHrE   r*   ry   NotImplementedr   r   )r}   r   r   r   r   r   r   r   r   r   otherr   s              r%   r   zStreamVariable.call_method<  s    tzz4(P,I$*PP(E.??"BII""t&7v&N $D))W_$+,bii,,!4*;TFTM6*R  ^#$(,bii,,!4*;TFTM6*R  ++D	Qv<{{dkk44\5N5NOP GEe^4'..~>>||{{...dkk44\5N5NOP#**,&t,TZZE  w"2tT6::r'   c                     | j                   S r   r   r   s    r%   as_proxyzStreamVariable.as_proxyr      zzr'   c                      y)Nztorch._CrI   r   s    r%   module_namezStreamVariable.module_nameu  s    r'   c                      y)Nr)   rI   r   s    r%   fn_namezStreamVariable.fn_namex  s    r'   r   c                    | j                   rJ | j                  Zj                  fd       j                  j	                  | j                               j                  t        dd             y d| j                   }j                  j                  j                  || j                        }j                  j                  |d             y )Nc                  l     j                  t        j                  j                  j                  d      S )Nr   r4   codegens   r%   r9   z,StreamVariable.reconstruct.<locals>.<lambda>  s(    00MM77@@2 r'   r   F_stream_Tadd)rw   r   r:   append_outputcreate_load_constr;   r   r.   r   r   install_global_by_idr   create_load_globalr}   r   prefixr   s    `  r%   reconstructzStreamVariable.reconstruct{  s     ;;!!-!! !!'";";D<R<R"ST!!"6q%"@A  }-F::$$99&$**MD!!'"<"<Tt"<"LMr'   c                     | S r   rI   r   s    r%   r   zStreamVariable.get_stream  s    r'   c                 ,     dt         dddd f fd}|S )NrC   r   r   r   c                     j                  fd       j                  fd                       j                  t        dd             j                  t        dd             y )Nc                  l     j                  t        j                  j                  j                  d      S r2   r4   r   s   r%   r9   zNStreamVariable.make_construct_in_graph_stream_fn.<locals>.fn.<locals>.<lambda>  (    00MM77@@0 r'   c                  l     j                  t        j                  j                  j                  d      S )Nbuild_streamr5   r    r6   r   r8   r   s   r%   r9   zNStreamVariable.make_construct_in_graph_stream_fn.<locals>.fn.<locals>.<lambda>  s'    00MM''00. r'   r
   Fr   r:   r;   r   rC   r   r   r   s    `r%   fnz<StreamVariable.make_construct_in_graph_stream_fn.<locals>.fn  g    !! !!
 DMFO!!"6q%"@A!!"6q%"@Ar'   intr   r   r   s   `` r%   r+   z0StreamVariable.make_construct_in_graph_stream_fn  (    	Bc 	BK 	BD 	B" 	r'   r   r   r   r   Nr   )r8   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   s   @r%   r*   r*   "  s   ; ,0	)) ||) $C=	)
 ) 
)(T 4;#4; 4; ?#	4;
 S/)*4; 
4;l% S  N& %6	3$d*	+ r'   r*   c            
            e Zd Zdedej
                  dee   deddf
 fdZ	dd	d
e
dee   dee
ef   def
dZdefdZedd	dee   dee
ef   ddfd       Zedededeedgdf   fd       ZddZ xZS )r"   r   r   r   r   r   Nc                     |6d|j                   j                  v r|j                   j                  d   |k(  sJ t        |   di | || _        || _        || _        y )Nr   rI   )r   r   r   r   r   r   r   r   s        r%   r   zEventVariable.__init__  s[     EJJOO!C::???3u<<<"6"

!2r'   r   r   r   r   c                    ddl m} ddlm} |dk(  rv|j                  j                  dt        j                  j                  j                  | j                  t        j                  |||      j                  fi        t        d       S |dk(  rv|j                  j                  dt        j                  j                  j                  | j                  t        j                  |||      j                  fi        t        d       S |dk(  r4 |j                  j
                  d	|g || g|z   |        t        d       S |d
k(  r6 |t        | |j                  j
                  d	|g || g|z   |             S t        | j                         j"                   dt        | j                         j$                   d| }t'        dt)        |      d| dg t*        j,                         y )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    rl   rm   r_   r   r"   _get_stream_argr   rZ   r   r   r   r   r   r   r   SUPPORTABLE)r}   r   r   r   r   r   r   method_names           r%   r   zEventVariable.call_method  s    	..6>II""		!!,,**!11"dFCUU  $D))XII""		!!..**!11"dFCUU  $D))]""BII""t&7v&N $D))W_$+,bii,,!4*;TFTM6*R  

#../qdjj1A1N1N0OqQUPVW  2D	A+ OM N&22r'   c                     | j                   S r   r   r   s    r%   r   zEventVariable.as_proxy  r   r'   r*   c                 x    d }|r|d   }n|r|j                  d      }|s| j                  j                         }|S )Nr   r,   )getr   r   )r   r   r   
stream_args       r%   r  zEventVariable._get_stream_arg  sC     
aJH-J11<<>Jr'   r   c                 ,     dt         dddd f fd}|S )NrC   r   r   r   c                     j                  fd       j                  fd                       j                  t        dd             j                  t        dd             y )Nc                  l     j                  t        j                  j                  j                  d      S r2   r4   r   s   r%   r9   zLEventVariable.make_construct_in_graph_event_fn.<locals>.fn.<locals>.<lambda>  r   r'   c                  l     j                  t        j                  j                  j                  d      S )Nbuild_eventr   r   s   r%   r9   zLEventVariable.make_construct_in_graph_event_fn.<locals>.fn.<locals>.<lambda>  s'    00MM''00- r'   r
   Fr   r   r   s    `r%   r   z:EventVariable.make_construct_in_graph_event_fn.<locals>.fn  r   r'   r   r   s   `` r%   r#   z.EventVariable.make_construct_in_graph_event_fn  r   r'   c                     | j                   rJ d}|j                  j                  j                  || j                        }|j                  |j                  |d             y )N_eventTr   )rw   r   r   r   r   r   r   r   s       r%   r   zEventVariable.reconstruct  sS     ;;zz  55fdjjIg8848HIr'   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   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r'   r"   )Frz   collections.abcr   typingr   r   r    torch._dynamo.variables.dictsr   torch._dynamo.variables.listsr   torch.fxr   r	    r   bytecode_transformationr   excr   r   r7   r   r   rw   r   baser   constantr   ctx_managerr   lazyr   torch._dynamo.symbolic_convertr   r   r   torch._library.custom_opsr   Tensorr   r&   tupler-   r.   r<   rB   r)   rF   r!   rH   rQ   register_faker?   rl   rm   forkrn   rU   joinrZ   r_   rd   ro   rr   ru   r   r*   r"   rI   r'   r%   <module>r$     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'   