
    ti<                     z    d Z ddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
Z
dZddZddZdd	Zed
k(  r e        yy)zfExample use of Timer and op fuzzers to measure kernel performance.

$ python -m examples.op_benchmark
    N)Timer)BinaryOpFuzzer)UnaryOpFuzzerg      ?c                     t        | j                               t        | j                               k7  rt        d      t        fd| j	                         D              rt        d      y)zBuiltin dict comparison will not compare numpy arrays.
    e.g.
        x = {"a": np.ones((2, 1))}
        x == x  # Raises ValueError
    zdicts must have the same keysc              3   f   K   | ](  \  }}|d k7  st        j                  ||   k7         * yw)dtypeN)npall).0kvdict_1s      q/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/utils/benchmark/examples/op_benchmark.py	<genexpr>z%assert_dicts_equal.<locals>.<genexpr>   s,     
MdaW266!vay.!
Ms   1 1z.dict values differ for keys other than 'dtype'N)setkeysAssertionErrorr
   items)dict_0r   s    `r   assert_dicts_equalr      sU     6;;=S//<==

Mflln
MMMNN N    c                     |dt         j                        j                  |       } |dt         j                        j                  |       }g }t	        t        ||d            D ]  \  }\  }}|\  }	}
}|\  }}}t        ||       t        |
d   |d          fd|	|fD        \  }}g }|	D ]  }ddj                  |	|   j                  D cg c]W  }d	t        t        j                  |            z  |k(  r&|d
kD  r!dt        t        j                  |             n
t        |      Y c}      z   dz   }|
|   d   }t        |t        j                  t        |            k(        rdnt        t!        |            }|
|   d   }t#        |      t        |      kD  rt        |      nd}|j%                  ||||f        |j%                  |||f       t'        dd
z    d|  d        t'                g ddddf\  }}}}}|D ]  \  }}}|j(                  dz  }|j(                  dz  }t+        ||z
        ||z   z  d	z  }|j%                  ||||f       |D ][  \  }} }}t-        |t        |            }t-        |t        |             }t-        |t        |            }t-        |t        |            }]  |j/                  t1        j2                  d	             t'        d        t'        dddd|z   dd       t'        dj5                  |       dddj5                  |       d       t'        dd        |d d df|dd  dffD ]  \  }!}"|!D ]  \  }}}}|d z  d!d"||k  rd#nd$d%g}#|#j7                  |d d& D $cg c]  }$dj5                  t        |#d               ! c}$       t        |#|d      D ]_  \  }%\  }} }}| d'j5                  |d
z         }| j5                  |dz         } |j5                  |      }t'        |% d| d(|  d)| d*| 	       a  t'        |"        y c c}w c c}$w )+Nr   )seedr   T)strictxc              3   `   K   | ]%  }t        |       j                  t               ' yw))globals)min_run_timeN)r   blocked_autorange_MEASURE_TIME)r   tensorsstmts     r   r   zrun.<locals>.<genexpr>,   s;      .

 	   ];<.
s   +.(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)23z8TX3Y)Z  *%%L*;G8*L5?2&
 	<4.s35Fs5KL.

 *;7.
*? ! 	IDdii 't,22	)  BGGAJ'1,Q BGGAJ()V)  
 I (-g6E"5BIIc%j,A#ABERWLHYI'-g6E&)%j3u:&=E
2Iy)Y GH	I 	-MN1q5'QC b)A *B 
G@BAq!Q=NHiI<G 	38?L#**S0&&,w'7U?;a?wxFG)5 	3%D%8SY/HIs5z2IIs5z2IIs5z2I		3	3 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= 	P2GUHl#c>%0uweT[\_5`abHOOcrARSARXXc(1+&67ST69(LY]6^ P22eUEqz''15IN3I.qbveWJugNO	P	P 	f	E)J Ts   AP8$P=c                  p    t        ddt               t        ddt               t        ddt               y )Nr0   ztorch.median(x, dim=0))rL   r"   rM   ztorch.square(x)zx + y)rn   r   r    r   r   mainrq   d   s(    #,G#%-@#G7r   __main__)returnN)__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>rz      sK   
   ' B @  	OBJ8 zF r   