
    biH                     l   d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZmZmZmZ d dlZdZd Z G d d	      Z	  G d
 de      Z G d de      Z	  G d de      Z  G d de      Z! G d d      Z"	  G d de"      Z# G d de"      Z$	  G d de"      Z% G d de"      Z& G d  d!      Z'	  G d" d#e'      Z( G d% d&e'      Z)	  G d' d(e'      Z* G d* d+e'      Z+ G d, d-      Z,	  G d. d/e,      Z- G d1 d2e,      Z.	  G d3 d4e,      Z/ G d6 d7e,      Z0 G d8 d9      Z1	  G d: d;e1      Z2 G d= d>e1      Z3	  G d? d@e1      Z4 G dB dCe1      Z5	 y# e$ r  G d d      ZY w xY w# e$ r  G d d      Z Y w xY w# e$ r  G d d      Z#Y 
w xY w# e$ r  G d d      Z%Y 	w xY w# e$ r  G d$ d#      Z(Y w xY w# e$ r  G d) d(      Z*Y w xY w# e$ r  G d0 d/      Z-Y w xY w# e$ r  G d5 d4      Z/Y w xY w# e$ r  G d< d;      Z2Y w xY w# e$ r  G dA d@      Z4Y w xY w)D    )productN)float32float64	complex64
complex128arangearrayzerosshape	transposenewaxiscommon_type	conjugate)_fblas)assert_array_equalassert_allcloseassert_array_almost_equalassert_   c                 4   t        |j                        dk(  rd}|d d t        f   }nd}t        | j                  d   |j                  d   k(         t	        | j                  d   |j                  d   ft        | |            }t        | j                  d         D ]W  }t        |j                  d         D ]:  }d}t        | j                  d         D ]  }|| ||f   |||f   z  z  } ||||f<   < Y |r|j                  | j                  d   f      }|S )N   TFr   )lenr   r   r   r
   r   rangereshape)abb_is_vectorcijsks           X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/linalg/tests/test_fblas.pymatrixmultiplyr$      s   
177|qajMAGGAJ!''!*$%qwwqz1771:&Aq(9:A1771: qwwqz" 	AA1771:& 'Qq!tWqAw&&'AadG		 IIqwwqzm$H    c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
BaseAxpyz Mixin class for axpy tests c                     t        d| j                        }t        d|j                        }|dz  |z   }| j                  ||      }t        ||       y )N      @dtype      ?r   r+   	blas_funcr   selfxyreal_ys       r#   test_default_azBaseAxpy.test_default_a6   sI    2TZZ(2QWW%2aNN1a 61%r%   c                     t        d| j                        }t        d|j                        }|dz  |z   }| j                  ||d      }t        ||       y )Nr)   r*   )r   r-   r/   s       r#   test_simplezBaseAxpy.test_simple=   sM    2TZZ(2QWW%2aNN1a2N&61%r%   c                     t        d| j                        }t        d|j                        }t        d|j                        }|d d d   dz  |z   }| j                  ||ddd      }t	        ||       y )N      @r*      r)      )r   nincxr   r+   r
   r.   r   r/   s       r#   test_x_stridezBaseAxpy.test_x_strideD   si    2TZZ(!QWW2QWW%3Q31NN1a2N361%r%   c                     t        d| j                        }t        d|j                        }|dz  |d d d   z   }| j                  ||ddd      }t	        ||d d d          y )Nr)   r*      r:   r9   )r   r;   incyr=   r/   s       r#   test_y_stridezBaseAxpy.test_y_strideL   sa    2TZZ(!QWW2a!fNN1a2N361SqS6*r%   c                     t        d| j                        }t        d|j                        }|d d d   dz  |d d d   z   }| j                  ||dddd      }t	        ||d d d          y )	N      (@r*   r@      r)   r:   r9   )r   r;   r<   rA   r=   r/   s       r#   test_x_and_y_stridezBaseAxpy.test_x_and_y_strideS   sl    3djj)!QWW3Q31SqS6!NN1a2N;61SqS6*r%   c                     t        d| j                        }t        d|j                        }t        j                  t
        d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY w	NrD   r*   r@   failed for 1st keywordmatchrE   r   r;   r<   r   r+   r
   pytestraises	Exceptionr.   r0   r1   r2   s      r#   test_x_bad_sizezBaseAxpy.test_x_bad_sizeZ   Z    3djj)!QWW]]9,DE 	.NN1a11N-	. 	. 	.   	A((A1c                     t        d| j                        }t        d|j                        }t        j                  t
        d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY w	NrD   r*   r@   rI   rJ   r9   r   r;   rA   rM   rQ   s      r#   test_y_bad_sizezBaseAxpy.test_y_bad_size`   rS   rT   N)__name__
__module____qualname____doc__r4   r6   r>   rB   rF   rR   rX    r%   r#   r'   r'   3   s(    &&&&++..r%   r'   c                   (    e Zd Zej                  ZeZy	TestSaxpyN)rY   rZ   r[   fblassaxpyr.   r   r+   r]   r%   r#   r`   r`   h       KK	r%   r`   c                       e Zd Zyr_   rY   rZ   r[   r]   r%   r#   r`   r`   l       r%   c                   (    e Zd Zej                  ZeZy)	TestDaxpyN)rY   rZ   r[   ra   daxpyr.   r   r+   r]   r%   r#   rh   rh   p       IEr%   rh   c                   (    e Zd Zej                  ZeZy	TestCaxpyN)rY   rZ   r[   ra   caxpyr.   r   r+   r]   r%   r#   rm   rm   v       KK	r%   rm   c                       e Zd Zyrl   re   r]   r%   r#   rm   rm   z   rf   r%   c                   (    e Zd Zej                  ZeZy)	TestZaxpyN)rY   rZ   r[   ra   zaxpyr.   r   r+   r]   r%   r#   rr   rr   ~       IEr%   rr   c                   "    e Zd ZdZd Zd Zd Zy)BaseScalz Mixin class for scal testing c                 x    t        d| j                        }|dz  }| j                  d|      }t        ||       y Nr)   r*   r-   r0   r1   real_xs      r#   r6   zBaseScal.test_simple   s5    2TZZ(2NN2q!61%r%   c                     t        d| j                        }|j                         }|d d d   t        d| j                        z  |d d d<   | j	                  d|dd      }t        ||       y )Nr8   r*   r:   r)   r9   rL   )r   r+   copyr	   r.   r   ry   s      r#   r>   zBaseScal.test_x_stride   sb    2TZZ(!fU2tzz22ssNN2qAAN.61%r%   c                     t        d| j                        }t        j                  t        d      5  | j                  d|dd       d d d        y # 1 sw Y   y xY w)	NrD   r*   rI   rJ   g       @rE   r   rL   )r   r+   rN   rO   rP   r.   )r0   r1   s     r#   rR   zBaseScal.test_x_bad_size   sJ    3djj)]]9,DE 	/NN2qAAN.	/ 	/ 	/s   AAN)rY   rZ   r[   r\   r6   r>   rR   r]   r%   r#   rv   rv      s    (&&/r%   rv   c                   (    e Zd Zej                  ZeZy	TestSscalN)rY   rZ   r[   ra   sscalr.   r   r+   r]   r%   r#   r   r      rc   r%   r   c                       e Zd Zyr   re   r]   r%   r#   r   r      rf   r%   c                   (    e Zd Zej                  ZeZy)	TestDscalN)rY   rZ   r[   ra   dscalr.   r   r+   r]   r%   r#   r   r      rj   r%   r   c                   (    e Zd Zej                  ZeZy	TestCscalN)rY   rZ   r[   ra   cscalr.   r   r+   r]   r%   r#   r   r      ro   r%   r   c                       e Zd Zyr   re   r]   r%   r#   r   r      rf   r%   c                   (    e Zd Zej                  ZeZy)	TestZscalN)rY   rZ   r[   ra   zscalr.   r   r+   r]   r%   r#   r   r      rt   r%   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	BaseCopyz Mixin class for copy testing c                     t        d| j                        }t        t        |      |j                        }| j	                  ||      }t        ||       y rx   )r   r+   r
   r   r.   r   rQ   s      r#   r6   zBaseCopy.test_simple   s@    2TZZ(%(AGG$NN1a 1a r%   c                     t        d| j                        }t        d|j                        }| j                  ||dd      }t	        |d d d   |       y Nr8   r*   r9   r:   rL   r=   rQ   s      r#   r>   zBaseCopy.test_x_stride   sJ    2TZZ(!QWWNN1a11N-1SqS61%r%   c                     t        d| j                        }t        d|j                        }| j                  ||dd      }t	        ||d d d          y )Nr)   r*   r@   r9   r:   rW   r=   rQ   s      r#   rB   zBaseCopy.test_y_stride   sJ    2TZZ(!QWWNN1a11N-1a!f%r%   c                     t        d| j                        }t        d|j                        }| j                  ||ddd      }t	        |d d d   |d d d          y )NrD   r*   r@   r9   rE   r:   r;   r<   rA   r=   rQ   s      r#   rF   zBaseCopy.test_x_and_y_stride   sT    3djj)!QWWNN1a111N51SqS61SqS6*r%   c                     t        d| j                        }t        d|j                        }t        j                  t
        d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY wrH   rM   rQ   s      r#   rR   zBaseCopy.test_x_bad_size   rS   rT   c                     t        d| j                        }t        d|j                        }t        j                  t
        d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY wrV   rM   rQ   s      r#   rX   zBaseCopy.test_y_bad_size   rS   rT   N
rY   rZ   r[   r\   r6   r>   rB   rF   rR   rX   r]   r%   r#   r   r      s#    (!&&+..r%   r   c                   (    e Zd Zej                  ZeZy	TestScopyN)rY   rZ   r[   ra   scopyr.   r   r+   r]   r%   r#   r   r      rc   r%   r   c                       e Zd Zyr   re   r]   r%   r#   r   r      rf   r%   c                   (    e Zd Zej                  ZeZy)	TestDcopyN)rY   rZ   r[   ra   dcopyr.   r   r+   r]   r%   r#   r   r      rj   r%   r   c                   (    e Zd Zej                  ZeZy	TestCcopyN)rY   rZ   r[   ra   ccopyr.   r   r+   r]   r%   r#   r   r      ro   r%   r   c                       e Zd Zyr   re   r]   r%   r#   r   r      rf   r%   c                   (    e Zd Zej                  ZeZy)	TestZcopyN)rY   rZ   r[   ra   zcopyr.   r   r+   r]   r%   r#   r   r     rt   r%   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	BaseSwapz Mixin class for swap tests c                 
   t        d| j                        }t        t        |      |j                        }|j	                         }|j	                         }| j                  ||      \  }}t        ||       t        ||       y rx   )r   r+   r
   r   r|   r.   r   r0   r1   r2   	desired_x	desired_ys        r#   r6   zBaseSwap.test_simple  sd    2TZZ(%(AGG$FFH	FFH	~~a#19a(9a(r%   c                    t        d| j                        }t        d|j                        }|j                         }|j                         d d d   }| j	                  ||dd      \  }}t        ||d d d          t        ||       y r   r   r+   r
   r|   r.   r   r   s        r#   r>   zBaseSwap.test_x_stride  sv    2TZZ(!QWWFFH	FFHSqSM	~~aaa~019a!f-9a(r%   c                    t        d| j                        }t        d|j                        }|j                         d d d   }|j                         }| j	                  ||dd      \  }}t        ||       t        ||d d d          y )Nr)   r*   r@   r:   r9   rW   r   r   s        r#   rB   zBaseSwap.test_y_stride  sv    2TZZ(!QWWFFHSqSM	FFH	~~aaa~019a(9a!f-r%   c                 0   t        d| j                        }t        d|j                        }|j                         d d d   }|j                         d d d   }| j	                  ||ddd      \  }}t        ||d d d          t        ||d d d          y )NrD   r*   r@   r:   rE   r9   r   r   r   s        r#   rF   zBaseSwap.test_x_and_y_stride'  s    3djj)!QWWFFHSqSM	FFHSqSM	~~aaaa~819a!f-9a!f-r%   c                     t        d| j                        }t        d|j                        }t        j                  t
        d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY wrH   rM   rQ   s      r#   rR   zBaseSwap.test_x_bad_size0  rS   rT   c                     t        d| j                        }t        d|j                        }t        j                  t
        d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY wrV   rM   rQ   s      r#   rX   zBaseSwap.test_y_bad_size6  rS   rT   Nr   r]   r%   r#   r   r   	  s#    &))....r%   r   c                   (    e Zd Zej                  ZeZy	TestSswapN)rY   rZ   r[   ra   sswapr.   r   r+   r]   r%   r#   r   r   >  rc   r%   r   c                       e Zd Zyr   re   r]   r%   r#   r   r   B  rf   r%   c                   (    e Zd Zej                  ZeZy)	TestDswapN)rY   rZ   r[   ra   dswapr.   r   r+   r]   r%   r#   r   r   F  rj   r%   r   c                   (    e Zd Zej                  ZeZy	TestCswapN)rY   rZ   r[   ra   cswapr.   r   r+   r]   r%   r#   r   r   L  ro   r%   r   c                       e Zd Zyr   re   r]   r%   r#   r   r   P  rf   r%   c                   (    e Zd Zej                  ZeZy)	TestZswapN)rY   rZ   r[   ra   zswapr.   r   r+   r]   r%   r#   r   r   T  rt   r%   r   c                   T    e Zd ZdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)BaseGemvz Mixin class for gemv tests c                 D   t         j                  j                  d      }t        d| j                        }| j                  t
        t        fv rt        d| j                        }t        d| j                        |z  }t        d| j                        |z  }|j                  ddd      j                  | j                        |z  }t        t        |      d   |z  | j                        |z  }t        t        |      d   |z  | j                        |z  }	|||||	fS )	N  r   r*   y      ?      ?r,   g        )r9   r9   r   )nprandomdefault_rngr	   r+   r   r   normalastyper   r   )
r0   x_stridey_striderngmultalphabetar   r1   r2   s
             r#   get_datazBaseGemv.get_data`  s    ii##D)Qdjj)::)Z00TZZ0Db

+d2Rtzz*T1JJr2v&--djj9D@58A;x'tzz:TA58A;x'tzz:TAdAq!##r%   c                     | j                         \  }}}}}|t        ||      z  ||z  z   }| j                  |||||      }t        ||       y Nr   r$   r.   r   r0   r   r   r   r1   r2   r   s          r#   r6   zBaseGemv.test_simplel  sR    #}}tQ1.A..tAv5	NN5!Qa0!)Q/r%   c                     | j                         \  }}}}}t        ||      }| j                  d||      }t        ||       y )Nr   r   r   s          r#   test_default_beta_yzBaseGemv.test_default_beta_yr  s@    #}}tQ1"1a(	NN1a#!)Q/r%   c                     | j                         \  }}}}}|t        t        |      |      z  ||z  z   }| j                  |||||d      }t	        ||       y )Nr   transr   r$   r   r.   r   r   s          r#   test_simple_transposezBaseGemv.test_simple_transposex  sZ    #}}tQ1.1q99$q&@	NN5!QaqN9!)Q/r%   c                     | j                         \  }}}}}|t        t        t        |            |      z  ||z  z   }| j	                  |||||d      }t        ||       y )Nr:   r   )r   r$   r   r   r.   r   r   s          r#   test_simple_transpose_conjz#BaseGemv.test_simple_transpose_conj~  s_    #}}tQ1.9Q<)@!DDT!VK	NN5!QaqN9!)Q/r%   c                     | j                  d      \  }}}}}|t        ||d d d         z  ||z  z   }| j                  |||||d      }t        ||       y )Nr:   r   )r<   r   r   s          r#   r>   zBaseGemv.test_x_stride  sc    #}}a}8tQ1.AccF33DF:	NN5!QaaN8!)Q/r%   c           	          | j                  d      \  }}}}}|t        t        |      |d d d         z  ||z  z   }| j                  |||||dd      }t	        ||       y )Nr:   r   r   r   r<   r   r   s          r#   test_x_stride_transposez BaseGemv.test_x_stride_transpose  si    #}}a}8tQ1.1q1v>>tAvE	NN5!QaqqNA!)Q/r%   c           
      T   | j                  d      \  }}}}}t        j                  t        d      5  | j	                  d||d|dd      }d d d        t        j                  t        d      5  | j	                  d||d|dd      }d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)	Nr:   r   zfailed for 3rd argumentrJ   r   r   r9   r   r   rN   rO   rP   r.   r0   r   r   r   r1   r2   s         r#   test_x_stride_assertzBaseGemv.test_x_stride_assert  s    #}}a}8tQ1]]9,EF 	?q!Q1AA>A	?]]9,EF 	?q!Q1AA>A	? 	?	? 	?	? 	?   B0BBB'c                     | j                  d      \  }}}}}|j                         }|t        ||      z  ||d d d   z  z   |d d d<   | j                  |||||d      }t	        ||       y )Nr:   r   )rA   )r   r|   r$   r.   r   r   s          r#   rB   zBaseGemv.test_y_stride  sv    #}}a}8tQ1FFH	~a33D3Q3K?	#A#NN5!QaaN8!)Q/r%   c           	          | j                  d      \  }}}}}|j                         }|t        t        |      |      z  ||d d d   z  z   |d d d<   | j	                  |||||dd      }t        ||       y )Nr:   r   r   r   rA   )r   r|   r$   r   r.   r   r   s          r#   test_y_stride_transposez BaseGemv.test_y_stride_transpose  s|    #}}a}8tQ1FFH	~ilA>>tAccF{J	#A#NN5!QaqqNA!)Q/r%   c           
      T   | j                  d      \  }}}}}t        j                  t        d      5  | j	                  d||d|dd      }d d d        t        j                  t        d      5  | j	                  d||d|dd      }d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)	Nr:   r   zfailed for 2nd keywordrJ   r   r   r9   r   r   r   s         r#   test_y_stride_assertzBaseGemv.test_y_stride_assert  s    #}}a}8tQ1]]9,DE 	?q!Q1AA>A	?]]9,DE 	?q!Q1AA>A	? 	?	? 	?	? 	?r   N)r   r   )rY   rZ   r[   r\   r   r6   r   r   r   r>   r   r   rB   r   r   r]   r%   r#   r   r   ]  s<    &
$000000?00?r%   r   c                       e Zd Zej                  ZeZej                  j                  ej                  dk7  d      d        Zy)	TestSgemvdarwinzMacOS specific test)reasonc                     d
dd
fd	} fd}t        dddd      }t        j                  j                  d      }|D ]  \  }}}}|j                  ||f      }	|j                  |      }
t        j                  |	|
      } ||	|t        j
                  |	      } ||
|t        j
                  |	      } ||||        y )Nc                 r    |       }t        j                  |       }t        j                  ||j                  z  |z   t         j                        }|j
                  d   d   }t        |      D ]  }||z   |z  dk(  s n ||||j                  z  z    j                  |      }|j                  | |      S )Nr*   datar   order)	r   prodr
   nbytesuint8__array_interface__r   viewr   )	r   alignr+   r   dNtmpaddressoffsets	            r#   aligned_arrayz2TestSgemv.test_sgemv_on_osx.<locals>.aligned_array  s    GGGENhhq188|e3288D11&9!<#El F&(E1Q6 &!((
!2388u8E{{5{66r%   c                 B     | j                   |||      }| d d  |d d  |S r   )r   )arrr  r+   r   alignedr  s        r#   
as_alignedz/TestSgemv.test_sgemv_on_osx.<locals>.as_aligned  s)    '		5%G V
r%   c                 F    t        j                  d| |      |dd       y )Nr,   gh㈵>gHz>)rtolatol)r   r.   )AXdesiredr0   s      r#   assert_dot_closez5TestSgemv.test_sgemv_on_osx.<locals>.assert_dot_close  s!    sAq 97%)6r%   )       )i'  )   Y   )CFr   r   )r  )r   r   r   r   dotr   )r0   r  r  testdatar   r  mr;   a_orderA_dX_dr  A_fX_fr  s   `             @r#   test_sgemv_on_osxzTestSgemv.test_sgemv_on_osx  s    76 x9jIH))''-C(0 4$q!Wjj!Q(jjm&&c* eRZZwG eRZZwG c734r%   N)rY   rZ   r[   ra   sgemvr.   r   r+   rN   markskipifsysplatformr!  r]   r%   r#   r   r     sA    KK				CLLH4=R		S"	4 
T"	4r%   r   c                       e Zd Zy)r   Nre   r]   r%   r#   r   r     rf   r%   c                   (    e Zd Zej                  ZeZy)	TestDgemvN)rY   rZ   r[   ra   dgemvr.   r   r+   r]   r%   r#   r)  r)    rj   r%   r)  c                   (    e Zd Zej                  ZeZy	TestCgemvN)rY   rZ   r[   ra   cgemvr.   r   r+   r]   r%   r#   r-  r-    ro   r%   r-  c                       e Zd Zyr,  re   r]   r%   r#   r-  r-    rf   r%   c                   (    e Zd Zej                  ZeZy)	TestZgemvN)rY   rZ   r[   ra   zgemvr.   r   r+   r]   r%   r#   r1  r1    rt   r%   r1  )6	itertoolsr   r%  numpyr   r   r   r   r   r   r	   r
   r   r   r   r   r   scipy.linalgr   ra   numpy.testingr   r   r   r   rN   accuracyr$   r'   r`   AttributeErrorrh   rm   rr   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)  r-  r1  r]   r%   r#   <module>r9     s    
 K K K K )8 8  ,1. 1.hH  
H  / /,H  
H  %. %.^H  
H  1. 1.hH  
H  O? O?d,'4H '4\ 
H  
-d7q      N      @      J      T      s   E  (E6 	F  F" F8 G 9G" G7 1H H!  E32E36F	F	FF"F54F58G
	G
GG"G43G47H	H	HH!H32H3