o
    gH                     @   s  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d ZG dd	 d	Zz
G d
d deZW n eyY   G dd dZY nw G dd deZz
G dd deZW n ey|   G dd dZY nw G dd deZG dd dZz
G dd deZW n ey   G dd dZY nw G dd deZ z
G dd deZ!W n ey   G dd dZ!Y nw G dd deZ"G d d! d!Z#z
G d"d# d#e#Z$W n ey   G d$d# d#Z$Y nw G d%d& d&e#Z%z
G d'd( d(e#Z&W n ey   G d)d( d(Z&Y nw G d*d+ d+e#Z'G d,d- d-Z(z
G d.d/ d/e(Z)W n eyB   G d0d/ d/Z)Y nw G d1d2 d2e(Z*z
G d3d4 d4e(Z+W n eyf   G d5d4 d4Z+Y nw G d6d7 d7e(Z,G d8d9 d9Z-z
G d:d; d;e-Z.W n ey   G d<d; d;Z.Y nw G d=d> d>e-Z/z
G d?d@ d@e-Z0W n ey   G dAd@ d@Z0Y nw G dBdC dCe-Z1	 dS )D    )float32float64	complex64
complex128arangearrayzerosshape	transposenewaxiscommon_type	conjugate)_fblas)assert_array_equalassert_allcloseassert_array_almost_equalassert_N   c                 C   s   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 ],}t|jd D ]"}d}t| jd D ]}|| ||f |||f  7 }qK||||f< q@q7|ro|| jd f}|S )N   TFr   )lenr	   r   r   r   r   rangereshape)abb_is_vectorcijsk r    [/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_fblas.pymatrixmultiply   s     r"   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )BaseAxpyz Mixin class for axpy tests c                 C   sB   t d| jd}t d|jd}|d | }| ||}t|| d S )N      @dtype      ?r   r&   	blas_funcr   selfxyreal_yr    r    r!   test_default_a3   s
   zBaseAxpy.test_default_ac                 C   sF   t d| jd}t d|jd}|d | }| j||dd}t|| d S )Nr$   r%   )r   r(   r*   r    r    r!   test_simple:   s
   zBaseAxpy.test_simplec                 C   s`   t d| jd}td|j}t d|jd}|d d d d | }| j||dddd}t|| d S )N      @r%      r$      )r   nincxr   r&   r   r)   r   r*   r    r    r!   test_x_strideA   s   zBaseAxpy.test_x_stridec                 C   s\   t d| jd}td|j}|d |d d d  }| j||dddd}t||d d d  d S )Nr$   r%      r3   r2   )r   r4   incyr6   r*   r    r    r!   test_y_strideI   s
   zBaseAxpy.test_y_stridec                 C   sh   t d| jd}td|j}|d d d d |d d d  }| j||ddddd}t||d d d  d S )	N      (@r%   r8      r$   r3   r2   )r   r4   r5   r9   r6   r*   r    r    r!   test_x_and_y_strideP   s
    zBaseAxpy.test_x_and_y_stridec                 C   `   t d| jd}td|j}tjtdd | j||ddd W d    d S 1 s)w   Y  d S 	Nr;   r%   r8   failed for 1st keywordmatchr<   r   r4   r5   r   r&   r   pytestraises	Exceptionr)   r+   r,   r-   r    r    r!   test_x_bad_sizeW   
   "zBaseAxpy.test_x_bad_sizec                 C   r>   	Nr;   r%   r8   r@   rA   r2   r   r4   r9   rD   rH   r    r    r!   test_y_bad_size]   rJ   zBaseAxpy.test_y_bad_sizeN)__name__
__module____qualname____doc__r/   r0   r7   r:   r=   rI   rM   r    r    r    r!   r#   0   s    r#   c                   @      e Zd ZejZeZdS 	TestSaxpyN)rN   rO   rP   fblassaxpyr)   r   r&   r    r    r    r!   rT   e       rT   c                   @      e Zd ZdS rS   rN   rO   rP   r    r    r    r!   rT   i       c                   @   rR   )	TestDaxpyN)rN   rO   rP   rU   daxpyr)   r   r&   r    r    r    r!   r[   m   rW   r[   c                   @   rR   	TestCaxpyN)rN   rO   rP   rU   caxpyr)   r   r&   r    r    r    r!   r^   s   rW   r^   c                   @   rX   r]   rY   r    r    r    r!   r^   w   rZ   c                   @   rR   )	TestZaxpyN)rN   rO   rP   rU   zaxpyr)   r   r&   r    r    r    r!   r`   {   rW   r`   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	BaseScalz Mixin class for scal testing c                 C   s0   t d| jd}|d }| d|}t|| d S Nr$   r%   r(   r+   r,   real_xr    r    r!   r0      s   zBaseScal.test_simplec                 C   sZ   t d| jd}| }|d d d td| j |d d d< | jd|ddd}t|| d S )Nr1   r%   r3   r$   r2   rC   )r   r&   copyr   r)   r   rd   r    r    r!   r7      s
   $zBaseScal.test_x_stridec                 C   sT   t d| jd}tjtdd | jd|ddd W d    d S 1 s#w   Y  d S )	Nr;   r%   r@   rA   g       @r<   r   rC   )r   r&   rE   rF   rG   r)   )r+   r,   r    r    r!   rI      s   "zBaseScal.test_x_bad_sizeN)rN   rO   rP   rQ   r0   r7   rI   r    r    r    r!   rb      s
    rb   c                   @   rR   	TestSscalN)rN   rO   rP   rU   sscalr)   r   r&   r    r    r    r!   rh      rW   rh   c                   @   rX   rg   rY   r    r    r    r!   rh      rZ   c                   @   rR   )	TestDscalN)rN   rO   rP   rU   dscalr)   r   r&   r    r    r    r!   rj      rW   rj   c                   @   rR   	TestCscalN)rN   rO   rP   rU   cscalr)   r   r&   r    r    r    r!   rm      rW   rm   c                   @   rX   rl   rY   r    r    r    r!   rm      rZ   c                   @   rR   )	TestZscalN)rN   rO   rP   rU   zscalr)   r   r&   r    r    r    r!   ro      rW   ro   c                   @   @   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )BaseCopyz Mixin class for copy testing c                 C   s8   t d| jd}tt||j}| ||}t|| d S rc   )r   r&   r   r	   r)   r   rH   r    r    r!   r0      s   zBaseCopy.test_simplec                 C   sD   t d| jd}td|j}| j||ddd}t|d d d | d S Nr1   r%   r2   r3   rC   r6   rH   r    r    r!   r7         zBaseCopy.test_x_stridec                 C   sD   t d| jd}td|j}| j||ddd}t||d d d  d S )Nr$   r%   r8   r2   r3   rL   r6   rH   r    r    r!   r:      rt   zBaseCopy.test_y_stridec                 C   sP   t d| jd}td|j}| j||dddd}t|d d d |d d d  d S )Nr;   r%   r8   r2   r<   r3   r4   r5   r9   r6   rH   r    r    r!   r=      s   "zBaseCopy.test_x_and_y_stridec                 C   r>   r?   rD   rH   r    r    r!   rI      rJ   zBaseCopy.test_x_bad_sizec                 C   r>   rK   rD   rH   r    r    r!   rM      rJ   zBaseCopy.test_y_bad_sizeN
rN   rO   rP   rQ   r0   r7   r:   r=   rI   rM   r    r    r    r!   rr      s    rr   c                   @   rR   	TestScopyN)rN   rO   rP   rU   scopyr)   r   r&   r    r    r    r!   rx      rW   rx   c                   @   rX   rw   rY   r    r    r    r!   rx      rZ   c                   @   rR   )	TestDcopyN)rN   rO   rP   rU   dcopyr)   r   r&   r    r    r    r!   rz      rW   rz   c                   @   rR   	TestCcopyN)rN   rO   rP   rU   ccopyr)   r   r&   r    r    r    r!   r}      rW   r}   c                   @   rX   r|   rY   r    r    r    r!   r}      rZ   c                   @   rR   )	TestZcopyN)rN   rO   rP   rU   zcopyr)   r   r&   r    r    r    r!   r      rW   r   c                   @   rq   )BaseSwapz Mixin class for swap tests c                 C   sV   t d| jd}tt||j}| }| }| ||\}}t|| t|| d S rc   )r   r&   r   r	   rf   r)   r   r+   r,   r-   	desired_x	desired_yr    r    r!   r0   	  s   
zBaseSwap.test_simplec                 C   sl   t d| jd}td|j}| }| d d d }| j||ddd\}}t||d d d  t|| d S rs   r   r&   r   rf   r)   r   r   r    r    r!   r7     s   zBaseSwap.test_x_stridec                 C   sl   t d| jd}td|j}| d d d }| }| j||ddd\}}t|| t||d d d  d S )Nr$   r%   r8   r3   r2   rL   r   r   r    r    r!   r:     s   
zBaseSwap.test_y_stridec                 C   s   t d| jd}td|j}| d d d }| d d d }| j||dddd\}}t||d d d  t||d d d  d S )Nr;   r%   r8   r3   r<   r2   ru   r   r   r    r    r!   r=   $  s   zBaseSwap.test_x_and_y_stridec                 C   r>   r?   rD   rH   r    r    r!   rI   -  rJ   zBaseSwap.test_x_bad_sizec                 C   r>   rK   rD   rH   r    r    r!   rM   3  rJ   zBaseSwap.test_y_bad_sizeNrv   r    r    r    r!   r     s    				r   c                   @   rR   	TestSswapN)rN   rO   rP   rU   sswapr)   r   r&   r    r    r    r!   r   ;  rW   r   c                   @   rX   r   rY   r    r    r    r!   r   ?  rZ   c                   @   rR   )	TestDswapN)rN   rO   rP   rU   dswapr)   r   r&   r    r    r    r!   r   C  rW   r   c                   @   rR   	TestCswapN)rN   rO   rP   rU   cswapr)   r   r&   r    r    r    r!   r   I  rW   r   c                   @   rX   r   rY   r    r    r    r!   r   M  rZ   c                   @   rR   )	TestZswapN)rN   rO   rP   rU   zswapr)   r   r&   r    r    r    r!   r   Q  rW   r   c                   @   sj   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )BaseGemvz Mixin class for gemv tests r   c                 C   s   t d| jd}| jttfv rt d| jd}ddlm}m} |d t d| jd| }t d| jd| }|ddd	| j| }tt	|d | | jd| }	tt	|d | | jd| }
||||	|
fS )
Nr   r%   y      ?      ?r   )normalseedi  r'   g        )r2   r2   )
r   r&   r   r   numpy.randomr   r   astyper   r	   )r+   x_stridey_stridemultr   r   alphabetar   r,   r-   r    r    r!   get_data]  s   zBaseGemv.get_datac                 C   sH   |   \}}}}}|t|| ||  }| |||||}t|| d S Nr   r"   r)   r   r+   r   r   r   r,   r-   r   r    r    r!   r0   j  s   zBaseGemv.test_simplec                 C   s8   |   \}}}}}t||}| d||}t|| d S )Nr   r   r   r    r    r!   test_default_beta_yp  s   
zBaseGemv.test_default_beta_yc                 C   sP   |   \}}}}}|tt|| ||  }| j|||||dd}t|| d S )Nr   transr   r"   r
   r)   r   r   r    r    r!   test_simple_transposev  s   zBaseGemv.test_simple_transposec                 C   sT   |   \}}}}}|ttt|| ||  }| j|||||dd}t|| d S )Nr3   r   )r   r"   r
   r   r)   r   r   r    r    r!   test_simple_transpose_conj|  s   z#BaseGemv.test_simple_transpose_conjc                 C   sZ   | j dd\}}}}}|t||d d d  ||  }| j|||||dd}t|| d S )Nr3   r   )r5   r   r   r    r    r!   r7     s    zBaseGemv.test_x_stridec              	   C   s`   | j dd\}}}}}|tt||d d d  ||  }| j|||||ddd}t|| d S )Nr3   r   r   r   r5   r   r   r    r    r!   test_x_stride_transpose  s   $z BaseGemv.test_x_stride_transposec              
   C      | j dd\}}}}}tjtdd | jd||d|ddd}W d    n1 s)w   Y  tjtdd | jd||d|ddd}W d    d S 1 sMw   Y  d S )	Nr3   r   zfailed for 3rd argumentrA   r   r   r2   r   r   rE   rF   rG   r)   r+   r   r   r   r,   r-   r    r    r!   test_x_stride_assert     "zBaseGemv.test_x_stride_assertc                 C   sl   | j dd\}}}}}| }|t|| ||d d d   |d d d< | j|||||dd}t|| d S )Nr3   r   )r9   )r   rf   r"   r)   r   r   r    r    r!   r:     s
   *zBaseGemv.test_y_stridec              	   C   sr   | j dd\}}}}}| }|tt|| ||d d d   |d d d< | j|||||ddd}t|| d S )Nr3   r   r   r   r9   )r   rf   r"   r
   r)   r   r   r    r    r!   test_y_stride_transpose  s
   .z BaseGemv.test_y_stride_transposec              
   C   r   )	Nr3   r   zfailed for 2nd keywordrA   r   r   r2   r   r   r   r    r    r!   test_y_stride_assert  r   zBaseGemv.test_y_stride_assertN)r   r   )rN   rO   rP   rQ   r   r0   r   r   r   r7   r   r   r:   r   r   r    r    r    r!   r   Z  s    
r   c                   @   s   e Zd ZejZeZdd ZdS )	TestSgemvc                    s   ddl m} dd l}dd l|jdkrd S dfdd	 d fdd	}fd	d
}|dddd}|D ]1\}}}}	j||}
j|}|
|}||
|j|	d}|||j|	d}|||| q2d S )Nr   )productdarwinCc           	         s   | }  | } j||j |  jd}|jd d }t|D ]}|| | dkr, nq |||||j   j|d}|j| |dS )Nr%   datar   order)prodr   nbytesuint8__array_interface__r   viewr   )	r	   alignr&   r   dNtmpaddressoffset)npr    r!   aligned_array  s   
z2TestSgemv.test_sgemv_on_osx.<locals>.aligned_arrayc                    s(    | j |||}| d d  |d d < |S r   )r	   )arrr   r&   r   aligned)r   r    r!   
as_aligned  s   z/TestSgemv.test_sgemv_on_osx.<locals>.as_alignedc                    s   t  d| ||ddd d S )Nr'   gh㈵>gHz>)rtolatol)r   r)   )AXdesired)r+   r    r!   assert_dot_close  s   
z5TestSgemv.test_sgemv_on_osx.<locals>.assert_dot_close)       )i'  )   Y   )r   Fr   )r   )		itertoolsr   sysnumpyplatformrandomranddotr   )r+   r   r   r   r   testdatar   mr4   a_orderA_dX_dr   A_fX_fr    )r   r   r+   r!   test_sgemv_on_osx  s"   
zTestSgemv.test_sgemv_on_osxN)	rN   rO   rP   rU   sgemvr)   r   r&   r   r    r    r    r!   r     s    r   c                   @   rX   )r   NrY   r    r    r    r!   r     rZ   c                   @   rR   )	TestDgemvN)rN   rO   rP   rU   dgemvr)   r   r&   r    r    r    r!   r     rW   r   c                   @   rR   	TestCgemvN)rN   rO   rP   rU   cgemvr)   r   r&   r    r    r    r!   r     rW   r   c                   @   rX   r   rY   r    r    r    r!   r     rZ   c                   @   rR   )	TestZgemvN)rN   rO   rP   rU   zgemvr)   r   r&   r    r    r    r!   r     rW   r   )2r   r   r   r   r   r   r   r   r	   r
   r   r   r   scipy.linalgr   rU   numpy.testingr   r   r   r   rE   accuracyr"   r#   rT   AttributeErrorr[   r^   r`   rb   rh   rj   rm   ro   rr   rx   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   <module>   s   84/4	S.3