
    hc
                         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        H/home/james-whalen/.local/lib/python3.13/site-packages/blis/benchmark.pycreate_datar   
   sp    Z$C0A		dC	11ARHC(A		dC	11A4K    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    WWFBJEZ$C0A1X		!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    WWFBJEZ$C0A1XQq	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    WWFBJER$C0A1X[!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    WWFBJER$C0A1X{Aa(	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   		228&	9 	E;A8	E  !J,FB	B	B	.GEb
'CI	.9
$%	

+,GEr
'CJ	.:
%&	
!"GE$
'CI	.9
$%	
'*
45GE
'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   