
    9iE              	       V   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j(        Z(dedede)fdZ*de+e         dede)fdZ,dej-        ddddfdZ.dej-        de)fdZ/de)dej0        fd Z1de)dej2        fd!Z3 e'd"d#$          d%e)d&e)ddfd'            Z4e4j5        d%e)d&e)ddfd(            Z6 eej7        j8        j9        j:                    e'd)d#$          d%e)d&e)ddfd*            Z;e;j5        d%e)d&e)ddfd+            Z6 eej7        j8        j<        j:                    e'd,d#$          d-e)d.e)ddfd/            Z=e=j5        d-e)d.e)ddfd0            Z6 eej7        j8        j=        j:                    e'd1d#$          d-e)d.e)ddfd2            Z>e>j5        d-e)d.e)ddfd3            Z6 eej7        j8        j>        j:                    e'd4d#$          d5e)d6e)ddfd7            Z?e?j5        d-e)d.e)ddfd8            Z6 eej7        j8        j?        j:                    e'd9d#$          d:e)d;e)d<ej(        ddfd=            Z@ eej7        j8        j@        j:                    e'd>d#$          d?ej(        d.e)ddfd@            ZAeAj5        d;e)d:e)d<ej(        ddfdA            Z6 G dB dC          ZB G dD dEe          ZC G dF dGeC          ZD G dH dIe          ZEdS )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                              t          g           t          i                               S N)torchEventr   EventVariable make_construct_in_graph_event_fnr   r   )r   r   events      R/var/www/icac/venv/lib/python3.11/site-packages/torch/_dynamo/variables/streams.py	new_eventr&   #   sT    K(((E(66"044	
 	
      c            	          t          j        | i |}t          |t                              t          g           t          i                               S r   )r    Streamr   StreamVariable!make_construct_in_graph_stream_fnr   r   )r   r   streams      r%   
new_streamr-   -   sT    \4*6**F(88"044	
 	
  r'   devicecgr   c                                          fd            t          |                                          t          dd                     d S )Nc                  X                          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%    ##M/8(
 
 r'   r   F)add_push_nullr   extend_outputr   )r.   r/   s    `r%   _codegen_current_streamr<   7   so    	
 	
 	
 	
   B6""###)!U3344444r'   c                 h     t           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A r'   )r    acceleratorcurrent_streamr   )r.   r,   s   ` r%   get_current_streamrB   B   s:    --f55F(AAAA  r'   indexc                 r    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   sI    )%00Ffel++  EeEE   Mr'   c                 r    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   sI    (//EeU[))  FuFF   Lr'   zstreams::fork )mutates_args
from_indexto_indexc                 ^    t           j                            t          |                     d S r   r    r@   
set_streamrF   rK   rL   s     r%   fork_streamrQ   Y   s*    
 
  !5h!?!?@@@@@r'   c                     d S r   rI   rP   s     r%   r?   r?   a   	    
 	Dr'   zstreams::joinc                 ^    t           j                            t          |                     d S r   rN   rP   s     r%   join_streamrU   l   s(    	  !5h!?!?@@@@@r'   c                     d S r   rI   rP   s     r%   r?   r?   q   rS   r'   zstreams::record_eventevent_indexstream_indexc                 l    t          |           }t          |          }|                    |           d S r   )rH   rF   record_eventrW   rX   r$   r,   s       r%   rZ   rZ   |   s6    ,,E!,//F
r'   c                     d S r   rI   rW   rX   s     r%   r?   r?      rS   r'   zstreams::wait_eventc                 l    t          |           }t          |          }|                    |           d S r   )rH   rF   
wait_eventr[   s       r%   r_   r_      s6    ,,E!,//F
er'   c                     d S r   rI   r]   s     r%   r?   r?      rS   r'   zstreams::wait_streamwaiting_stream_indexwaited_on_stream_indexc                 l    t          |           }t          |          }|                    |           d S r   )rF   wait_stream)ra   rb   waiting	waited_ons       r%   rd   rd      s8    "#788G$%;<<I	"""""r'   c                     d S r   rI   r]   s     r%   r?   r?      rS   r'   zstreams::sync_deallocwait_event_indexsrc_stream_index
to_deallocc                 Z    t           j        j        j                            | |           dS )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*     
I (()9;KLLLLLr'   zstreams::record_streamtensorc                 J    |                      t          |                     d S r   )record_streamrF   )rp   rX   s     r%   rr   rr      s%    
-l;;<<<<<r'   c                     d S r   rI   )ri   rh   rj   s      r%   r?   r?      s	     	Dr'   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dS )SymbolicStreamStatez)Track the currently entered stream if anyr   Nc                 B   ddl m} g }t          j                                        r_t          j        t          j                                         |t          j                                        j                            }|g}t          j
        |          | _        d S )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00000*,	))++ 	%,3!0022**5+<+K+K+M+M+TUU  J $ICNCTD
 D
r'   r,   r*   c                 :    | j                             |           d S r   )r|   append)r}   r,   s     r%   enter_streamz SymbolicStreamState.enter_stream   s    $$V,,,,,r'   c                 8    | j                                          d S r   )r|   popr}   s    r%   exit_streamzSymbolicStreamState.exit_stream   s    !!#####r'   r.   c                 l    |&t          | j                  D ]}|j        |k    r|c S | j        d         S )N)reversedr|   r.   )r}   r.   r,   s      r%   
cur_streamzSymbolicStreamState.cur_stream   sM    "4#899 " "=F**!MMM + $R((r'   c                 2    t          | j                  dk    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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                     || _          t                      j        dd|                                 j        id d| d S )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%6%HI	
 	
 	
 	
 	
 	
 	
r'   r   c                     |j                             |                                            t                                          |          S r   )symbolic_stream_stater   r   r   enterr}   r   r   r   s      r%   r   zStreamContextVariable.enter
  s<    
 	 --doo.?.?@@@ww}}R   r'   c                 j    |j                                           t                      j        |g|R  S r   )r   r   r   exitr   s      r%   r   zStreamContextVariable.exit  s8    
 	 ,,...uww|B&&&&&r'   c                     dS )NTrI   r   s    r%   supports_graph_breaksz+StreamContextVariable.supports_graph_breaks  s    tr'   c                 2    | 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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      sC       2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                     |&d|j         j        v r|j         j        d         |k    sJ || _        || _        |j        | _        || _         t                      j        di | d S )Nexample_valuer   )nodemetar   r   r.   r   r   r   r}   r   r   r   r   r   s        r%   r   zStreamVariable.__init__%  su     EJO!C!C:??3u<<<<

l!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 r1 |j        j        d|g || g|z   |          R   t          d           S |dk    r3 |t          | |j        j        d|g || g|z   |          R  	          S |d
k    r3 |t          | |j        j        d|g || g|z   |          R  	          S ||v rt          |          dk    r|sddlm}m}	 | j        r( |	| j                            |j                             |d         }
t%          |
t&                    st          j        t*                    S |
j        r1| 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    tz4((PP*P$*P*PPPPEEEEEEEE......???"BI"t&7&7v&N&N    $D)))W__$$+,bi,!4*;*;TFTM6*R*R      ^##$$(,bi,!4*;*;TFTM6*R*R      +++D		Qv<<<<<<<<{ Qdk44\5NOOPPP GEe^44 ?'.~>>>| Q{...dk44\5NOOPPP#*,&t,TZEE   ww""2tT6:::r'   c                     | j         S r   r   r   s    r%   as_proxyzStreamVariable.as_proxyr  
    zr'   c                     dS )Nztorch._CrI   r   s    r%   module_namezStreamVariable.module_nameu  s    zr'   c                     dS )Nr)   rI   r   s    r%   fn_namezStreamVariable.fn_namex  s    xr'   codegenr   c                    | j         rJ | j        j                    fd                                                   | j                                                 t          dd                     d S d| j         }j        j	        
                    || j                  }                                        |d                     d S )Nc                  X                          t          j        j        j        d          S )Nr   r4   r   s   r%   r9   z,StreamVariable.reconstruct.<locals>.<lambda>  s%    00M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"S"STTT!!"6q%"@"@AAAAA .--F:$99&$*MMD!!'"<"<Tt"<"L"LMMMM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                 "                        fd                                fd                                                       t          dd                                         t          dd                     d S )Nc                  X                          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M7@0  r'   c                  X                          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M'0.  r'   r
   Fr   r:   r;   r   rC   r   r   r   s    `r%   fnz<StreamVariable.make_construct_in_graph_stream_fn.<locals>.fn      !!      !!     
 GDMMMGFOOO!!"6q%"@"@AAA!!"6q%"@"@AAAAAr'   intr   r   r   s   `` r%   r+   z0StreamVariable.make_construct_in_graph_stream_fn  M    	Bc 	BK 	BD 	B 	B 	B 	B 	B 	B 	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; 4; 4; 4; 4; 4;l%    S        N N N 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                     |&d|j         j        v r|j         j        d         |k    sJ  t                      j        di | || _        || _        || _        d S )Nr   rI   )r   r   r   r   r   r   r   r   s        r%   r   zEventVariable.__init__  sl     EJO!C!C:??3u<<<<""6"""

!2r'   r   r   r   r   c                 ~   ddl m} ddlm} |dk    rf|j                            dt          j        j        j	        | j
        t                              |||          j
        fi            t          d           S |dk    rf|j                            dt          j        j        j        | j
        t                              |||          j
        fi            t          d           S |dk    r1 |j        j        d	|g || g|z   |          R   t          d           S |d
k    r3 |t          | |j        j        d	|g || g|z   |          R            S t          | j                  j         dt          | j                  j         d| }t'          dt)          |          d| dg t*          j                   d S )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  sK    	.-----......6>>I""	!,*!11"dFCCU    $D)))XI""	!.*!11"dFCCU    $D)))]"""BI"t&7&7v&N&N    $D)))W__$$+,bi,!4*;*;TFTM6*R*R      
##.WWdj1A1A1NWWQUWW  2D		N+ N N N&2     r'   c                     | j         S r   r   r   s    r%   r   zEventVariable.as_proxy  r   r'   r*   c                     d }|r	|d         }n|r|                     d          }|s| j                                        }|S )Nr   r,   )getr   r   )r   r   r   
stream_args       r%   r  zEventVariable._get_stream_arg  sW     
 	.aJJ 	.H--J 	?1<<>>Jr'   r   c                 .     dt           dddd f fd}|S )NrC   r   r   r   c                 "                        fd                                fd                                                       t          dd                                         t          dd                     d S )Nc                  X                          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                  X                          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M'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'   r   c                     | j         rJ d}|j        j                            || j                  }|                    |                    |d                     d S )N_eventTr   )rw   r   r   r   r   r   r   r   s       r%   r   zEventVariable.reconstruct  s`     ;z 55fdjIIg8848HHIIII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 3 3 3 3 39#9 9 ?#	9
 S/)*9 
9 9 9 9v%     #?# S/)* 
	   \  %6	3$d*	+   \,J J J J J J J 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 7 7 7 7 7 + + + + + + + +             : : : : : : . . . . . . . .        ) ( ( ( ( ( ! ! ! ! ! ! & & & & & & 4 4 4 4 4 4 % % % % % %  $DDDDDD###### / / / / / / 
S C C    eCj C C    5EL 5k 5d 5 5 5 5u|          s u{     ?,,,AAA 
A A A -,A 			 
	 	 	 	 	!&. / / / ?,,,AC A3 A4 A A A -,A 			 
	 	 	 	 	!&. / / / "444c      54 			 
	 	 	 	 	!.6 7 7 7  r222C s t    32 			 
	 	 	 	 	!,4 5 5 5 !333#c #3 #4 # # # 43# 			 
	 	 	 	 	!-5 6 6 6 "444	M	M-0	M>Cl	M		M 	M 	M 54	M 	!.6 7 7 7 #"555=%, =c =d = = = 65= 			 	 
		 	 	 	!. !. !. !. !. !. !. !.H+ + + + +7 + + +\D D D D D* D D DN|J |J |J |J |JO |J |J |J |J |Jr'   