
    sh                     v    S r SSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
r
SrS rS rS	 r\S
:X  a  \" 5         gg)zfExample use of Timer and op fuzzers to measure kernel performance.

$ python -m examples.op_benchmark
    N)Timer)BinaryOpFuzzer)UnaryOpFuzzerg      ?c                    ^ [        U R                  5       5      [        U R                  5       5      :X  d   e[        U4S jU R                  5        5       5      (       d   eg)z{Builtin dict comparison will not compare numpy arrays.
e.g.
    x = {"a": np.ones((2, 1))}
    x == x  # Raises ValueError
c              3   p   >#    U  H+  u  pUS :w  d  M  [         R                  " UTU   :H  5      v   M-     g7f)dtypeN)npall).0kvdict_1s      /Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/utils/benchmark/examples/op_benchmark.py	<genexpr>%assert_dicts_equal.<locals>.<genexpr>   s0     Q.$!AL%rvva6!9n%%.s   6#6N)setkeysr
   items)dict_0r   s    `r   assert_dicts_equalr      sF     v{{}V[[]!3333Q&,,.QQQQQ    c                   ^ U" S[         R                  S9R                  U 5      nU" S[         R                  S9R                  U 5      n/ n[	        [        X45      5       GH  u  nu  pxUu  pnUu  pn[        X5        [        U
S   US   5        U4S jX4 5       u  nn/ nU	 GH   nSSR                  U	U   R                   Vs/ s H\  nS[        [        R                  " U5      5      -  U:X  a(  US:  a"  S	[        [        R                  " U5      5       3O
[        U5      PM^     sn5      -   S
-   nU
U   S   n[        U[        R                  " [        U5      5      :H  5      (       a  SO[        [!        U5      5      nU
U   S   n[#        U5      [        U5      :  a  [        U5      OSnUR%                  UUUU45        GM#     UR%                  UUU45        ['        SWS-    SU  3SS9  GM     ['        5         / SSSS4u  nnnnnU H  u  nnnUR(                  S-  nUR(                  S-  n[+        UU-
  5      UU-   -  S-  nUR%                  UUUU45        U H\  u  nn nn[-        U[        U5      5      n[-        U[        U 5      5      n[-        U[        U5      5      n[-        U[        U5      5      nM^     M     UR/                  [0        R2                  " S5      S9  ['        ST 35        ['        SSS SU-   S3SS9  ['        SR5                  U5       SS SR5                  U5       3SS9  ['        SS 35        US S S4USS  S44 H  u  n!n"U! H  u  nnnnUS-  S S UU:  a  S!OS"S# 3/n#U#R7                  US S$  V$s/ s H   n$SR5                  [        U#S   5      5      PM"     sn$5        [        U#U5       H`  u  n%u  nn nnU S%3R5                  US-   5      nU R5                  US-   5      n UR5                  U5      n['        U% SU S&U  S'U S(U 3	5        Mb     M     ['        U"5        M     g s  snf s  sn$f ))Nr   )seedr   xc              3   Z   >#    U  H   n[        TUS 9R                  [        S9v   M"     g7f))globals)min_run_timeN)r   blocked_autorange_MEASURE_TIME)r   tensorsstmts     r   r   run.<locals>.<genexpr>*   s<      .

 8	   ];< 8s   (+(z,       z2 ** )order stepsz / )endg    .A)keyzstmt: z diff    fasterz>17 shapez>16z          steps
zd----------------------------------------------------------------------------------------------------
   z...id   z>4.1fz%    intfloatz<20:z  z|     z
      |   )torchfloat32takeint32	enumeratezipr   joinr.   r1   r	   log2strr
   arangelentuplesumappendprintmedianabsmaxsortoperator
itemgetterljustextend)&nr!   
fuzzer_cls
float_iterint_iterraw_resultsifloat_values
int_valuesfloat_tensorsfloat_tensor_paramsfloat_paramsint_tensorsint_tensor_params
int_paramsfloat_measurementint_measurementdescriptionsname	shape_strr'   	order_strr)   	steps_strparsed_resultsname_len	shape_len	order_len	steps_lent_floatt_intrel_diffr.   resultsspacertime_str_t_strs&    `                                    r   runrn      s   %--8==a@Jq499!<HK)23z3L)M%%L;G8L5?2
 	<4.s35Fs5KL.

 *7.
*? !Ddii 't,22	) 3A BGGAJ'1,Q BGGAJ()V 3	)  
 I (-g6E"5BIIc%j,A#ABBERWLHYI'-g6E&)%j3u:&=E
2Iy)Y GH " 	-MN1q5'QC b)A *NB 
G@BAq!Q=NHiI<G8?L#**S0&&,w'7U?;a?wxFG)5%D%8SY/HIs5z2IIs5z2IIs5z2I	 *6 =H H//23	F4&/	OBs8C(N#31
52>	W]]9%&r#hw}}Y/G.H
IrR	i[
)*+CR0%8>#$;OQS:TU6=2GUHl#c>%0uweT[\_5`abHOOcrARSARARXXc(1+&67ARST69(L6Q22eUEqz''15IN3I.qbveWJugNO	 7R 7> 	f VE)J Ts   A#P>'Qc                  ^    [        SS[        S9  [        SS[        S9  [        SS[        S9  g )Nr0   ztorch.median(x, dim=0))rL   r!   rM   ztorch.square(x)zx + y)rn   r   r    r   r   mainrq   b   s(    #,G#%-@#G7r   __main__)__doc__numpyr	   r5   torch.utils.benchmarkr   'torch.utils.benchmark.op_fuzzers.binaryr   &torch.utils.benchmark.op_fuzzers.unaryr   rH   r   r   rn   rq   __name__rp   r   r   <module>ry      sK   
   ' B @  RBJ8 zF r   