Ë
    [^(hƒ  ã                   ót   — 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„ Zd„ Z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                  «       «      k(  sJ ‚t        ˆfd„| j                  «       D «       «      sJ ‚y)z‹Builtin dict comparison will not compare numpy arrays.
    e.g.
        x = {"a": np.ones((2, 1))}
        x == x  # Raises ValueError
    c              3   óf   •K  — | ](  \  }}|d k7  sŒt        j                  |‰|   k(  «      –— Œ* y­w)ÚdtypeN)ÚnpÚall)Ú.0ÚkÚvÚdict_1s      €úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/utils/benchmark/examples/op_benchmark.pyú	<genexpr>z%assert_dicts_equal.<locals>.<genexpr>   s,   øè ø€ ÒQ©$¨!¨QÀAÈÃLŒr�v‰v�a˜6 !™9‘n×%ÑQùs   ƒ1‘ 1N)ÚsetÚkeysr
   Úitems)Údict_0r   s    `r   Úassert_dicts_equalr      sC   ø€ ô ˆv�{‰{‹}Ó¤ V§[¡[£]Ó!3Ò3Ð3Ð3ÜÓQ°&·,±,³.ÔQÔQÐQÑQó    c                 ó|  ‡—  |dt         j                  ¬«      j                  | «      } |dt         j                  ¬«      j                  | «      }g }t	        t        ||«      «      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%�j5                  |dz   «      }| j5                  |dz   «      } |j5                  |«      }t'        |%› d|› d&| › d'|› d(|› �	«       Œa ŒÈ t'        |"«       ŒÝ y c c}w c c}$w ))Nr   )Úseedr   Ú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...iöÿÿÿéd   z>4.1fz%    ÚintÚfloatz<20éÿÿÿÿú:z  z|     z
      |   )ÚtorchÚfloat32ÚtakeÚint32Ú	enumerateÚzipr   Újoinr,   r/   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   Úrunrl      s¯  ø€ Ù ¬%¯-©-Ô8×=Ñ=¸aÓ@€JÙ˜q¬¯©Ô4×9Ñ9¸!Ó<€HØ€KÜ)2´3°zÀ8Ó3LÓ)Mó  *Ñ%ˆÑ%ˆL˜*Ø;GÑ8ˆÐ*¨LØ5?Ñ2ˆÐ&¨
ô 	˜<¨Ô4ÜÐ.¨sÑ3Ð5FÀsÑ5KÔLó.
ð
 *¨;Ð7ô.
Ñ*Ð˜?ð ˆØ!ó 	IˆDØ˜dŸi™ið ' tÑ,×2Ñ2ö	)ð ð œœBŸG™G A›J›Ñ'¨1Ò,°°Q²ð œœBŸG™G A›J›Ð(Ñ)ä˜“Vñò)ó ñ ð
 ñˆIð (¨Ñ-¨gÑ6ˆEÜ" 5¬B¯I©I´c¸%³jÓ,AÑ#AÔB™ÌÌEÐRWËLÓHYˆIØ'¨Ñ-¨gÑ6ˆEÜ&)¨%£j´3°u³:Ò&=œ˜Eœ
À2ˆIØ×Ñ  y°)¸YÐ GÖHð	Ið 	×ÑÐ-¨ÀÐMÔNä��1�q‘5�'˜˜Q˜CÐ  b×)ðA *ôB 
„Gà@BÀAÀqÈ!ÈQÀÑ=€N�H˜i¨°IØ<Gò 	3Ñ8Ð˜?¨LØ#×*Ñ*¨SÑ0ˆØ×&Ñ&¨Ñ,ˆÜ�w ‘Ó'¨7°U©?Ñ;¸aÑ?ˆØ×Ñ˜w¨¨x¸ÐFÔGØ)5ò 	3Ñ%ˆD�%˜ Ü˜8¤S¨£YÓ/ˆHÜ˜I¤s¨5£zÓ2ˆIÜ˜I¤s¨5£zÓ2ˆIÜ˜I¤s¨5£zÓ2‰Iñ		3ð	3ð ×ÑœH×/Ñ/°Ó2ÐÔ3ä	ˆF�4�&ˆ/ÔÜ	ˆO˜B˜s˜8 C¨(¡NÐ#3°1Ð
5¸2Õ>Ü	ˆW�]‰]˜9Ó%Ð& r¨# h¨w¯}©}¸YÓ/GÐ.HÐ
IÈrÕRÜ	Ð˜i˜[Ð
)Ô*Ø+¨C¨RÐ0°%Ð8¸>È#È$Ð;OÐQSÐ:TÐUò 	‰ˆ�Ø6=ò 	PÑ2ˆG�U˜H lØ# c™>¨%Ð0°¸uÀwº±eÐT[Ð\_Ð5`ÐaÐbˆHØ�O‰OÀÈcÈrÐARÖS¸A˜RŸX™X¤c¨(°1©+Ó&6Õ7ÒSÔTÜ69¸(ÀLÓ6Qò PÑ2�Ñ2˜˜e U¨EØ˜˜q�z×'Ñ'¨°1©Ó5�ØŸ™ I°¡NÓ3�ØŸ™ IÓ.�Ü˜˜˜q   b¨¨¨v°e°W¸JÀuÀgÐNÕOñ	Pð	Pô 	ˆf�ñ	ùòE)ùòJ Ts   ÃAP4Î$P9c                  óp   — t        ddt        ¬«       t        ddt        ¬«       t        ddt        ¬«       y )Nr.   ztorch.median(x, dim=0))rJ   r    rK   ztorch.square(x)zx + y)rl   r   r   © r   r   Úmainro   b   s(   € Üˆ#Ð,¼ÕGÜˆ#Ð%´-Õ@Üˆ#�G¬Ö7r   Ú__main__)Ú__doc__Únumpyr	   r3   Útorch.utils.benchmarkr   Ú'torch.utils.benchmark.op_fuzzers.binaryr   Ú&torch.utils.benchmark.op_fuzzers.unaryr   rF   r   r   rl   ro   Ú__name__rn   r   r   ú<module>rw      sK   ðñó
 Û å 'Ý BÝ @Û ð €òRòBòJ8ð ˆzÒÙ…Fð r   