
    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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jR                  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jb                  fd Z2de*dejf                  fd!Z4 e(d"d#$      d%e*d&e*ddfd'       Z5e5jl                  d%e*d&e*ddfd(       Z7 eejp                  jr                  jt                  jv                          e(d)d#$      d%e*d&e*ddfd*       Z<e<jl                  d%e*d&e*ddfd+       Z7 eejp                  jr                  jz                  jv                          e(d,d#$      d-e*d.e*ddfd/       Z>e>jl                  d-e*d.e*ddfd0       Z7 eejp                  jr                  j|                  jv                          e(d1d#$      d-e*d.e*ddfd2       Z?e?jl                  d-e*d.e*ddfd3       Z7 eejp                  jr                  j~                  jv                          e(d4d#$      d5e*d6e*ddfd7       Z@e@jl                  d-e*d.e*ddfd8       Z7 eejp                  jr                  j                  jv                          e(d9d#$      d:e*d;e*d<ejR                  ddfd=       ZA eejp                  jr                  j                  jv                          e(d>d#$      d?ejR                  d.e*ddfd@       ZBeBjl                  d;e*d:e*d<ejR                  ddfdA       Z7 G dB dC      ZC G dD dEe       ZD G dF dGeD      ZE G dH dIe      ZFy)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        j	                  t        g       t        i                   S N)torchEventr   EventVariable make_construct_in_graph_event_fnr   r   )r   r   events      p/var/www/vps2.regionflexible.com/Desarrollo/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__)r0   s   r&   <lambda>z)_codegen_current_stream.<locals>.<lambda>9   s(    ##MM//88(
 r(   r   F)add_push_nullr   extend_outputr   )r/   r0   s    `r&   _codegen_current_streamr=   7   s<    	
 6"#)!U34r(   c                 `     t         j                  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 r(   )r!   acceleratorcurrent_streamr   )r/   r-   s   ` r&   get_current_streamrC   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*   )rD   r-   s     r&   _get_stream_by_indexrG   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   rF   r!   r"   )rD   r%   s     r&   _get_event_by_indexrI   Q   s8    (/EeU[[) 
>ugF) Lr(   zstreams::fork )mutates_args
from_indexto_indexc                 T    t         j                  j                  t        |             y r    r!   rA   
set_streamrG   rL   rM   s     r&   fork_streamrR   Y   s    
 
  !5h!?@r(   c                      y r    rJ   rQ   s     r&   r@   r@   a       
 	r(   zstreams::joinc                 T    t         j                  j                  t        |             y r    rO   rQ   s     r&   join_streamrV   l   s    	  !5h!?@r(   c                      y r    rJ   rQ   s     r&   r@   r@   q   rT   r(   zstreams::record_eventevent_indexstream_indexc                 R    t        |       }t        |      }|j                  |       y r    )rI   rG   record_eventrX   rY   r%   r-   s       r&   r[   r[   |   s$    ,E!,/F
r(   c                      y r    rJ   rX   rY   s     r&   r@   r@      rT   r(   zstreams::wait_eventc                 R    t        |       }t        |      }|j                  |       y r    )rI   rG   
wait_eventr\   s       r&   r`   r`      s$    ,E!,/F
er(   c                      y r    rJ   r^   s     r&   r@   r@      rT   r(   zstreams::wait_streamwaiting_stream_indexwaited_on_stream_indexc                 R    t        |       }t        |      }|j                  |       y r    )rG   wait_stream)rb   rc   waiting	waited_ons       r&   re   re      s&    "#78G$%;<I	"r(   c                      y r    rJ   r^   s     r&   r@   r@      rT   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)ri   rj   rk   s      r&   sync_deallocrp      s&     
II  (()9;KLr(   zstreams::record_streamtensorc                 8    | j                  t        |             y r    )record_streamrG   )rq   rY   s     r&   rs   rs      s    
-l;<r(   c                      y r    rJ   )rj   ri   rk   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)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*,	))+,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    )r9   
__module____qualname____doc__r   r   r   r   r!   r/   r   boolr   rJ   r(   r&   rv   rv      s=    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                 l    || _         t        |   dd| j                         j                  id d| y )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%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)NTrJ   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+   )r9   r   r   r   staticmethoddictstrr   rz   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 r/ |j                  j                  d|g || g|z   |        t        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.        | a  ||||      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    tzz4(P,I$*PP(E.??"BII""t&7v&N *)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._CrJ   r   s    r&   module_namezStreamVariable.module_nameu  s    r(   c                      y)Nr*   rJ   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   r5   codegens   r&   r:   z,StreamVariable.reconstruct.<locals>.<lambda>  s(    00MM7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<R"ST!!"6q%"@A  }-F::$$99&$**MD!!'"<"<Tt"<"L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                     j                  fd       j                  fd                       j                  t        dd             j                  t        dd             y )Nc                  l     j                  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MM77@@0 r(   c                  l     j                  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MM''00. r(   r
   Fr   r;   r<   r   rD   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   )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;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   rJ   )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(  rq|j                  j                  dt        j                  j                  j                  | j                  t        j                  |||      j                  fi        t        S |dk(  rq|j                  j                  dt        j                  j                  j                  | j                  t        j                  |||      j                  fi        t        S |dk(  r/ |j                  j
                  d	|g || g|z   |        t        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!   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  s    	..6>II""		!!,,**!11"dFCUU  *)XII""		!!..**!11"dFCUU  *)]""BII""t&7v&N *)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 )NrD   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 r3   r5   r   s   r&   r:   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&   r:   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   )rx   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   )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9#9 9 ?#	9
 S/)*9 
9v%  #?# S/)* 
	   %6	3$d*	+ ,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 +   : . ) ! > 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(   