ó
    ²“,jÎ
  ã                   óÂ   • S SK r S SKr SSKJrJr  S SKJr  \ R                  R                  S 5        S r
S rSS jrSS jrSS	 jrSS
 jrSS jr\(       a  \" 5         gg)é    Né   )ÚgemmÚeinsum)Údefault_timerc                 ó  • [         R                  " X!4SS9nU[         R                  R                  SSUR                  5      -  n[         R                  " X4SS9nU[         R                  R                  SSUR                  5      -  nX44$ )NÚf©Údtypeg      ð¿g      ð?)ÚnumpyÚzerosÚrandomÚuniformÚshape)ÚnOÚnIÚ
batch_sizeÚXÚWs        ÚœC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\blis/benchmark.pyÚcreate_datar   
   sp   € Ü�Š�ZÐ$¨CÑ0€AØŒ�‰×	Ñ	˜d C¨¯©Ó	1Ñ1€AÜ�Š�R�H CÑ(€AØŒ�‰×	Ñ	˜d C¨¯©Ó	1Ñ1€AØˆ4€Kó    c                  óF   • [         R                  R                  S   n U S   $ )NÚ	librariesr   )r   Ú
__config__Úblas_opt_info)Ú	blas_libss    r   Úget_numpy_blasr      s"   € Ü× Ñ ×.Ñ.¨{Ñ;€IØ�Q‰<Ðr   c                 ó  • UR                   u  p4U R                   S   nSn[        R                  " XS4SS9n[        U5       H;  n[        R                  " XUS9  XgR                  5       -  nUR                  S5        M=     [        SU5        g ©Nr   ç        r   r	   ©ÚoutúTotal:)r   r   r   ÚrangeÚdotÚsumÚfillÚprint©	r   r   Únr   r   r   ÚtotalÚyÚis	            r   Ú
numpy_gemmr.      ss   € Ø�W‰W�F€BØ—‘˜‘€JØ€EÜ�Š�ZÐ$¨CÑ0€AÜ�1ŽXˆÜ�	Š	�!˜AÒØ—‘“ÑˆØ	�‰ˆqŽ	ñ ô 
ˆ(�EÕr   c                 ó  • UR                   u  p4U R                   S   nSn[        R                  " XS4SS9n[        U5       H0  n[	        XUS9  XgR                  5       -  nUR                  S5        M2     [        SU5        g r   )r   r   r   r$   r   r&   r'   r(   r)   s	            r   Ú	blis_gemmr0   #   so   € Ø�W‰W�F€BØ—‘˜‘€JØ€EÜ�Š�ZÐ$¨CÑ0€AÜ�1ŽXˆÜˆQ�qÒØ—‘“ÑˆØ	�‰ˆsŽñ ô 
ˆ(�EÕr   c                 ó  • UR                   u  p4U R                   S   nSn[        R                  " X54SS9n[        U5       H<  n[        R                  " SXUS9  XgR                  5       -  nUR                  S5        M>     [        SU5        g ©Nr   r    r   r	   z	ab,cb->car!   r#   ©r   r   r   r$   r   r&   r'   r(   r)   s	            r   Únumpy_einsumr4   /   su   € Ø�W‰W�F€BØ—‘˜‘€JØ€EÜ�Š�RÐ$¨CÑ0€AÜ�1ŽXˆÜ�Š�[ !¨AÒ.Ø—‘“ÑˆØ	�‰ˆsŽñ ô 
ˆ(�EÕr   c                 ó  • UR                   u  p4U R                   S   nSn[        R                  " X54SS9n[        U5       H1  n[	        SXUS9  XgR                  5       -  nUR                  S5        M3     [        SU5        g r2   r3   r)   s	            r   Úblis_einsumr6   ;   sq   € Ø�W‰W�F€BØ—‘˜‘€JØ€EÜ�Š�RÐ$¨CÑ0€AÜ�1ŽXˆÜˆ{˜A aÒ(Ø—‘“ÑˆØ	�‰ˆsŽñ ô 
ˆ(�EÕr   c                 ó¢  • [        SR                  " S	0 [        5       D65        [        5       n[	        XU5      u  pEUR                  5       nUR                  5       n[        S5        [        5       n[        XgSS9  [        5       n	X˜-
  n
[        SU
-  5        [        SU-  5        [        5       n[        XE5        [        5       n	X˜-
  n[        SU-  5        [        S5        [        5       n[        XgSS9  [        5       n	X˜-
  n
[        SU
-  5        [        SU-  5        [        5       n[        Xg5        [        5       n	X˜-
  n[        SU-  5        g )
NzNSetting up data for gemm. 1000 iters,  nO={nO} nI={nI} batch_size={batch_size}zBlis gemm...éè  )r*   z%.2f secondszNumpy (%s) gemm...zBlis einsum ab,cb->cazNumpy (%s) einsum ab,cb->ca© )r(   ÚformatÚlocalsr   r   ÚcopyÚtimerr0   r.   r6   r4   )r   r   r   Ú
numpy_blasÚX1ÚW1ÚX2ÚW2ÚstartÚendÚ	blis_timeÚ
numpy_times               r   ÚmainrG   G   s1  € Ü	ð	2ß28±&ð	9ñ 	EÜ;A»8ñ	Eôô  Ó!€JÜ˜ Ó,�F€BØ	�‰‹€BØ	�‰‹€BÜ	ˆ.ÔÜ‹G€EÜˆb˜ÒÜ
‹'€CØ‘€IÜ	ˆ.˜9Ñ
$Ô%Ü	Ð
 Ñ
+Ô,Ü‹G€EÜˆrÔÜ
‹'€CØ‘€JÜ	ˆ.˜:Ñ
%Ô&Ü	Ð
!Ô"Ü‹G€EÜ�˜$ÒÜ
‹'€CØ‘€IÜ	ˆ.˜9Ñ
$Ô%Ü	Ð
'¨*Ñ
4Ô5Ü‹G€EÜ�ÔÜ
‹'€CØ‘€JÜ	ˆ.˜:Ñ
%Õ&r   )r8   )é€  rH   iÐ  )r   Únumpy.randomÚpyr   r   Útimeitr   r=   r   Úseedr   r   r.   r0   r4   r6   rG   Ú__name__r9   r   r   Ú<module>rN      sV   ðã Û ß Ý )à ‡�× Ñ �!Ô òòô
	ô	ô	ô	ô 'öF Ù…Fð r   