
    Phr                        d dl Z d dlZd dlZd dlZd dlmZmZ d dl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mZmZmZ ddlmZ d	d
lmZmZ d$dZd Zd Zd Z G d de      Z G d de      Z G d de      Z  G d de       Z! G d de      Z"d Z# G d de      Z$d Z%d Z& G d de      Z' G d  d!e      Z( G d" d#e      Z)y)%    N)DictList   )	variables)create_call_functioncreate_rot_n)unimplementedUnsupported)
AttrSourceConstantSourceDefaultsSourceGetItemSource	make_cell   )typestrVariableTrackerc                 ~    t        |t              r|S |sddlm}   |       | |      S ddlm}   || |      |      S )Nr   SourcelessBuilderVariableBuildersource)
isinstancer   torch._dynamo.variables.builderr   r   )txvalr   r   r   s        lC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/variables/functions.pywrap_bound_argr       sA    #'
E" "2s++C1r&1#66    c                     t        |j                               D ]+  \  }}t        |t        t        f      st        | |      ||<   - y N)listitemsr   tupledictr    )r   resultkvs       r   wrap_args_kwargsr+      s9    V\\^$1a%'&r1-F1I %r!   c                     t               }| j                  j                  }|j                  D ]>  }|j	                         ||<   ||v s|j                  ||   |j                  |             @ |S r#   )r'   outputside_effectsco_cellvarstrack_cell_new
store_cellpop)parentr(   codeclosure_cellsr.   names         r   init_cellvarsr7   &   sj    FM==--L   *99;d6>##M$$7D9IJ !
 r!   c                     ddl m}  || ||||      }||_        t        |t              rddlm}	 t         |	|            }|t        |t              sJ ||_        |S )Nr   )FunctionTypepairwise)	typesr9   __kwdefaults__r   r&   	itertoolsr;   r'   __annotations__)
r4   	f_globalsr6   defaultsclosure
kwdefaultsannotationsr9   funcr;   s
             r   _create_nested_fnrF   3   sa     #ixAD$D+u%&8K01 *[$"???&DKr!   c                   8    e Zd Zd Zd Z	 	 	 	 	 	 ddZd Zd Zy)BaseUserFunctionVariablec                 6    | j                         j                  S r#   )get_codeco_filenameselfs    r   get_filenamez%BaseUserFunctionVariable.get_filenameH   s    }}***r!   c                 6    | j                         j                  S r#   )rJ   co_namerL   s    r   get_namez!BaseUserFunctionVariable.get_nameK   s    }}&&&r!   c                 n    |j                  | t        | j                               t        |      z   |      S r#   )inline_user_function_returnr$   	self_argsrM   r   argskwargss       r   call_functionz&BaseUserFunctionVariable.call_functionN   s3     --$t~~'(4:5v
 	
r!   c                 n    t        t        j                  | j                               j                        S r#   )r$   inspect	signatureget_function
parametersrL   s    r   inspect_parameter_namesz0BaseUserFunctionVariable.inspect_parameter_namesU   s'    G%%d&7&7&9:EEFFr!   c                     i S r#    )rM   r   s     r   closure_varsz%BaseUserFunctionVariable.closure_varsX       	r!   NrV   zList[VariableTracker]rW   zDict[str, VariableTracker]returnr   )__name__
__module____qualname__rN   rQ   rX   r^   ra   r`   r!   r   rH   rH   G   s4    +'
/
9U
	
Gr!   rH   c                   l     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z	 	 	 	 	 	 d fdZ xZS )UserFunctionVariablez-Some unsupported user-defined global functionc                    t        |   d	i | t        |dd      rd| _        nd| _        t	        |t
        j                  t        j                  j                  f      sJ dt        |       d|        t        j                  |d|      }t        j                  |dd      rt        j                  |d|      }|| _        y )
N_dynamo_marked_constantFTzexpected FunctionType found  _torchdynamo_inline__script_if_tracing_wrapper__original_fnr`   )super__init__getattris_constantr   r<   r9   torchjitScriptFunctionr   rZ   getattr_staticfn)rM   rx   rs   rW   	__class__s       r   rq   zUserFunctionVariable.__init___   s    "6"20%8#D$D##UYY%=%=>
 	=)'"+at<	= 
 ##B(=rB!!"&CUK''OR@B&(r!   c                     g S r#   r`   rL   s    r   rT   zUserFunctionVariable.self_argsq   rb   r!   c                     | j                   S r#   )rx   rL   s    r   r\   z!UserFunctionVariable.get_functiont   s    wwr!   c                 .    | j                   j                  S r#   )rx   __code__rL   s    r   rJ   zUserFunctionVariable.get_codew   s    wwr!   c                 "    t         j                  S r#   )r<   r9   rL   s    r   python_typez UserFunctionVariable.python_typez   s    !!!r!   c                 4    t        | j                  dd       d uS )N__self__)rr   rx   rL   s    r   has_selfzUserFunctionVariable.has_self}   s    tww
D1==r!   c                 .    | j                   j                  S r#   )rx   __globals__rL   s    r   get_globalsz UserFunctionVariable.get_globals   s    ww"""r!   c                    | j                   rJ |j                  j                  }t        j                  t
        |      }| j                  }|j                  xs g }t        |      D 	cg c])  \  }}	| j                  d nt        | j                  |      + }
}}	t        j                  |j                  |j                  |j                  t!        t#        ||
      D cg c]  \  }} |||       c}}      |j$                        }|j&                  r||j&                  D ci c])  }|| j                  d nt        | j                  |d      + }}|j&                  j)                         D ci c]  \  }}| ||||          c}}|_         t+        j,                  |      j.                  |i |}|j1                          t3        |j4                  j)                               }t7        ||       t9        |||j                        }| j                  j$                  xs d}t;        |      t;        | j                  j                  j<                        k(  sJ t#        t?        j@                         | j                  j                  j<                  |      D ]U  \  }}}|dk(  rI| j                  rtC        | j                  d      nd }tE        jF                  |jH                  |      ||<   V|jK                  ||      }||||<   p| j                  rdd	l&m'} |j                  jP                  }||v r||   }ntS        tC        | j                  d
      |      }tC        |d      }  |||      |jH                        }|jU                         |jV                  vr|||<   
|jY                  ||      }|j[                  ||       |||<   5ddl&m.}   |       ||jH                        ||<   X ||fS c c}	}w c c}}w c c}w c c}}w )N)r   )r   r   T)is_kwr`   ry   r   r   r   __closure__cell_contentsr   )/rs   r-   root_tx	functoolspartialr    rx   __defaults__	enumerater   r   r<   r9   r}   r   re   r&   zipr   r=   r%   rZ   r[   bindapply_defaultsr'   	argumentsr+   r7   lenco_freevarsr>   countr   r   UserDefinedClassVariabler   match_nested_cellbuilderr   r.   r   r6   mutated_closure_cell_contentstrack_cell_existingr1   r   )rM   r3   rV   rW   r   wraprx   rA   idx_defaults_sourcesargr   	fake_funcr)   kwdefaults_sourcesr*   boundr(   r5   rB   r6   cellvarr   r.   outclosure_cellclosure_cell_contentscontents_varr   s                                  r   	bind_argszUserFunctionVariable.bind_args   s   ####]]""  B7!%??(b $H-
-Q KK'D^DKK-MM- 	 
 &&KKNNKK (+85E'F'FV S0'F NN
	 
 **	" +A ;;& #DKK$?@ +	  " --335(5DAq 4A&8&;<<5(I$
 2!!),114B6Beoo++-.V$%ffbkkB''%%+7|s477#3#3#?#?@@@@"OOtww//;;W 
OCt {"AEDKK=RV(AA&&! t
 **46?#&F4L[[8#)==#=#=L|+*40'4&t{{MBC( 1;(/1- (Vv?T'U ..(
 2668#%#C#CD ,8F4L$ +>>|TR$//(
 $'F4L ;#6#4#6r4;M;M#NF4Lw 
z }$$C
"(s   *.O8O>$.P1P	c                      y r#   r`   )rM   r3   childs      r   export_freevarsz$UserFunctionVariable.export_freevars   s    r!   c                     | j                   r't        || j                  | j                         ||      S t        |   |||      S r#   )rs   invoke_and_store_as_constantrx   rQ   rp   rX   )rM   r   rV   rW   ry   s       r   rX   z"UserFunctionVariable.call_function   sF     /DGGT]]_dF  w$Rv66r!   )Frc   )re   rf   rg   __doc__rq   rT   r\   rJ   r   r   r   r   r   rX   __classcell__ry   s   @r   ri   ri   \   sW    7)$ ">#h%T7/79U7	7 7r!   ri   c                   V     e Zd ZdZ fdZd Zd Zd Z	 	 	 	 	 	 d fdZ fdZ	 xZ
S )	UserMethodVariablez$Some unsupported user-defined methodc                 6    t        |   dd|i| || _        y )Nrx   r`   )rp   rq   obj)rM   rx   r   rW   ry   s       r   rq   zUserMethodVariable.__init__   s    )B)&)r!   c                 h    | j                   j                   d| j                   d| j                   dS )N(z, ))ry   re   rx   r   rL   s    r   __str__zUserMethodVariable.__str__  s.    ..))*!DGG9BtxxjBBr!   c                     | j                   gS r#   )r   rL   s    r   rT   zUserMethodVariable.self_args  s    zr!   c                 "    t         j                  S r#   )r<   
MethodTyperL   s    r   r   zUserMethodVariable.python_type  s    r!   c                    |j                   j                         rt        | j                  t        j
                        rtt        | j                  dd      }||j                  d      s| j                  r>| j                  j                  || j                  j                  ||| j                        S t        | 5  |||      S )Nrf    z	torch.nn.)constant)r-   is_root_tracerr   r   r   NNModuleVariablerr   rx   
startswithrs   call_methodre   rp   rX   )rM   r   rV   rW   module_attrry   s        r   rX   z UserMethodVariable.call_function  s     99##%*HHi00+
 "$''<<K'**;7##xx++(($AQAQ ,   w$Rv66r!   c                 &    t         |          dd  S )Nr   )rp   r^   )rM   ry   s    r   r^   z*UserMethodVariable.inspect_parameter_names(  s    w.044r!   rc   )re   rf   rg   r   rq   r   rT   r   rX   r^   r   r   s   @r   r   r      sB    .C 7/79U7	7:5 5r!   r   c                   6     e Zd Z fdZ	 	 	 	 	 	 d fdZ xZS )WrappedUserMethodVariablec                     |j                  dd        |j                  dd        t        |   |j                  |j                  fi | || _        || _        y Nrx   r   )r2   rp   rq   rx   r   wrappedcontextrM   r   r   rW   ry   s       r   rq   z"WrappedUserMethodVariable.__init__-  sI    

4

5$W[[;F;r!   c                     | j                   j                  |       t        |   |||      }| j                   j	                  |       |S r#   r   enterrp   rX   exitrM   r   rV   rW   r(   ry   s        r   rX   z'WrappedUserMethodVariable.call_function4  A     	2&r48"r!   rc   re   rf   rg   rq   rX   r   r   s   @r   r   r   ,  *    /9U	 r!   r   c                   6     e Zd Z fdZ	 	 	 	 	 	 d fdZ xZS )WrappedUserFunctionVariablec                     |j                  dd        |j                  dd        t        |   |j                  fi | || _        || _        y r   )r2   rp   rq   rx   r   r   r   s       r   rq   z$WrappedUserFunctionVariable.__init__>  sC    

4

5$.v.r!   c                     | j                   j                  |       t        |   |||      }| j                   j	                  |       |S r#   r   r   s        r   rX   z)WrappedUserFunctionVariable.call_functionE  r   r!   rc   r   r   s   @r   r   r   =  r   r!   r   c                     d }|D cg c]
  } ||       }}|j                         D ci c]  \  }}| ||       }}} ||i |}	| j                  j                  |	|t        |            S c c}w c c}}w )Nc                 v    t        | t        j                        r| j                         S | j	                         S r#   )r   r   TensorVariableget_real_valueas_python_constant)xs    r   convertz-invoke_and_store_as_constant.<locals>.convertO  s0    a112##%%##%%r!   r   )r%   r-   register_attr_or_moduler   )
r   rx   r6   rV   rW   r   r   r)   r*   ress
             r   r   r   N  s    &
 !%%1GAJD%(.71amF7
d
f
C99,,d# -   &7s
   A1A6c                   x     e Zd Zddhej                  Z	 d fd	Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Z xZS )NestedUserFunctionVariableclosure_scoper@   c
                 b   t        |   di |
 t        |j                         t              sJ t        |j                         t
        j                        sJ t        |t              sJ || _        || _	        || _
        || _        || _        || _        || _        |d }|| _        |	| _        y Nr`   )rp   rq   r   r   strr<   CodeTyper'   fn_namer4   r@   rA   rC   rD   rB   r   wrapped_reconstructible)rM   r   r4   r@   rA   rC   rD   rB   r   r   rW   ry   s              r   rq   z#NestedUserFunctionVariable.__init__e  s     	"6"'446<<<$113U^^DDD)T***	" $&? M* $ 	$r!   c                     g S r#   r`   rL   s    r   rT   z$NestedUserFunctionVariable.self_args  rb   r!   c                 6    | j                   j                         S r#   )r4   r   rL   s    r   rJ   z#NestedUserFunctionVariable.get_code  s    yy++--r!   c                 L   | j                   r
t               t        j                  | j                  j                         | j                  | j                  j                               }| j                  r| j                  j                         |_	        | j                  r| j                  j                         |_        | j                  rZ| j                  j                         }t        |t              rddlm} t#         ||            }t        |t"              sJ ||_        |S )Nr   r:   )rB   NotImplementedErrorr<   r9   r4   r   r@   r   rA   r   rC   r=   rD   r   r&   r>   r;   r'   r?   )rM   rE   rD   r;   s       r   r\   z'NestedUserFunctionVariable.get_function  s    <<%''!!II((*NNLL++-

 == $ @ @ BD??"&//"D"D"FD**==?K+u-."8K#89 k4000#.D r!   c                     | j                   d uS r#   )rB   rL   s    r   has_closurez&NestedUserFunctionVariable.has_closure  s    ||4''r!   c                      y)NFr`   rL   s    r   r   z#NestedUserFunctionVariable.has_self  s    r!   c                     | j                   S r#   )r@   rL   s    r   r   z&NestedUserFunctionVariable.get_globals  s    ~~r!   c                 `   ddl m} | j                         }t        j                  || j
                  | j                  j                         | j                  rt        | j                  j                        nd t        d t        t        | j                         j                              D                    }| j                  r| j                  j                  |_         t!        j"                  |      j$                  |i |}|j'                          t)        |j*                  j                               }t-        |j.                  j0                  |       t3        |||      }	t5        |j                        D ]  \  }
}| j6                  j                  |
   }t9        |||      |k(  sJ ||vsJ t;        ||      rS|}|r+||j<                  vr|j>                  }|r||j<                  vr|tA        d| d      |j<                  |   ||<   | j6                  j                  |
   |	|<    ||	fS )Nr   )InlinedClosureVariablec              3   2   K   | ]  }t        d         y wr#   r   ).0r   s     r   	<genexpr>z7NestedUserFunctionVariable.bind_args.<locals>.<genexpr>  s     S+Ra)D/+Rs   zCouldn't find z7 in the symbolic_locals of the inline interpreter stack)!miscr   rJ   r<   r9   r@   r   r   rA   r&   r%   ranger   r   rC   r=   rZ   r[   r   r   r'   r   r+   r-   r   r7   r   rB   rr   r   symbolic_localsr3   RuntimeError)rM   r3   rV   rW   r   r4   rE   r   r(   r5   r   r6   r   cands                 r   r   z$NestedUserFunctionVariable.bind_args  s   0}}!!NNLL++-*.--E$--%%&TS5T]]_5P5P1Q+RSS
 ??"&//"7"7D,!!$',,d=f=eoo++-...7%ffd;"4#3#34IC<<%%c*D4t,444v%%%$ 67 t4+?+??;;D t4+?+??<&(.ef   $33D9t&*ll&8&8&=d#) 5, }$$r!   c                     | j                         }|j                  D ]-  }||j                  v s|j                  |   |j                  |<   / y r#   )rJ   r   r   )rM   r3   r   r4   r   s        r   r   z*NestedUserFunctionVariable.export_freevars  sF    }}##Ce+++.3.C.CC.H&&s+ $r!   c                    |j                  t        d        || j                         |j                  |j	                  | j
                        g        || j                         | j                  r || j                         n!|j                  |j                  d       g       | j                  r || j                         n!|j                  |j                  d       g       | j                  r || j                         n!|j                  |j                  d       g       | j                  r	 t        | j                  t        j                        rF| j                  j                  j                         D ci c]  \  }}||j!                          }}}n;t#        | j                  j                  D cg c]  }|j!                          c}      }|j                  |j	                  |      g       n!|j                  |j                  d       g       |j                  t'        dd             | j(                  rt|j                  dd        || j(                         |j                  t'        dd             |j                  t+        d             |j                  t'        dd             g S c c}}w c c}w # t$        $ r  || j                         Y w xY w)	NrF      T)	push_nullr   wrapsr   r   )load_import_fromre   r4   extend_output_create_load_constr@   r   rA   create_load_constrB   rC   rD   r   r   ConstDictVariabler%   r   r&   r   r   r   r   )rM   codegenr)   r*   rD   s        r   reconstructz&NestedUserFunctionVariable.reconstruct  s`     +>?		w99$..IJK==DMM"!!7#<#<T#B"CD<<DLL!!!7#<#<T#B"CD??DOO$!!7#<#<T#B"CD*d..	0K0KL %)$4$4$:$:$@$@$B#$BDAq 1//11$B   #
 #(9=9I9I9O9OP9OA--/9OP#K %%w'A'A+'N&OP !!7#<#<T#B"CD21EF''$$[':D001!!"6q$"?@!!,q/2!!"6q$"?@	/# Q ' *(()*s1   3AK >J9!K :J?(K 9K K"!K"r#   )re   rf   rg   rH   _nonvar_fieldsrq   rT   rJ   r\   r   r   r   r   r   r  r   r   s   @r   r   r   ^  sZ     
"	0	0N  !%$@.0()%VI/r!   r   c                  R    t         j                  j                         rddlm}  | S i S )Nr   traceable_collective_remaps)rt   distributedis_available)torch.distributed._functional_collectivesr  r  s    r   _traceable_collective_remapsr    s&    %%'	
 +*Ir!   c                     t         j                  j                         sJ d       ddlm}m} ||h}||v sJ |j                  }| j                  d      }t        ||      S )NzIllegal invocation.r   )all_gather_tensor_inplacereduce_scatter_tensor_inplacez)torch.distributed._functional_collectives)	rt   r  r  r  r  r  re   import_sourcer   )r   rx   r  r  valid_values
inner_namepath_sources          r   _traceable_collectives_sourcer    sg    ))+B-BB+
 ./LMLJ""#NOKk:..r!   c                   f     e Zd ZdZ fdZed        Zed        Zed        Z	 	 	 	 	 	 ddZ	 xZ
S )!CollectiveFunctionRewriteVariablea  
    Some of the torch.distributed.* collective APIs are possible to rewrite to 'traceable' collectives.

    This class provides both a way to check if a function is remappable, and perform the remapping.

    In the case that a function is 'remappable' but only for some combinations of call-time arguments,
    we check the args at `call_function` time and fall back to graph-breaking if needed.  This is no worse
    than status-quo as we currently graph-break on all distributed.* collectives.
    c                X    t        |   |fi | t        |t              sJ || _        y r#   )rp   rq   r   ri   replacement_var)rM   rx   r  rW   ry   s       r   rq   z*CollectiveFunctionRewriteVariable.__init__3  s.    &v&/+?@@@.r!   c                 j    t         j                  | |      \  }}t        |ft        |fd|i||d|S )Nr   )r  r   )r  rewriteri   )r   old_fnr   optionsnew_fn
new_sources         r   createz(CollectiveFunctionRewriteVariable.create8  sM    >FFr6R
0
0V
VgV
 	
 	
r!   c                 H    t        j                  |       xr | t               v S r#   )rZ   
isfunctionr  )variables    r   can_rewritez-CollectiveFunctionRewriteVariable.can_rewriteB  s%     x(WX9U9W-W	
r!   c                 8    t               |   }|t        | |      fS r#   )r  r  )r   rx   r!  s      r   r  z)CollectiveFunctionRewriteVariable.rewriteH  s"    -/34R@@@r!   c                     |j                  dd      rt        d| j                          | j                  j	                  |||      S )Nasync_opFzBCollectiveFunctionRewriteVariable can't support async_op=True for )getr	   rx   r  rX   rU   s       r   rX   z/CollectiveFunctionRewriteVariable.call_functionM  sI     ::j%(TUYU\U\T]^ ##11"dFCCr!   rc   )re   rf   rg   r   rq   staticmethodr#  r'  r  rX   r   r   s   @r   r  r  (  sl    /
 
 
 
 

 A A
D/
D9U
D	
Dr!   r  c                   :     e Zd Zd fd	Z	 	 	 	 	 	 ddZd Z xZS )FunctoolsPartialVariablec                     t        |   di | || _        t        |t              sJ || _        t        |t              sJ || _        || _        y r   )	rp   rq   rE   r   r$   rV   r'   keywordsoriginal)rM   rE   rV   r0  r1  rW   ry   s         r   rq   z!FunctoolsPartialVariable.__init__[  sO    "6"	$%%%	(D)))  r!   c                 z    | j                   |z   }i | j                  |}| j                  j                  |||      S r#   )rV   r0  rE   rX   )rM   r   rV   rW   merged_argsmerged_kwargss         r   rX   z&FunctoolsPartialVariable.call_functiond  s>     ii$&34==3F3yy&&r;FFr!   c                 H   | j                   r| j                   S d }t        j                  | j                  j                  g| j
                  D cg c]
  } ||       c}i | j                  j                         D ci c]  \  }}| ||       c}}S c c}w c c}}w )Nc                 n    t        | t        j                        r| j                  S | j	                         S r#   )r   r   UserDefinedObjectVariablevaluer   )r*   s    r   get_valz<FunctoolsPartialVariable.as_python_constant.<locals>.get_valp  s*    a!D!DE77N//11r!   )r1  r   r   rE   rx   rV   r0  r%   )rM   r9  r   r)   r*   s        r   r   z+FunctoolsPartialVariable.as_python_constantk  s    ==== 2 $$		*.))4)3'#,)4 .2]]-@-@-BC-BTQ1gaj=-BC 4Cs   B
 Br#   rc   )re   rf   rg   rq   rX   r   r   r   s   @r   r.  r.  Z  s.    !G/G9UG	Gr!   r.  c                   J     e Zd Z fdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 d fdZ xZS )TritonKernelVariablec                    ddl m} ddlm} t	        |   di | |J || _        |j                  |      | _        || j                  |k(  sJ || _	        t        ||      rt        j                  |      j                  }d|v r|d   j                  |j                  k7  s@d|v r|d   j                  |j                   k7  s d|v r(|d   j                  |j"                  k7  rt%        d      y y y )	Nr   	Autotuner)kernel_side_tablewarmuprepprune_configs_byz7Only configs and keys are supported for triton.autotuner`   )triton.runtime.autotunerr>  *torch._higher_order_ops.triton_kernel_wrapr?  rp   rq   kernel
add_kernel
kernel_idxgridr   rZ   r[   r]   defaultr@  rA  early_config_pruner
   )	rM   rE  rG  rH  rW   r>  r?  rA   ry   s	           r   rq   zTritonKernelVariable.__init__~  s    6P"6"!!!+66v>!T__
%BBB	fi( ((3>>HX%(8*<*D*D*UX%(5/*A*AVZZ*O&(2 !34<<001 "M 	1 3 )r!   c           	      8   ddl m} ddlm} ddlm} ddlm} | j                  t        d      i t        t        | j                  j                  |            |}t        | j                  |      r.| j                  j                  D 	cg c]  }	|	j                    c}	ni g}
g }|
D ]  }| j                  }t        |t"        t$        f      rW|j'                         D ci c]  \  }}||j)                  |       }}} |i ||t              }|j+                  ||gi       }t        ||      r |j-                  |j/                                t1        dt3        |               t5        t7        |            D ]  }t        ||   t8              st        d	      t7        ||         dk(  r||   d   ddf||<   At7        ||         d
k(  r||   d   ||   d   df||<   gt7        ||         dkD  syt        d       t7        |      dk7  sJ t7        t;        |            dk(  r|d   g}ddlm}  ||t              }|j@                  jC                  d|d| jD                  ||j/                         d       tG        j                  d       S c c}	w c c}}w )Nr   r=  r   )ConstantVariable)r  )BaseListVariablez2Triton kernels should always be called with a gridzgrid for the triton kernel is zOnly tuple grids are supportedr      zGrid can have at most rank 3)triton_kernel_wrapper_mutationrX   r`   )rG  rH  rW   )$rC  r>  r   rL  dictsr  listsrM  rH  r
   r'   r   rE  	arg_namesr   configsrW   r   ri   r%   r#  rX   appendas_proxyr	   typer   r   r&   setrD  rO  r-   create_proxyrG  r   )rM   r   rV   rW   r>  rL  r  rM  normalized_argsconfigrS  gridsconfig_argsrH  r)   r*   metairO  s                      r   rX   z"TritonKernelVariable.call_function  s    	7.,+99RSS OT#dkk&;&;T"BCNvN $++y1 *.)<)<=)<vV]])<= 	
 "K 99D$!;=Q RS ?J>O>O>Q>QdaA'..q11>Q   ))KO)K{)KTR))"tfb9 $ 01T]]_- >tDzlKL# #& s5z"AeAh.!"BCC58}!!!HQKA.aU1X!#!!HQKq!a8aU1X"!"@AA # 5zQs5z?a1XJE	
 !$7
		*"oo--/			
 ))
 	
w >s   J Jc                 V   |dk(  rJ| j                   t        |      dk7  rt        d      t        | j                  | j
                  |d         S |dk(  rCd|vrt        d      |j                  d      }| j                  |	      j                  |||      S t        | )  ||||      S )
N__getitem__r   z7Triton kernels should be called with only a single gridr   )rE  rG  rH  runrH  z/Triton kernel requires to be called with a grid)rH  )rH  r   r
   r;  rE  rG  r2   clonerX   rp   r   )rM   r   r6   rV   rW   rH  ry   s         r   r   z TritonKernelVariable.call_method  s     =  yy$D	Q!M  ({{??!W 
 U]V#!"STT::f%D::4:(66r4HH w"2tT6::r!   rc   )re   rf   rg   rq   rX   r   r   r   s   @r   r;  r;  }  sS    BN
/N
9UN
	N
`; &	;
 -; 
; ;r!   r;  r#   )*r   rZ   r>   r<   typingr   r   rt   r   r   bytecode_transformationr   r   excr	   r
   r   r   r   r   r   utilsr   baser   r   r    r+   r7   rF   rH   ri   r   r   r   r   r   r  r  r  r.  r;  r`   r!   r   <module>rh     s           H , N N  *7.
( *\73 \7~.5- .5b 2 ""6 " n!9 nb//D(< /Dd   FM;? M;r!   