o
    EbH                     @   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bZb_is_vectorcijsk r   ?/usr/lib/python3/dist-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yZ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$      r1   r0   )r   r2   incyr4   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$   r6      r#   r1   r0   )r   r2   r3   r7   r4   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 	Nr9   r$   r6   failed for 1st keywordmatchr:   r   r2   r3   r   r%   r   pytestraises	Exceptionr(   r*   r+   r,   r   r   r    test_x_bad_sizeW   
   "zBaseAxpy.test_x_bad_sizec                 C   r<   	Nr9   r$   r6   r>   r?   r0   r   r2   r7   rB   rF   r   r   r    test_y_bad_size]   rH   zBaseAxpy.test_y_bad_sizeN)__name__
__module____qualname____doc__r-   r.   r5   r8   r;   rG   rK   r   r   r   r    r"   0   s    r"   c                   @      e Zd ZejZeZdS 	TestSaxpyN)rL   rM   rN   fblasZsaxpyr(   r   r%   r   r   r   r    rR   e       rR   c                   @      e Zd ZdS rQ   rL   rM   rN   r   r   r   r    rR   i       c                   @   rP   )	TestDaxpyN)rL   rM   rN   rS   Zdaxpyr(   r   r%   r   r   r   r    rX   m   rT   rX   c                   @   rP   	TestCaxpyN)rL   rM   rN   rS   Zcaxpyr(   r   r%   r   r   r   r    rZ   s   rT   rZ   c                   @   rU   rY   rV   r   r   r   r    rZ   w   rW   c                   @   rP   )	TestZaxpyN)rL   rM   rN   rS   Zzaxpyr(   r   r%   r   r   r   r    r[   {   rT   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+   Zreal_xr   r   r    r.      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 )Nr/   r$   r1   r#   r0   rA   )r   r%   copyr   r(   r   r^   r   r   r    r5      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 )	Nr9   r$   r>   r?   g       @r:   r   rA   )r   r%   rC   rD   rE   r(   )r*   r+   r   r   r    rG      s   "zBaseScal.test_x_bad_sizeN)rL   rM   rN   rO   r.   r5   rG   r   r   r   r    r\      s
    r\   c                   @   rP   	TestSscalN)rL   rM   rN   rS   Zsscalr(   r   r%   r   r   r   r    ra      rT   ra   c                   @   rU   r`   rV   r   r   r   r    ra      rW   c                   @   rP   )	TestDscalN)rL   rM   rN   rS   Zdscalr(   r   r%   r   r   r   r    rb      rT   rb   c                   @   rP   	TestCscalN)rL   rM   rN   rS   Zcscalr(   r   r%   r   r   r   r    rd      rT   rd   c                   @   rU   rc   rV   r   r   r   r    rd      rW   c                   @   rP   )	TestZscalN)rL   rM   rN   rS   Zzscalr(   r   r%   r   r   r   r    re      rT   re   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 r]   )r   r%   r   r	   r(   r   rF   r   r   r    r.      s   zBaseCopy.test_simplec                 C   sD   t d| jd}td|j}| j||ddd}t|d d d | d S Nr/   r$   r0   r1   rA   r4   rF   r   r   r    r5         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$   r6   r0   r1   rJ   r4   rF   r   r   r    r8      ri   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 )Nr9   r$   r6   r0   r:   r1   r2   r3   r7   r4   rF   r   r   r    r;      s   "zBaseCopy.test_x_and_y_stridec                 C   r<   r=   rB   rF   r   r   r    rG      rH   zBaseCopy.test_x_bad_sizec                 C   r<   rI   rB   rF   r   r   r    rK      rH   zBaseCopy.test_y_bad_sizeN
rL   rM   rN   rO   r.   r5   r8   r;   rG   rK   r   r   r   r    rg      s    rg   c                   @   rP   	TestScopyN)rL   rM   rN   rS   Zscopyr(   r   r%   r   r   r   r    rm      rT   rm   c                   @   rU   rl   rV   r   r   r   r    rm      rW   c                   @   rP   )	TestDcopyN)rL   rM   rN   rS   Zdcopyr(   r   r%   r   r   r   r    rn      rT   rn   c                   @   rP   	TestCcopyN)rL   rM   rN   rS   Zccopyr(   r   r%   r   r   r   r    rp      rT   rp   c                   @   rU   ro   rV   r   r   r   r    rp      rW   c                   @   rP   )	TestZcopyN)rL   rM   rN   rS   Zzcopyr(   r   r%   r   r   r   r    rq      rT   rq   c                   @   rf   )BaseSwapz Mixin class for swap tests c                 C   sV   t d| jd}tt||j}| }| }| ||\}}t|| t|| d S r]   )r   r%   r   r	   r_   r(   r   r*   r+   r,   Z	desired_x	desired_yr   r   r    r.   	  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 rh   r   r%   r   r_   r(   r   rs   r   r   r    r5     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$   r6   r1   r0   rJ   ru   rs   r   r   r    r8     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 )Nr9   r$   r6   r1   r:   r0   rj   ru   rs   r   r   r    r;   $  s   zBaseSwap.test_x_and_y_stridec                 C   r<   r=   rB   rF   r   r   r    rG   -  rH   zBaseSwap.test_x_bad_sizec                 C   r<   rI   rB   rF   r   r   r    rK   3  rH   zBaseSwap.test_y_bad_sizeNrk   r   r   r   r    rr     s    				rr   c                   @   rP   	TestSswapN)rL   rM   rN   rS   Zsswapr(   r   r%   r   r   r   r    rw   ;  rT   rw   c                   @   rU   rv   rV   r   r   r   r    rw   ?  rW   c                   @   rP   )	TestDswapN)rL   rM   rN   rS   Zdswapr(   r   r%   r   r   r   r    rx   C  rT   rx   c                   @   rP   	TestCswapN)rL   rM   rN   rS   Zcswapr(   r   r%   r   r   r   r    rz   I  rT   rz   c                   @   rU   ry   rV   r   r   r   r    rz   M  rW   c                   @   rP   )	TestZswapN)rL   rM   rN   rS   Zzswapr(   r   r%   r   r   r   r    r{   Q  rT   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        )r0   r0   )
r   r%   r   r   Znumpy.randomr}   r~   Zastyper   r	   )r*   x_stridey_strideZ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,   rt   r   r   r    r.   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 )Nr1   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 )Nr1   r   )r3   r   r   r   r   r    r5     s    zBaseGemv.test_x_stridec              	   C   s`   | j dd\}}}}}|tt||d d d  ||  }| j|||||ddd}t|| d S )Nr1   r   r   r   r3   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 )	Nr1   r   zfailed for 3rd argumentr?   r   r   r0   r   r   rC   rD   rE   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 )Nr1   r   )r7   )r   r_   r!   r(   r   r   r   r   r    r8     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 )Nr1   r   r   r   r7   )r   r_   r!   r
   r(   r   r   r   r   r    test_y_stride_transpose  s
   .z BaseGemv.test_y_stride_transposec              
   C   r   )	Nr1   r   zfailed for 2nd keywordr?   r   r   r0   r   r   r   r   r   r    test_y_stride_assert  r   zBaseGemv.test_y_stride_assertN)r   r   )rL   rM   rN   rO   r   r.   r   r   r   r5   r   r   r8   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)Zprodr   nbytesZuint8Z__array_interface__r   viewr   )	r	   alignr%   r   dNtmpZaddressoffset)npr   r    aligned_array  s   
z2TestSgemv.test_sgemv_on_osx.<locals>.aligned_arrayc                    s(    | j |||}| d d  |d d < |S r   )r	   )Zarrr   r%   r   Z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>)ZrtolZ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platformZrandomZranddotr   )r*   r   r   r   r   Ztestdatar   mr2   Za_orderZA_dZX_dr   ZA_fZX_fr   )r   r   r*   r    test_sgemv_on_osx  s"   
zTestSgemv.test_sgemv_on_osxN)	rL   rM   rN   rS   Zsgemvr(   r   r%   r   r   r   r   r    r     s    r   c                   @   rU   )r   NrV   r   r   r   r    r     rW   c                   @   rP   )	TestDgemvN)rL   rM   rN   rS   Zdgemvr(   r   r%   r   r   r   r    r     rT   r   c                   @   rP   	TestCgemvN)rL   rM   rN   rS   Zcgemvr(   r   r%   r   r   r   r    r     rT   r   c                   @   rU   r   rV   r   r   r   r    r     rW   c                   @   rP   )	TestZgemvN)rL   rM   rN   rS   Zzgemvr(   r   r%   r   r   r   r    r     rT   r   )2r   r   r   r   r   r   r   r   r	   r
   r   r   r   Zscipy.linalgr   rS   Znumpy.testingr   r   r   r   rC   Zaccuracyr!   r"   rR   AttributeErrorrX   rZ   r[   r\   ra   rb   rd   re   rg   rm   rn   rp   rq   rr   rw   rx   rz   r{   r|   r   r   r   r   r   r   r   r    <module>   s   84/4	S.3