U
    »mœd�  ã                   @   s–  d Z ddlZddlZddlZddl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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mZ ddlm Z!m"Z"m#Z#m$Z$ zddlm%Z& W n e'k
rØ   dZ&Y nX eegZ(eegZ)e(e) Z*d	d
„ Z+dd„ Z,G dd„ dƒZ-G dd„ dƒZ.G dd„ dƒZ/G dd„ dƒZ0d$dd„Z1G dd„ dƒZ2G dd„ dƒZ3G dd„ dƒZ4G dd„ dƒZ5G d d!„ d!ƒZ6d"d#„ Z7dS )%zw
Build linalg:
  python setup.py build
Run tests if scipy is installed:
  python -c 'import scipy;scipy.linalg.test()'
é    N)Úassert_equalÚassert_almost_equalÚassert_Úassert_array_almost_equalÚassert_allclose)Úraises)Úfloat32Úfloat64Ú	complex64Ú
complex128ÚarangeÚtriuÚtrilÚzerosÚtril_indicesÚonesÚmodÚdiagÚappendÚeyeÚnonzero)ÚrandÚseed)Ú_fblasÚget_blas_funcsÚtoeplitzÚsolve)Ú_cblasc                  C   sþ   t dtjdtjdd�tjdtjdd�fƒ\} }}t| jdƒ t|jdƒ td k	rht| jdƒ t|jdƒ t dƒ} t| jd	ƒ t d
tjd�} t| jdƒ t d
dd�} t| jdƒ t d
tj	d�} t| jdƒ t dtjdtj
d�tjdtjd�fƒ} t| jdƒ d S )N)Úaxpyr   r   ©é   r    ÚF)ÚdtypeÚorderÚCÚzÚcblasZrotgÚdÚgemm©r"   Úcr   )r   ÚnpÚemptyr
   r   r   Útypecoder&   Úmodule_nameZlongcomplexr	   )Úf1Úf2Zf3© r1   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/linalg/tests/test_blas.pyÚtest_get_blas_funcs$   s2    ÿþ
ÿÿr3   c                  C   s^   t dtjd�\} }| jdks t‚|jdks.t‚t dtjd�\} }}| |ksNt‚| |ksZt‚d S )N)Únrm2Údotr)   r*   )r5   ÚdotcÚdotu)r   r+   r
   r-   ÚAssertionErrorr	   )ÚfÚgÚhr1   r1   r2   Útest_get_blas_funcs_aliasK   s    r<   c                   @   s   e Zd Zdd„ ZdS )ÚTestCBLAS1Simplec                 C   s˜   dD ]D}t t|d d ƒ}|d kr"qt|dddgdddgdd�d	d
dgƒ qdD ]D}t t|d d ƒ}|d krlqNt|dddgdddgdd�d	ddgƒ qNd S ©NÚsdr   é   r    é   éÿÿÿÿé   ©Úaé   é	   é   Úczù               @y      ð¿      $@)Úgetattrr&   r   ©ÚselfÚpr9   r1   r1   r2   Ú	test_axpyX   s    ÿÿzTestCBLAS1Simple.test_axpyN)Ú__name__Ú
__module__Ú__qualname__rO   r1   r1   r1   r2   r=   V   s   r=   c                   @   s\   e 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d„ Z
dd„ Zdd„ ZdS )ÚTestFBLAS1Simplec                 C   s˜   dD ]D}t t|d d ƒ}|d kr"qt|dddgdddgdd�d	d
dgƒ qdD ]D}t t|d d ƒ}|d krlqNt|dddgdddgdd�d	ddgƒ qNd S r>   ©rK   Úfblasr   rL   r1   r1   r2   rO   i   s    ÿÿzTestFBLAS1Simple.test_axpyc                 C   s�   dD ]@}t t|d d ƒ}|d kr"qt|dddgdgd ƒdddgƒ qdD ]@}t t|d d ƒ}|d krhqJt|ddd	gdgd ƒddd	gƒ qJd S )
Nr?   ÚcopyrA   é   rC   é   rI   ù              @y      @      @rT   rL   r1   r1   r2   Ú	test_copyw   s    $zTestFBLAS1Simple.test_copyc                 C   st   dD ]2}t t|d d ƒ}|d kr"qt|dddgƒdƒ qdD ]2}t t|d d ƒ}|d krZq<t|ddd	gƒd
ƒ q<d S )Nr?   ZasumrA   éüÿÿÿrC   é   )ÚscÚdzù              @ù      @      Àé   ©rK   rU   r   rL   r1   r1   r2   Ú	test_asumƒ   s    zTestFBLAS1Simple.test_asumc                 C   sD   dD ]:}t t|d d ƒ}|d kr"qt|dddgdddgƒdƒ qd S )	Nr?   r5   rA   r[   rC   r    r@   é÷ÿÿÿrb   rL   r1   r1   r2   Útest_dot�   s
    zTestFBLAS1Simple.test_dotc                 C   sD   dD ]:}t t|d d ƒ}|d kr"qt|dddgdddgƒd	ƒ qd S )
NrI   r7   r_   r[   r`   r    rA   r@   y      "À       @rb   rL   r1   r1   r2   Útest_complex_dotu–   s
    z"TestFBLAS1Simple.test_complex_dotuc                 C   sD   dD ]:}t t|d d ƒ}|d kr"qt|dddgdddgƒdƒ qd S )	NrI   r6   r_   r[   r`   r    r@   y      @      ,Àrb   rL   r1   r1   r2   Útest_complex_dotc�   s
    z"TestFBLAS1Simple.test_complex_dotcc                 C   s€   dD ]8}t t|d d ƒ}|d kr"qt|dddgƒt d¡ƒ qdD ]8}t t|d d ƒ}|d kr`qBt|ddd	gƒt d¡ƒ qBd S )
Nr?   r4   rA   r[   rC   é2   )r*   r%   r]   r^   r_   r`   )rK   rU   r   ÚmathÚsqrtrL   r1   r1   r2   Ú	test_nrm2¤   s    zTestFBLAS1Simple.test_nrm2c                 C   sÄ   dD ]:}t t|d d ƒ}|d kr"qt|ddddgƒddd	gƒ qd
D ]:}t t|d d ƒ}|d krbqDt|ddddgƒdddgƒ qDdD ]:}t t|d d ƒ}|d kr¢q„t|ddddgƒdddgƒ q„d S )Nr?   Zscalr    rA   r[   rC   é   iøÿÿÿé
   rI   r_   r`   rd   y       €      (Ày      (@      "@)ÚcsZzdy              "@iôÿÿÿy      "@      (ÀrT   rL   r1   r1   r2   Ú	test_scal°   s    zTestFBLAS1Simple.test_scalc                 C   s¼   dD ]V}t t|d d ƒ}|d kr"qdddgdddg }}|||ƒ\}}t||ƒ t||ƒ qdD ]V}t t|d d ƒ}|d kr~q`dd	dgddd
g }}|||ƒ\}}t||ƒ t||ƒ q`d S )Nr?   Zswapr    rA   r@   éþÿÿÿrF   rI   r_   y      @      ÀrT   )rM   rN   r9   ÚxÚyÚx1Úy1r1   r1   r2   Ú	test_swapÁ   s     

zTestFBLAS1Simple.test_swapc                 C   sd   dD ]*}t td| d ƒ}t|dddgƒdƒ qdD ]*}t td| d ƒ}t|d	d
dgƒdƒ q4d S )Nr?   ÚiZamaxrp   rW   rA   r@   rI   éûÿÿÿy      @      @rl   )rK   rU   r   rL   r1   r1   r2   Ú	test_amaxÓ   s    zTestFBLAS1Simple.test_amaxN)rP   rQ   rR   rO   rZ   rc   re   rf   rg   rk   ro   ru   rx   r1   r1   r1   r2   rS   g   s   rS   c                   @   sŒ   e 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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 )"ÚTestFBLAS2Simplec                 C   sÀ   dD ]X}t t|d d ƒ}|d kr"qt|ddggdgƒdgƒ t|ddggdgddgƒdgƒ qdD ]X}t t|d d ƒ}|d kr€qbt|d	d
ggdgƒdgƒ t|d	d
ggdgddgƒdgƒ qbd S )Nr?   ZgemvrA   r[   éÜÿÿÿrC   éëÿÿÿrI   r_   r`   ù      HÀ      BÀù              @ù      HÀ      5ÀrT   rL   r1   r1   r2   Ú	test_gemvß   s    "ÿzTestFBLAS2Simple.test_gemvc              	   C   s´  dD ]¨}t t|d d ƒ}|d kr"qt|dddgddgƒddgddggƒ t|ddddgddgƒddgd	d
gddggƒ t|dddgddgddgddggd�ddgdd	ggƒ qdD ]r}t t|d d ƒ}|d krÐq²t|dddgddgƒddgddggƒ t|ddddgddgƒddgd	d
gddggƒ q²dD ]„}dD ]x}t t|| d ƒ}|d k�rT�q2t|dddgddgƒddgddggƒ t|ddddgddgƒddgd	d
gddggƒ �q2�q*d S )Nr?   Úgerr@   r    rA   rW   rl   rX   r\   é   rH   é   rD   rG   rI   Zgeruù              ð?r_   rY   rp   rJ   )r€   ZgercrT   )rM   rN   r9   Únamer1   r1   r2   Útest_gerî   sD    &ÿÿÿÿÿ
ÿÿzTestFBLAS2Simple.test_gerc                 C   sÞ  t jdddd�}t  |d d …t jf | ¡}t  |d d d…t jf |d d d…  ¡}t jdddd	d
�}t jdddd� d¡}t  |d d …t jf | ¡}t  |d d d…t jf |d d d…  ¡}t  |d d …t jf | ¡  ¡}t  |d d d…t jf |d d d…  ¡  ¡}	t jt  d¡|t  d¡f  	¡ }
t
dddgƒD �]|\}}tt|d d ƒ}|d k�rb�q:t|d|ƒ||d� t|d|dd�|j|d� t|d|dddd�||d� t|d|dddd�||d� t  d|dk�rÜdndd¡}|d||dd�}t|||d� |d||d�}t||k	ƒ t|d | |d� tt|d|dd!� tt|d|dd"� tt|d|dd"� tt|d|dd#� tt|d|dd#� tt|d|dd� tt|d|t  d$dd¡d� �q:t
d%ddgƒD �]|\}}tt|d d ƒ}|d k�rð�qÈt|d|ƒ||d� t|d|dd�|j|d� t|d|
d ddd�||d� t|d|
d&ddd�||d� t  d|d'k�rjdndd¡}|d||dd�}t|||d� |d||d�}t||k	ƒ t|d | |d� tt|d|dd!� tt|d|dd"� tt|d|dd"� tt|d|dd#� tt|d|dd#� tt|d|dd� tt|d|t  d$dd¡d� �qÈt
d%ddgƒD �]€\}}tt|d( d ƒ}|d k�r~�qVt|d|ƒ||d� t|d|dd�|j ¡ |d� t|d|
d ddd�||d� t|d|
d&ddd�|	|d� t  d|d'k�rüdndd¡}|d||dd�}t|||d� |d||d�}t||k	ƒ t|d | |d� tt|d|dd!� tt|d|dd"� tt|d|dd"� tt|d|dd#� tt|d|dd#� tt|d|dd� tt|d|t  d$dd¡d� �qVd S ))Nr@   rC   r'   r)   rB   r   ç      !@é   F©ZendpointrG   ÚDrW   r?   çH¯¼šò×z>ç›+¡†›„=Zsyrç      ð?©ÚrtolT©Úlowerr    )ÚincxÚoffxÚnrp   ©rW   rW   Úsr9   r!   ©rE   Zoverwrite_aç       @rD   rA   ©r‘   ©r’   ©r“   r   rI   éýÿÿÿr*   Zher)r+   r   r   ÚnewaxisÚlinspaceÚviewÚconjÚc_r   ÚravelÚziprK   rU   r   ÚTr   Úassert_raisesÚ	Exception)rM   rq   ZresxZresx_reverserr   r%   ZreszZresz_reverseZrehzZrehz_reverseÚwrN   rŽ   r9   rE   Úbr1   r1   r2   Útest_syr_her  s¤    (( , 
 ÿ 
 ÿ 
 ÿzTestFBLAS2Simple.test_syr_herc                 C   sð  t jdddd�}t jdddd�}t  |d d …t jf | |d d …t jf |  ¡}t  |d d d…t jf |d d d…  |d d d…t jf |d d d…   ¡}t jddd	d
d�}tdddgƒD �],\}}tt|d d ƒ}|d kràq¼t|d||ƒ||d� t|d||dd�|d d…d d…f |d� t|d||dd�|j	|d� t|d||ddddd�||d� t|d||dddddd�|d d…d d…f |d� t|d||ddddd�||d� t  
d|dk�rÂdndd¡}	|d|||	dd�}
t|	||d� |d |||	d!�}
t|	|
k	ƒ t|
d| |d� tt|d||dd"� tt|d||dd#� tt|d||dd#� tt|d||dd$� tt|d||dd%� tt|d||dd%� tt|d||dd� tt|d||dd� tt|d||dd� tt|d||t  
d&dd¡d!� q¼d S )'Nr@   rC   r'   r)   rG   rB   r   r†   r‡   Frˆ   r?   rŠ   r‹   Zsyr2rŒ   r�   rA   rš   Tr�   r    rm   ©r‘   r’   ÚincyÚoffy©r‘   r’   rª   r«   r“   rp   r”   r•   r9   r!   r–   r—   rD   r˜   r™   ©rª   ©r«   r   )r+   r   r   rœ   r�   r¢   rK   rU   r   r£   r   r   r¤   r¥   )rM   rq   rr   ÚresxyÚresxy_reverseÚqrN   rŽ   r9   rE   r§   r1   r1   r2   Ú	test_syr2n  sX    2$ ÿ* ÿ ÿ ÿÿzTestFBLAS2Simple.test_syr2c                 C   sP  t jdddd� d¡}t jdddd� d¡}|d d …t jf | ¡  |d d …t jf | ¡   }t  |¡}|d d d…t jf |d d d…  ¡  }||d d d…t jf |d d d…  ¡  7 }t  |¡}t jt  d¡|t  d¡f  ¡ }t jt  d¡|t  d¡f  ¡ }t	d	d
dgƒD �]6\}}t
t|d d ƒ}	|	d k�r:�qt|	d||ƒ||d� t|	d||dd�|d d…d d…f |d� t|	d||dd�|j ¡ |d� t|	d||ddddd�||d� t|	d||dddddd�|d d…d d…f |d� t|	d||ddddd�||d� t  d|dk�r dndd¡}
|	d|||
dd�}t|
||d� |	d|||
d�}t|
|k	ƒ t|d| |d� tt|	d||dd� tt|	d||dd� tt|	d||d d� tt|	d||dd!� tt|	d||dd"� tt|	d||d d"� tt|	d||d d� tt|	d||dd� tt|	d||d#d� tt|	d||t  d$dd¡d� �qd S )%Nr@   rG   r'   r)   r‰   r‡   rB   rW   rI   rŠ   r‹   Zher2rŒ   r�   rA   rš   Tr�   r©   r¬   r›   r”   r*   r!   r–   r—   rD   r   r˜   rC   r™   rp   r­   r®   r    r   )r+   r   rž   rœ   rŸ   r   r    r   r¡   r¢   rK   rU   r   r£   r   r¤   r¥   )rM   rq   rr   r¯   r°   ÚuÚvrN   rŽ   r9   rE   r§   r1   r1   r2   Ú	test_her2›  s`    4
&*
  
*ÿ ÿ ÿ ÿÿzTestFBLAS2Simple.test_her2c                 C   sV  t dƒ ttƒD �]>\}}d}d}d}d}ttt|d ƒt|| d ƒƒtt|d ƒt|| d ƒƒƒ}| |¡}t|| d |f|d�}|d |dd d…f< |d |ddd	…f< |d
 |ddd…f< |d |dd d…f< t|ƒ |¡}	t|ƒ |¡}
|dƒ|dƒ }}td|d�\}||||||||	|
|d�	}|| 	|	¡ ||
  }t
||ƒ qd S )NéÒ  rF   rC   r@   r    r)   )r   r   )r   r@   rl   )r   r    r   )r@   r   rA   rW   rw   )Zgbmv)	Úmr“   ÚkuÚklÚalpharE   rq   rr   Úbeta)r   Ú	enumerateÚDTYPESr   r   r   r   Úastyper   r5   r   )rM   Úindr"   r“   r·   r¹   r¸   ÚAÚAbrq   rr   rº   r»   Úfuncrt   Úy2r1   r1   r2   Ú	test_gbmvÍ  s4    ÿ
  ÿzTestFBLAS2Simple.test_gbmvc              	   C   sz  t dƒ ttƒD �]b\}}d}d}t||f|d�}t|d |f|d�}t|ƒ|t|ƒt|ƒf< td|d ƒD ]>}t|| ƒ}||t|| ƒt||ƒf< ||d| |d …f< ql| |¡}|dk rÈ||j n|| 	¡ j }t
|ƒ|dd d …f< t|ƒ |¡}	t|ƒ |¡}
|dƒ|dƒ }}|dk�r2td	|d�\}ntd
|d�\}|||||	|
|d�}|| |	¡ ||
  }t||ƒ qd S )Nr¶   rl   r    r)   r@   rB   ç      ô?rA   )Zhbmv)Zsbmv)Úkrº   rE   rq   rr   r»   )r   r¼   r½   r   r   r   Úranger¾   r£   rŸ   r   r   r5   r   )rM   r¿   r"   r“   rÆ   rÀ   rÁ   Zind2Útemprq   rr   rº   r»   rÂ   rt   rÃ   r1   r1   r2   Útest_sbmv_hbmvê  s.    
 
zTestFBLAS2Simple.test_sbmv_hbmvc                 C   sÀ  t dƒ ttt ƒD �]¤\}}d}t||ƒ |¡}|dkrL|t||ƒd 7 }| |¡}|dk rh||j n|| ¡ j }t|ƒ\}}|||f }t|ƒ |¡}t|ƒ |¡}	t	d| ƒ |¡}
t
d| ƒ |¡}|dƒ|dƒ }}|dkrøtd|d	�\}ntd
|d	�\}||||||	|d�}|| |¡ ||	  }t||ƒ ||d |||
||dd||d�
}||d d…d d…f   |
dd d… ¡||dd d…   }t|dd d… |ƒ t|d |d ƒ qd S )Nr¶   rA   r@   rƒ   rW   r    rÅ   )Zhpmvr)   )Zspmv)r“   rº   Úaprq   rr   r»   )
r“   rº   r»   rq   rr   rÊ   r‘   rª   r’   r«   rB   )r   r¼   r½   ÚCOMPLEX_DTYPESr   r¾   r£   rŸ   r   r   r   r   r5   r   r   )rM   r¿   r"   r“   rÀ   r*   ÚrÚAprq   rr   ZxlongZylongrº   r»   rÂ   rt   rÃ   r1   r1   r2   Útest_spmv_hpmv  s<    
 
   ÿ:zTestFBLAS2Simple.test_spmv_hpmvc                 C   s†  t dƒ ttt ƒD �]j\}}d}t||ƒ |¡}|dkrL|t||ƒd 7 }| |¡}|dk rh||j n|| ¡ j }t|ƒ\}}|||f }t|ƒ |¡}tt t	|dƒ dƒ}	|dkrøt
d|d�\}
|	|d d …d f  |d d d …f  ¡ ¡ | }n8t
d	|d�\}
|	|d d …d f  |d d d …f ¡ | }|
||	||d
�}td|d�}||||f< |dk�rj| ¡ n||||f< t||ƒ qd S )Nr¶   rA   r@   rƒ   rW   g      @)Zhprr)   )Zspr)r“   rº   rÊ   rq   ©rA   rA   )r   r¼   r½   rË   r   r¾   r£   rŸ   r   r   r   r5   r   r   )rM   r¿   r"   r“   rÀ   r*   rÌ   rÍ   rq   rº   rÂ   rÃ   rt   Úy1fr1   r1   r2   Útest_spr_hpr'  s,    
 0*zTestFBLAS2Simple.test_spr_hprc                 C   st  t dƒ ttƒD �]\\}}d}t||ƒ |¡}|dkrH|t||ƒd 7 }| |¡}|dk rd||j n|| ¡ j }t|ƒ\}}|||f }t|ƒ |¡}t|ƒ |¡}	|dƒ}
|dkrÆtd|d�\}ntd|d�\}|
 ¡ |d d …d f  	|	d d d …f  ¡ ¡ }|| | ¡ j }|||
||	|d	�}t
d
|d�}||||f< |dddg  ¡ |dddgdddgf< t||ƒ qd S )Nr¶   rA   r@   rƒ   r    )Zhpr2r)   )Zspr2)r“   rº   rq   rr   rÊ   rÏ   rW   r   )r   r¼   r½   r   r¾   r£   rŸ   r   r   r5   r   r   )rM   r¿   r"   r“   rÀ   r*   rÌ   rÍ   rq   rr   rº   rÂ   r³   rÃ   rt   rÐ   r1   r1   r2   Útest_spr2_hpr2B  s.    
 .&zTestFBLAS2Simple.test_spr2_hpr2c              
   C   sÀ  t dƒ ttƒD �]¨\}}d}d}t|ƒ |¡}t||f|d�}t|d ƒD ]&}t|| ƒ|t|| ƒt||ƒf< qL|dkr¶|t|ƒ  dt|d | ||d  d  ƒ |¡ 7  < t|d |f|d�}t|d ƒD ]"}	t	||	d�||	 d |	d …f< qÖt
d	|d�\}
|
|||d
�}| |¡}t||ƒ |
|||dd�}|dƒ|t|ƒt|ƒf< | |¡}t||ƒ |
|||ddd�}|j |¡}t||ƒ |
|||ddd�}| ¡ j |¡}t||ƒ qd S )Nr¶   rm   rA   r)   r@   rƒ   r    ©rÆ   )Ztbmv©rÆ   rE   rq   ©rÆ   rE   rq   r   ©rÆ   rE   rq   r   Útrans)r   r¼   r½   r   r¾   r   rÇ   r   r   r   r   r5   r   r£   rŸ   ©rM   r¿   r"   r“   rÆ   rq   rÀ   ÚsuprÁ   ÚrowrÂ   rt   rÃ   r1   r1   r2   Ú	test_tbmv^  s6    $: 




zTestFBLAS2Simple.test_tbmvc              
   C   sÀ  t dƒ ttƒD �]¨\}}d}d}t|ƒ |¡}t||f|d�}t|d ƒD ]&}t|| ƒ|t|| ƒt||ƒf< qL|dkr¶|t|ƒ  dt|d | ||d  d  ƒ |¡ 7  < t|d |f|d�}t|d ƒD ]"}	t	||	d�||	 d |	d …f< qÖt
d	|d�\}
|
|||d
�}t||ƒ}t||ƒ |
|||dd�}|dƒ|t|ƒt|ƒf< t||ƒ}t||ƒ |
|||ddd�}t|j|ƒ}t||ƒ |
|||ddd�}t| ¡ j|ƒ}t||ƒ qd S )Nr¶   rl   rA   r)   r@   rƒ   r    rÓ   )ZtbsvrÔ   rÕ   rÖ   )r   r¼   r½   r   r¾   r   rÇ   r   r   r   r   r   r   r£   rŸ   rØ   r1   r1   r2   Ú	test_tbsv„  s6    $: 




zTestFBLAS2Simple.test_tbsvc                 C   s<  t dƒ ttƒD �]$\}}d}t|ƒ |¡}|dk rBtt||ƒƒntt||ƒt||ƒd  ƒ}t|ƒ\}}|||f }td|d�\}	|	|||d�}
| |¡}t	|
|ƒ |	|||dd	�}
|dƒ|t
|ƒt
|ƒf< | |¡}t	|
|ƒ |	|||ddd
�}
|j |¡}t	|
|ƒ |	|||ddd
�}
| ¡ j |¡}t	|
|ƒ qd S )Nr¶   rm   r    rƒ   )Ztpmvr)   ©r“   rÊ   rq   r@   ©r“   rÊ   rq   r   ©r“   rÊ   rq   r   r×   )r   r¼   r½   r   r¾   r   r   r   r5   r   r   r£   rŸ   ©rM   r¿   r"   r“   rq   rÀ   r*   rÌ   rÍ   rÂ   rt   rÃ   r1   r1   r2   Ú	test_tpmvª  s*    2




zTestFBLAS2Simple.test_tpmvc                 C   sH  t dƒ ttƒD �]0\}}d}t|ƒ |¡}|dk rBtt||ƒƒntt||ƒt||ƒd  ƒ}|t|ƒ7 }t|ƒ\}}|||f }td|d�\}	|	|||d�}
t	||ƒ}t
|
|ƒ |	|||dd	�}
|dƒ|t|ƒt|ƒf< t	||ƒ}t
|
|ƒ |	|||ddd
�}
t	|j|ƒ}t
|
|ƒ |	|||ddd
�}
t	| ¡ j|ƒ}t
|
|ƒ qd S )Nr¶   rm   r    rƒ   )Ztpsvr)   rÝ   r@   rÞ   rß   )r   r¼   r½   r   r¾   r   r   r   r   r   r   r   r£   rŸ   rà   r1   r1   r2   Ú	test_tpsvÇ  s,    2




zTestFBLAS2Simple.test_tpsvc           	      C   s  t dƒ ttƒD ]ú\}}d}t||ƒt|ƒ  |¡}tdƒ |¡}td|d�\}|||d�}t|ƒ |¡}t	||ƒ |||dd�}|dƒ|t
|ƒt
|ƒf< t|ƒ |¡}t	||ƒ |||ddd�}t|ƒj |¡}t	||ƒ |||dd	d�}t|ƒ ¡ j |¡}t	||ƒ qd S )
Nr¶   rA   )Ztrmvr)   ©rE   rq   r@   ©rE   rq   r   ©rE   rq   r   r×   r    )r   r¼   r½   r   r   r¾   r   r   r5   r   r   r£   rŸ   ©	rM   r¿   r"   r“   rÀ   rq   rÂ   rt   rÃ   r1   r1   r2   Ú	test_trmvå  s&    


zTestFBLAS2Simple.test_trmvc           	      C   s8  t dƒ ttƒD �] \}}d}t||ƒt|ƒ  |¡}t|ƒ |¡}td|d�\}|||d�}tt|ƒ|ƒ}t	||ƒ |||dd�}tt
|ƒ|ƒ}t	||ƒ |||dd�}|dƒ|t|ƒt|ƒf< tt|ƒ|ƒ}t	||ƒ |||ddd	�}tt|ƒj|ƒ}t	||ƒ |||dd
d	�}tt|ƒ ¡ j|ƒ}t	||ƒ qd S )Nr¶   é   )Ztrsvr)   rã   r@   )rE   rq   r�   rä   rå   r    )r   r¼   r½   r   r   r¾   r   r   r   r   r   r   r£   rŸ   ræ   r1   r1   r2   Ú	test_trsvþ  s,    



zTestFBLAS2Simple.test_trsvN)rP   rQ   rR   r   r…   r¨   r²   rµ   rÄ   rÉ   rÎ   rÑ   rÒ   rÛ   rÜ   rá   râ   rç   ré   r1   r1   r1   r2   ry   Ý   s     `-2 &&ry   c                   @   s   e Zd Zdd„ ZdS )ÚTestFBLAS3Simplec                 C   s¼   dD ]V}t t|d d ƒ}|d kr"qt|ddgdgƒdggƒ t|ddgdgddgƒdgƒ qdD ]V}t t|d d ƒ}|d kr~q`t|d	d
gdgƒdggƒ t|d	d
gdgddgƒdgƒ q`d S )Nr?   r(   rA   r[   rz   rC   r{   rI   r_   r`   r|   r}   r~   rT   rL   r1   r1   r2   Ú	test_gemm  s     zTestFBLAS3Simple.test_gemmN)rP   rQ   rR   rë   r1   r1   r1   r2   rê     s   rê   Úsdzcc                 c   s.   |D ]$}t t||  dƒ}|dkr"q|V  qdS )z;Just a helper: return a specified BLAS function w/typecode.N)rK   rU   )rÂ   ZpsrN   r9   r1   r1   r2   Ú	_get_func-  s
    rí   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestBLAS3Symmc                 C   s`   t  ddgddgg¡| _t  dddgdddgg¡| _t  d¡| _t  dddgdddgg¡| _d S )	NrŒ   r—   ç        ç      @ç      ð¿)r    rA   g       @g      "@)r+   ÚarrayrE   r§   r   r*   Út©rM   r1   r1   r2   Úsetup_method8  s    
ÿÿÿzTestBLAS3Symm.setup_methodc              	   C   sŠ   t dƒD ]|}|| j| j| jddd�}t|| jƒ || jj| jd| jddd�}t|| jƒ || j| jjd| jjddd�}t|| jjƒ qd S )NÚsymmrŒ   ©rE   r§   r*   rº   r»   r@   ©rE   r§   r�   r*   rº   r»   )rE   r§   Úsider*   rº   r»   )rí   rE   r§   r*   r   ró   r£   ©rM   r9   Úresr1   r1   r2   Ú	test_symmA  s     ÿzTestBLAS3Symm.test_symmc                 C   s4   t tdd ƒ}|d k	r0tt|f| j| jdddœŽ d S )NÚdsymmr@   )rE   r§   rº   rù   )rK   rU   r¤   r¥   rE   r§   ©rM   r9   r1   r1   r2   Útest_summ_wrong_sideM  s     ÿz"TestBLAS3Symm.test_summ_wrong_sidec                 C   sn   t tddƒ}|dk	rj|| j| j| jddd�}t || j¡s>t‚|| j| jd| jddd�}t || j¡rjt‚dS )z°SYMM only considers the upper/lower part of A. Hence setting
        wrong value for `lower` (default is lower=0, meaning upper triangle)
        gives a wrong result.
        rý   NrŒ   r÷   r@   rø   )	rK   rU   rE   r§   r*   r+   Zallcloseró   r8   rú   r1   r1   r2   Útest_symm_wrong_uploU  s    z"TestBLAS3Symm.test_symm_wrong_uploN)rP   rQ   rR   rõ   rü   rÿ   r   r1   r1   r1   r2   rî   6  s   	rî   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBLAS3Syrkc                 C   s^   t  ddgddgddgg¡| _t  dddgdddgdddgg¡| _t  d	d
gd
dgg¡| _d S )NrŒ   rï   ç       Àr—   rð   ç      @g      Àç      *@ç      @ç      @)r+   rò   rE   ró   Úttrô   r1   r1   r2   rõ   d  s    
þþ
ÿzTestBLAS3Syrk.setup_methodc                 C   sÄ   t dƒD ]¶}|| jdd�}tt |¡t | j¡ƒ || jddd�}tt |¡t | j¡ƒ t | jj¡}|| jdd|d�}tt |¡t | j| ¡ƒ || jddd�}tt |¡t | j	¡ƒ qd S )NÚsyrkrŒ   ©rE   rº   r@   )rE   rº   r�   )rE   rº   r»   r*   )rE   rº   r×   )
rí   rE   r   r+   r   ró   r   r   Úshaper  ©rM   r9   r*   Zc0r1   r1   r2   Ú	test_syrkn  s    zTestBLAS3Syrk.test_syrkc                 C   s6   t tdd ƒ}|d k	r2tt|f| jdt d¡dœŽ d S )NZdsyrkrŒ   )rC   rX   )rE   rº   r*   )rK   rU   r¤   r¥   rE   r+   r   rþ   r1   r1   r2   Útest_syrk_wrong_c€  s
    ÿzTestBLAS3Syrk.test_syrk_wrong_cN)rP   rQ   rR   rõ   r  r  r1   r1   r1   r2   r  c  s   
r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBLAS3Syr2kc                 C   s|   t  ddgddgddgg¡| _t  ddgddgddgg¡| _t  dddgdddgdddgg¡| _t  ddgdd	gg¡| _d S )
NrŒ   rï   r  r—   rð   r   rñ   r  rl   )r+   rò   rE   r§   ró   r  rô   r1   r1   r2   rõ   ‰  s    
þ
þþ
ÿzTestBLAS3Syr2k.setup_methodc                 C   sÔ   t dƒD ]Æ}|| j| jdd�}tt |¡t | j¡ƒ || j| jddd�}tt |¡t | j¡ƒ t | jj	¡}|| j| jdd|d�}tt |¡t | j| ¡ƒ || j| jddd�}tt |¡t | j
¡ƒ qd S )NÚsyr2krŒ   ©rE   r§   rº   r@   )rE   r§   rº   r�   )rE   r§   rº   r»   r*   )rE   r§   rº   r×   )rí   rE   r§   r   r+   r   ró   r   r   r
  r  r  r1   r1   r2   Ú
test_syr2k–  s    zTestBLAS3Syr2k.test_syr2kc                 C   s:   t tdd ƒ}|d k	r6tt|f| j| jdt d¡dœŽ d S )NZdsyr2krŒ   )rè   rX   )rE   r§   rº   r*   )rK   rU   r¤   r¥   rE   r§   r+   r   rþ   r1   r1   r2   Útest_syr2k_wrong_c¦  s    ýz!TestBLAS3Syr2k.test_syr2k_wrong_cN)rP   rQ   rR   rõ   r  r  r1   r1   r1   r2   r  ˆ  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 )ÚTestSyHez2Quick and simple tests for (zc)-symm, syrk, syr2k.c                 C   s   t  ddgddgg¡| _d S )Nrï   y       €      ð¿rƒ   )r+   rò   Úsigma_yrô   r1   r1   r2   rõ   ³  s    
ÿzTestSyHe.setup_methodc                 C   s@   t ddƒD ]0}|| j| jdd�}tt |¡t ddg¡ƒ q
d S )Nrö   ÚzcrŒ   r  r@   rB   ©rí   r  r   r+   r   r   rú   r1   r1   r2   Útest_symm_zc·  s    zTestSyHe.test_symm_zcc                 C   s@   t ddƒD ]0}|| j| jdd�}tt |¡t ddg¡ƒ q
d S )NZhemmr  rŒ   r  r@   r  rú   r1   r1   r2   Útest_hemm_zc½  s    zTestSyHe.test_hemm_zcc                 C   s<   t ddƒD ],}|| jdd�}tt |¡t ddg¡ƒ q
d S )Nr  r  rŒ   r	  rB   r  rú   r1   r1   r2   Útest_syrk_zrÃ  s    zTestSyHe.test_syrk_zrc                 C   s<   t ddƒD ],}|| jdd�}tt |¡t ddg¡ƒ q
d S )NZherkr  rŒ   r	  r@   r  rú   r1   r1   r2   Útest_herk_zrÈ  s    zTestSyHe.test_herk_zrc                 C   sD   t ddƒD ]4}|| j| jdd�}tt |¡dt ddg¡ ƒ q
d S )Nr  r  rŒ   r  r—   rB   r  rú   r1   r1   r2   Útest_syr2k_zrÍ  s    zTestSyHe.test_syr2k_zrc                 C   sD   t ddƒD ]4}|| j| jdd�}tt |¡dt ddg¡ ƒ q
d S )NZher2kr  rŒ   r  r—   r@   r  rú   r1   r1   r2   Útest_her2k_zrÒ  s    zTestSyHe.test_her2k_zrN)rP   rQ   rR   Ú__doc__rõ   r  r  r  r  r  r  r1   r1   r1   r2   r  °  s   r  c                   @   sF   e Zd ZdZdd„ Zej de¡dd„ ƒZ	dd„ Z
d	d
„ Zdd„ ZdS )ÚTestTRMMz!Quick and simple tests for dtrmm.c                 C   sž   t  ddgddgg¡| _t  dddgdddgg¡| _t jd	d	d
dgdd	ddgddd	dgdddd	ggdd�| _t jd	dgd
dgddgddgddggdd�| _d S )NrŒ   r—   r  rð   r  rñ   r  r  r@   r    rA   r   rW   rC   rl   r9   )r#   rF   rX   rG   rm   )r+   rò   rE   r§   Úa2Úb2rô   r1   r1   r2   rõ   Û  s     
ÿÿ


ýý$ÿzTestTRMM.setup_methodÚdtype_c                 C   s„   t d|d�}tt|d| j| jƒ |d| j |¡| j |¡dd�}| jjd }t|| j| jd |…d |…f  ddt 	|¡j
 d� d S )	NÚtrmmr)   rŒ   r@   )rù   rï   éd   )rŽ   Úatol)r   r¤   r¥   r  r   r¾   r
  r   r+   ÚfinfoÚeps)rM   r!  r"  rû   rÆ   r1   r1   r2   Ú	test_sideè  s    ÿ ÿzTestTRMM.test_sidec                 C   sL   t tdd ƒ}|d k	rH|d| j| jƒ}t dddgdddgg¡}t||ƒ d S )	NÚdtrmmrŒ   r  g      0@g      Àr  r  r  ©rK   rU   rE   r§   r+   rò   r   ©rM   r9   ÚresultÚexpectedr1   r1   r2   Útest_abó  s    ÿzTestTRMM.test_abc                 C   sP   t tdd ƒ}|d k	rL|d| j| jdd�}t dddgddd	gg¡}t||ƒ d S )
Nr(  rŒ   Tr�   rð   r  rñ   r  rï   r)  r*  r1   r1   r2   Útest_ab_lowerü  s    ÿzTestTRMM.test_ab_lowerc                 C   s¶   t tdd ƒ}|d k	r²dD ]L}| j ¡ }|d| j||d�}t|jjdkoTt 	||¡dkƒ t
|| jƒ qt | j ¡ ¡}|d| j|dd�}t|jjdko¤t 	||¡dkƒ t||ƒ d S )Nr(  )TFrŒ   )Zoverwrite_bFT)rK   rU   r§   rV   rE   r   ÚflagsÚf_contiguousr+   Zmay_share_memoryr   Zasfortranarrayr   )rM   r9   ZoverwrZbcopyr+  r1   r1   r2   Útest_b_overwrites  s    
ÿÿzTestTRMM.test_b_overwritesN)rP   rQ   rR   r  rõ   ÚpytestÚmarkZparametrizer½   r'  r-  r.  r1  r1   r1   r1   r2   r  Ø  s   

	r  c               	   C   sz  t dƒ ttƒD �]b\} }t |¡jd }td|d�\}tddƒ |¡}tddƒ |¡}|dƒ}t	t
||||ƒ t	t
|||j|ƒ d}d	}|d
ƒ}| dk r¤t||ƒnt||ƒt||ƒd  t|ƒ }| |¡}t|ƒ}	t|ƒ}
t||ƒ |¡}t||ƒ |¡}||||d�}t|j|jƒ t|	|| ƒ}t|||d� ||||dd�}t|	j|| ƒ}t|||d� ||||dd�}t|	 ¡ j|| ƒ}t|||d� ||||dd�}|dƒ|	t|ƒt|ƒf< t|	|| ƒ}t|||d� ||||ddd�}t|	 ¡ j|| ¡ j ƒ}t|| ¡ j|d� ||||dddd�}|dƒ|
t|ƒt|ƒf< t|
 ¡ j|| ¡ j ƒ}t|| ¡ j|d� qd S )Nr¶   iè  )Ztrsmr)   rW   rC   r@   rX   rF   g      Àr    rƒ   )rº   rE   r§   )r$  )rº   rE   r§   Ztrans_a)rº   rE   r§   r   )rº   rE   r§   r   rù   )rº   rE   r§   r   rù   r�   )r   r¼   r½   r+   r%  r&  r   r   r¾   r¤   r¥   r£   r   r   r   r   r
  r   r   rŸ   r   )r¿   r"   ZtolrÂ   rÀ   ÚBrº   r“   r·   ZAuZAlZB1ZB2rs   Zx2r1   r1   r2   Ú	test_trsm  sN    2
r5  )rì   )8Z	__usage__ri   r2  Únumpyr+   Znumpy.testingr   r   r   r   r   r   r¤   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Znumpy.randomr   r   Zscipy.linalgr   rU   r   r   r   r   r&   ÚImportErrorZREAL_DTYPESrË   r½   r3   r<   r=   rS   ry   rê   rí   rî   r  r  r  r  r5  r1   r1   r1   r2   Ú<module>   s@   D
'v    C
	-%((@