
    /jE              	       Z   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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Z0de*dej1        fd Z2de*dej3        fd!Z4 e(d"d#$          d%e*d&e*ddfd'            Z5e5j6        d%e*d&e*ddfd(            Z7 eej8        j9        j:        j;                    e(d)d#$          d%e*d&e*ddfd*            Z<e<j6        d%e*d&e*ddfd+            Z7 eej8        j9        j=        j;                    e(d,d#$          d-e*d.e*ddfd/            Z>e>j6        d-e*d.e*ddfd0            Z7 eej8        j9        j>        j;                    e(d1d#$          d-e*d.e*ddfd2            Z?e?j6        d-e*d.e*ddfd3            Z7 eej8        j9        j?        j;                    e(d4d#$          d5e*d6e*ddfd7            Z@e@j6        d-e*d.e*ddfd8            Z7 eej8        j9        j@        j;                    e(d9d#$          d:e*d;e*d<ej)        ddfd=            ZA eej8        j9        jA        j;                    e(d>d#$          d?ej)        d.e*ddfd@            ZBeBj6        d;e*d:e*d<ej)        ddfdA            Z7 G dB dC          ZC G dD dEe           ZD G dF dGeD          ZE G dH dIe          ZFd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)CONSTANT_VARIABLE_NONE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      d/home/longshao/multi-rider-rag/.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__)r0   s   r&   <lambda>z)_codegen_current_stream.<locals>.<lambda>9   s%    ##M/8(
 
 r(   r   F)add_push_nullr   extend_outputr   )r/   r0   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=   )_r0   r/   s     r&   r:   z$get_current_stream.<locals>.<lambda>E   s    5fbAA r(   )r!   acceleratorcurrent_streamr   )r/   r-   s   ` r&   get_current_streamrC   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*   )rD   r-   s     r&   _get_stream_by_indexrG   I   sG    )%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   rF   r!   r"   )rD   r%   s     r&   _get_event_by_indexrI   Q   sG    (//EeU[))  FuFF ) Lr(   zstreams::fork )mutates_args
from_indexto_indexc                 ^    t           j                            t          |                     d S r    r!   rA   
set_streamrG   rL   rM   s     r&   fork_streamrR   Y   s*    
 
  !5h!?!?@@@@@r(   c                     d S r    rJ   rQ   s     r&   r@   r@   a   	    
 	Dr(   zstreams::joinc                 ^    t           j                            t          |                     d S r    rO   rQ   s     r&   join_streamrV   l   s(    	  !5h!?!?@@@@@r(   c                     d S r    rJ   rQ   s     r&   r@   r@   q   rT   r(   zstreams::record_eventevent_indexstream_indexc                 l    t          |           }t          |          }|                    |           d S r    )rI   rG   record_eventrX   rY   r%   r-   s       r&   r[   r[   |   s6    ,,E!,//F
r(   c                     d S r    rJ   rX   rY   s     r&   r@   r@      rT   r(   zstreams::wait_eventc                 l    t          |           }t          |          }|                    |           d S r    )rI   rG   
wait_eventr\   s       r&   r`   r`      s6    ,,E!,//F
er(   c                     d S r    rJ   r^   s     r&   r@   r@      rT   r(   zstreams::wait_streamwaiting_stream_indexwaited_on_stream_indexc                 l    t          |           }t          |          }|                    |           d S r    )rG   wait_stream)rb   rc   waiting	waited_ons       r&   re   re      s8    "#788G$%;<<I	"""""r(   c                     d S r    rJ   r^   s     r&   r@   r@      rT   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)ri   rj   rk   s      r&   sync_deallocrp      s*     
I (()9;KLLLLLr(   zstreams::record_streamtensorc                 J    |                      t          |                     d S r    )record_streamrG   )rq   rY   s     r&   rs   rs      s%    
-l;;<<<<<r(   c                     d S r    rJ   )rj   ri   rk   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)rx   r   r!   rA   is_availabler   createrB   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    )r9   
__module____qualname____doc__r   r   r   r   r!   r/   r   boolr   rJ   r(   r&   rv   rv      s        33
 
 
 
- - - -$ $ $ $) )%,!7 )CS ) ) ) ).4 . . . . . .r(   rv   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&   rz   zStreamContextVariable.create   s&     %
 

 
 	
r(   r-   Nc                     || _          t                      j        dd|                                 j        id d| d S )Nr-   )target_valuesinitial_valuesrJ   )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 )NTrJ   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{{r(   r   r+   )r9   r   r   r   staticmethoddictstrr   rz   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 r) |j        j        d|g || g|z   |          R   t          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)re   synchronizer`   call_methodquery
target_clsr   r   r[   )GuardBuilderinstall_guardr   )hasattrr   utilsr   r   builderr   outputcreate_proxyr   r   r#   r   guardsr   r   rx   
make_guardEQUALS_MATCHrF   r+   rz   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(EEEEEEEE......???"BI"t&7&7v&N&N    *)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._CrJ   r   s    r&   module_namezStreamVariable.module_nameu  s    zr(   c                     dS )Nr*   rJ   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   r5   r   s   r&   r:   z,StreamVariable.reconstruct.<locals>.<lambda>  s%    00M7@2  r(   r   F_stream_Tadd)rx   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    rJ   r   s    r&   r   zStreamVariable.get_stream  s    r(   c                 .     dt           dddd f fd}|S )NrD   r   r   r   c                 "                        fd                                fd                                                       t          dd                                         t          dd                     d S )Nc                  X                          t          j        j        j        d          S r3   r5   r   s   r&   r:   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r6   r!   r7   r   r9   r   s   r&   r:   zNStreamVariable.make_construct_in_graph_stream_fn.<locals>.fn.<locals>.<lambda>  s$    00M'0.  r(   r
   Fr   r;   r<   r   rD   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   )r9   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   rJ   )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                 N   ddl m} ddlm} |dk    r^|j                            dt          j        j        j	        | j
        t                              |||          j
        fi            t          S |dk    r^|j                            dt          j        j        j        | j
        t                              |||          j
        fi            t          S |dk    r) |j        j        d	|g || g|z   |          R   t          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!   rm   rn   r`   r   r#   _get_stream_argr   r[   r   r   r   r   r   r   r   r   SUPPORTABLE)r~   r   r   r   r   r   r   method_names           r&   r   zEventVariable.call_method  s3    	.-----......6>>I""	!,*!11"dFCCU    *)XI""	!.*!11"dFCCU    *)]"""BI"t&7&7v&N&N    *)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 )NrD   r   r   r   c                 "                        fd                                fd                                                       t          dd                                         t          dd                     d S )Nc                  X                          t          j        j        j        d          S r3   r5   r   s   r&   r:   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&   r:   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   )rx   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   )r9   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#   )Gr{   collections.abcr   typingr   r   r!   torch._dynamo.variables.dictsr   torch._dynamo.variables.listsr   torch.fxr   r	    r   bytecode_transformationr   excr   r   r8   r   r   rx   r   baser   constantr   r   ctx_managerr   lazyr   torch._dynamo.symbolic_convertr   r   r   torch._library.custom_opsr   Tensorr   r'   tupler.   r/   r=   rC   r*   rG   r"   rI   rR   register_faker@   rm   rn   forkro   rV   joinr[   r`   re   rp   rs   rv   r   r+   r#   rJ   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(   