B
    `-I                 @   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	eZyG d
d deZW n" ek
r   G dd dZY nX G dd deZyG dd deZW n" ek
r   G dd dZY nX G dd deZG dd deZyG dd deZ W n$ ek
rX   G dd dZ Y nX G dd deZ!yG dd deZ"W n$ ek
r   G dd dZ"Y nX G dd deZ#G d d! d!eZ$yG d"d# d#e$Z%W n$ ek
r   G d$d# d#Z%Y nX G d%d& d&e$Z&yG d'd( d(e$Z'W n$ ek
rF   G d)d( d(Z'Y nX G d*d+ d+e$Z(G d,d- d-eZ)yG d.d/ d/e)Z*W n$ ek
r   G d0d/ d/Z*Y nX G d1d2 d2e)Z+yG d3d4 d4e)Z,W n$ ek
r   G d5d4 d4Z,Y nX G d6d7 d7e)Z-G d8d9 d9eZ.yG d:d; d;e.Z/W n$ ek
rD   G d<d; d;Z/Y nX G d=d> d>e.Z0yG d?d@ d@e.Z1W n$ ek
r   G dAd@ d@Z1Y nX G dBdC dCe.Z2d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| |}xrt| jd D ]`}xZt|jd D ]H}d}x2t| jd D ] }|| ||f |||f  7 }qW ||||f< qW qpW |r|| jd f}|S )N   TFr   )lenr	   r   r   r   r   rangereshape)abZb_is_vectorcijsk r   L/home/dcms/DCMS/lib/python3.7/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 )Ng      @)dtypeg      ?)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 )Ng      @)r#   )r   )r   r#   r$   r   )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 )Ng      @)r#      g      @   )r   nincx)r   r#   r   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 )Ng      @)r#      r,   r+   )r   r-   incy)r   r#   r   r$   r   )r%   r&   r'   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 )	Ng      (@)r#   r0      g      @r,   r+   )r   r-   r.   r1   )r   r#   r   r$   r   )r%   r&   r'   r(   r   r   r    test_x_and_y_strideP   s
     zBaseAxpy.test_x_and_y_stridec          	   C   sJ   t d| jd}td|j}tjtdd | j||ddd W d Q R X d S )	Ng      (@)r#   r0   zfailed for 1st keyword)matchr3   r   )r-   r.   )r   r#   r   pytestraises	Exceptionr$   )r%   r&   r'   r   r   r    test_x_bad_sizeW   s    zBaseAxpy.test_x_bad_sizec          	   C   sJ   t d| jd}td|j}tjtdd | j||ddd W d Q R X d S )	Ng      (@)r#   r0   zfailed for 1st keyword)r5   r+   r   )r-   r1   )r   r#   r   r6   r7   r8   r$   )r%   r&   r'   r   r   r    test_y_bad_size]   s    zBaseAxpy.test_y_bad_sizeN)__name__
__module____qualname____doc__r)   r*   r/   r2   r4   r9   r:   r   r   r   r    r"   0   s   r"   c               @   s   e Zd ZejZeZdS )	TestSaxpyN)r;   r<   r=   fblasZsaxpyr$   r   r#   r   r   r   r    r?   e   s   r?   c               @   s   e Zd ZdS )r?   N)r;   r<   r=   r   r   r   r    r?   i   s   c               @   s   e Zd ZejZeZdS )	TestDaxpyN)r;   r<   r=   r@   Zdaxpyr$   r   r#   r   r   r   r    rA   m   s   rA   c               @   s   e Zd ZejZeZdS )	TestCaxpyN)r;   r<   r=   r@   Zcaxpyr$   r   r#   r   r   r   r    rB   s   s   rB   c               @   s   e Zd ZdS )rB   N)r;   r<   r=   r   r   r   r    rB   w   s   c               @   s   e Zd ZejZeZdS )	TestZaxpyN)r;   r<   r=   r@   Zzaxpyr$   r   r#   r   r   r   r    rC   {   s   rC   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 )Ng      @)r#   )r   r#   r$   r   )r%   r&   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 )Ng      @)r#   r,   g      @r+   )r-   r.   )r   r#   copyr   r$   r   )r%   r&   rE   r   r   r    r/      s
    $zBaseScal.test_x_stridec          	   C   s>   t d| jd}tjtdd | jd|ddd W d Q R X d S )	Ng      (@)r#   zfailed for 1st keyword)r5   g       @r3   r   )r-   r.   )r   r#   r6   r7   r8   r$   )r%   r&   r   r   r    r9      s    zBaseScal.test_x_bad_sizeN)r;   r<   r=   r>   r*   r/   r9   r   r   r   r    rD      s   rD   c               @   s   e Zd ZejZeZdS )	TestSscalN)r;   r<   r=   r@   Zsscalr$   r   r#   r   r   r   r    rG      s   rG   c               @   s   e Zd ZdS )rG   N)r;   r<   r=   r   r   r   r    rG      s   c               @   s   e Zd ZejZeZdS )	TestDscalN)r;   r<   r=   r@   Zdscalr$   r   r#   r   r   r   r    rH      s   rH   c               @   s   e Zd ZejZeZdS )	TestCscalN)r;   r<   r=   r@   Zcscalr$   r   r#   r   r   r   r    rI      s   rI   c               @   s   e Zd ZdS )rI   N)r;   r<   r=   r   r   r   r    rI      s   c               @   s   e Zd ZejZeZdS )	TestZscalN)r;   r<   r=   r@   Zzscalr$   r   r#   r   r   r   r    rJ      s   rJ   c               @   s@   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 )Ng      @)r#   )r   r#   r   r	   r$   r   )r%   r&   r'   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 )Ng      @)r#   r+   r,   )r-   r.   )r   r#   r   r$   r   )r%   r&   r'   r   r   r    r/      s    zBaseCopy.test_x_stridec             C   sD   t d| jd}td|j}| j||ddd}t||d d d  d S )Ng      @)r#   r0   r+   r,   )r-   r1   )r   r#   r   r$   r   )r%   r&   r'   r   r   r    r2      s    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 )Ng      (@)r#   r0   r+   r3   r,   )r-   r.   r1   )r   r#   r   r$   r   )r%   r&   r'   r   r   r    r4      s    zBaseCopy.test_x_and_y_stridec          	   C   sJ   t d| jd}td|j}tjtdd | j||ddd W d Q R X d S )	Ng      (@)r#   r0   zfailed for 1st keyword)r5   r3   r   )r-   r.   )r   r#   r   r6   r7   r8   r$   )r%   r&   r'   r   r   r    r9      s    zBaseCopy.test_x_bad_sizec          	   C   sJ   t d| jd}td|j}tjtdd | j||ddd W d Q R X d S )	Ng      (@)r#   r0   zfailed for 1st keyword)r5   r+   r   )r-   r1   )r   r#   r   r6   r7   r8   r$   )r%   r&   r'   r   r   r    r:      s    zBaseCopy.test_y_bad_sizeN)
r;   r<   r=   r>   r*   r/   r2   r4   r9   r:   r   r   r   r    rK      s   rK   c               @   s   e Zd ZejZeZdS )	TestScopyN)r;   r<   r=   r@   Zscopyr$   r   r#   r   r   r   r    rL      s   rL   c               @   s   e Zd ZdS )rL   N)r;   r<   r=   r   r   r   r    rL      s   c               @   s   e Zd ZejZeZdS )	TestDcopyN)r;   r<   r=   r@   Zdcopyr$   r   r#   r   r   r   r    rM      s   rM   c               @   s   e Zd ZejZeZdS )	TestCcopyN)r;   r<   r=   r@   Zccopyr$   r   r#   r   r   r   r    rN      s   rN   c               @   s   e Zd ZdS )rN   N)r;   r<   r=   r   r   r   r    rN      s   c               @   s   e Zd ZejZeZdS )	TestZcopyN)r;   r<   r=   r@   Zzcopyr$   r   r#   r   r   r   r    rO      s   rO   c               @   s@   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 )BaseSwapz Mixin class for swap tests c             C   sV   t d| jd}tt||j}| }| }| ||\}}t|| t|| d S )Ng      @)r#   )r   r#   r   r	   rF   r$   r   )r%   r&   r'   	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 )Ng      @)r#   r+   r,   )r-   r.   )r   r#   r   rF   r$   r   )r%   r&   r'   rQ   rR   r   r   r    r/     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 )Ng      @)r#   r0   r,   r+   )r-   r1   )r   r#   r   rF   r$   r   )r%   r&   r'   rQ   rR   r   r   r    r2     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 )Ng      (@)r#   r0   r,   r3   r+   )r-   r.   r1   )r   r#   r   rF   r$   r   )r%   r&   r'   rQ   rR   r   r   r    r4   $  s    zBaseSwap.test_x_and_y_stridec          	   C   sJ   t d| jd}td|j}tjtdd | j||ddd W d Q R X d S )	Ng      (@)r#   r0   zfailed for 1st keyword)r5   r3   r   )r-   r.   )r   r#   r   r6   r7   r8   r$   )r%   r&   r'   r   r   r    r9   -  s    zBaseSwap.test_x_bad_sizec          	   C   sJ   t d| jd}td|j}tjtdd | j||ddd W d Q R X d S )	Ng      (@)r#   r0   zfailed for 1st keyword)r5   r+   r   )r-   r1   )r   r#   r   r6   r7   r8   r$   )r%   r&   r'   r   r   r    r:   3  s    zBaseSwap.test_y_bad_sizeN)
r;   r<   r=   r>   r*   r/   r2   r4   r9   r:   r   r   r   r    rP     s   				rP   c               @   s   e Zd ZejZeZdS )	TestSswapN)r;   r<   r=   r@   Zsswapr$   r   r#   r   r   r   r    rS   ;  s   rS   c               @   s   e Zd ZdS )rS   N)r;   r<   r=   r   r   r   r    rS   ?  s   c               @   s   e Zd ZejZeZdS )	TestDswapN)r;   r<   r=   r@   Zdswapr$   r   r#   r   r   r   r    rT   C  s   rT   c               @   s   e Zd ZejZeZdS )	TestCswapN)r;   r<   r=   r@   Zcswapr$   r   r#   r   r   r   r    rU   I  s   rU   c               @   s   e Zd ZdS )rU   N)r;   r<   r=   r   r   r   r    rU   M  s   c               @   s   e Zd ZejZeZdS )	TestZswapN)r;   r<   r=   r@   Zzswapr$   r   r#   r   r   r   r    rV   Q  s   rV   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gk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  g      ?g        )r+   r+   )
r   r#   r   r   Znumpy.randomrX   rY   Zastyper   r	   )r%   x_stridey_strideZmultrX   rY   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'   rR   r   r   r    r*   j  s    zBaseGemv.test_simplec             C   s8   |   \}}}}}t||}| d||}t|| d S )Nr   )r^   r!   r$   r   )r%   r\   r]   r   r&   r'   rR   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   r&   r'   rR   r   r   r    test_simple_transposev  s    zBaseGemv.test_simple_transposec             C   sT   |   \}}}}}|ttt|| ||  }| j|||||dd}t|| d S )Nr,   )r`   )r^   r!   r
   r   r$   r   )r%   r\   r]   r   r&   r'   rR   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 )Nr,   )rZ   )r.   )r^   r!   r$   r   )r%   r\   r]   r   r&   r'   rR   r   r   r    r/     s     zBaseGemv.test_x_stridec          	   C   s`   | j dd\}}}}}|tt||d d d  ||  }| j|||||ddd}t|| d S )Nr,   )rZ   r   )r`   r.   )r^   r!   r
   r$   r   )r%   r\   r]   r   r&   r'   rR   r   r   r    test_x_stride_transpose  s    $z BaseGemv.test_x_stride_transposec          
   C   s~   | j dd\}}}}}tjtdd | jd||d|ddd}W d Q R X tjtdd | jd||d|ddd}W d Q R X d S )	Nr,   )rZ   zfailed for 3rd argument)r5   r   r   r+   )r`   r.   )r^   r6   r7   r8   r$   )r%   r\   r]   r   r&   r'   r   r   r    test_x_stride_assert  s
    "zBaseGemv.test_x_stride_assertc             C   sl   | j dd\}}}}}| }|t|| ||d d d   |d d d< | j|||||dd}t|| d S )Nr,   )r[   )r1   )r^   rF   r!   r$   r   )r%   r\   r]   r   r&   r'   rR   r   r   r    r2     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 )Nr,   )r[   r   )r`   r1   )r^   rF   r!   r
   r$   r   )r%   r\   r]   r   r&   r'   rR   r   r   r    test_y_stride_transpose  s
    .z BaseGemv.test_y_stride_transposec          
   C   s~   | j dd\}}}}}tjtdd | jd||d|ddd}W d Q R X tjtdd | jd||d|ddd}W d Q R X d S )	Nr,   )r[   zfailed for 2nd keyword)r5   r   r   r+   )r`   r1   )r^   r6   r7   r8   r$   )r%   r\   r]   r   r&   r'   r   r   r    test_y_stride_assert  s
    "zBaseGemv.test_y_stride_assertN)r   r   )r;   r<   r=   r>   r^   r*   r_   ra   rb   r/   rc   rd   r2   re   rf   r   r   r   r    rW   Z  s   
rW   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}xj|D ]b\}}}}	j||}
j|}|
|}||
|j|	d}|||j|	d}|||| qfW d S )Nr   )productdarwinCc       	         s   | }  | } j||j |  jd}|jd d }x"t|D ]}|| | dkrBP qBW |||||j   j|d}|j| |dS )N)r#   datar   )order)prodr   nbytesZuint8Z__array_interface__r   viewr   )	r	   alignr#   rl   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 )N)r	   )Zarrrp   r#   rl   Zaligned)rw   r   r    
as_aligned  s    z/TestSgemv.test_sgemv_on_osx.<locals>.as_alignedc                s   t  d| ||ddd d S )Ng      ?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   )rj   F)rl   )rj   )rj   )		itertoolsrh   sysnumpyplatformrandomZranddotr   )r%   rh   r   rx   r|   Ztestdatarp   mr-   Za_orderZA_dZX_dr{   ZA_fZX_fr   )rw   rv   r%   r    test_sgemv_on_osx  s     
zTestSgemv.test_sgemv_on_osxN)	r;   r<   r=   r@   Zsgemvr$   r   r#   r   r   r   r   r    rg     s   rg   c               @   s   e Zd ZdS )rg   N)r;   r<   r=   r   r   r   r    rg     s   c               @   s   e Zd ZejZeZdS )	TestDgemvN)r;   r<   r=   r@   Zdgemvr$   r   r#   r   r   r   r    r     s   r   c               @   s   e Zd ZejZeZdS )	TestCgemvN)r;   r<   r=   r@   Zcgemvr$   r   r#   r   r   r   r    r     s   r   c               @   s   e Zd ZdS )r   N)r;   r<   r=   r   r   r   r    r     s   c               @   s   e Zd ZejZeZdS )	TestZgemvN)r;   r<   r=   r@   Zzgemvr$   r   r#   r   r   r   r    r     s   r   )3r   r   r   r   r   r   r   r   r	   r
   r   r   r   Zscipy.linalgr   r@   Znumpy.testingr   r   r   r   r6   Zaccuracyr!   objectr"   r?   AttributeErrorrA   rB   rC   rD   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rS   rT   rU   rV   rW   rg   r   r   r   r   r   r   r    <module>	   sz   84/4	S.p