a
    ‡ù»jä£  ã                   @   s¸  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Zd dlm Z!m"Z"m#Z#m$Z$ zd dlm%Z& W n e'yÚ   dZ&Y n0 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"„ Z7ej8j9d#d$d%�d&d'„ ƒZ:d(d)„ Z;dS )+é    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 u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clongdoubler	   )Úf1Úf2Zf3© r1   úBE:\soccer\ml_env\Lib\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 J ‚|jdks.J ‚t dtjd�\} }}| |u sNJ ‚| |u sZJ ‚d S )N)Únrm2Údotr)   r*   )r5   ÚdotcÚdotu)r   r+   r
   r-   r	   )ÚfÚgÚhr1   r1   r2   Útest_get_blas_funcs_aliasE   s    r;   c                   @   s   e Zd Zdd„ ZdS )ÚTestCBLAS1Simplec                 C   sŒ   dD ]>}t t|d d ƒ}|d u r"qt|g d¢g d¢dd�g d¢ƒ qdD ]>}t t|d d ƒ}|d u rfqHt|g d	¢g d¢dd�g d
¢ƒ qHd S ©NÚsdr   ©é   r    é   )r    éÿÿÿÿrA   é   ©Úa)é   é	   é   Úcz)r@   ù               @rA   )rF   y      ð¿      $@rH   )Úgetattrr&   r   ©ÚselfÚpr8   r1   r1   r2   Ú	test_axpyR   s    ÿÿzTestCBLAS1Simple.test_axpyN)Ú__name__Ú
__module__Ú__qualname__rO   r1   r1   r1   r2   r<   P   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 ]>}t t|d d ƒ}|d u r"qt|g d¢g d¢dd�g d¢ƒ qdD ]>}t t|d d ƒ}|d u rfqHt|g d	¢g d¢dd�g d
¢ƒ qHd S r=   ©rK   Úfblasr   rL   r1   r1   r2   rO   c   s    ÿÿzTestFBLAS1Simple.test_axpyc                 C   sˆ   dD ]<}t t|d d ƒ}|d u r"qt|g d¢dgd ƒg d¢ƒ qdD ]<}t t|d d ƒ}|d u rdqFt|g d¢dgd ƒg d¢ƒ qFd S )Nr>   Úcopy)rA   é   rC   é   rA   rI   )rA   ù              @y      @      @rT   rL   r1   r1   r2   Ú	test_copyq   s     zTestFBLAS1Simple.test_copyc                 C   sp   dD ]0}t t|d d ƒ}|d u r"qt|g d¢ƒdƒ qdD ]0}t t|d d ƒ}|d u rXq:t|g d¢ƒdƒ q:d S )Nr>   Zasum©rA   éüÿÿÿrC   é   )ÚscÚdz©ù              @r\   ù      @      Àé   ©rK   rU   r   rL   r1   r1   r2   Ú	test_asum}   s    zTestFBLAS1Simple.test_asumc                 C   s@   dD ]6}t t|d d ƒ}|d u r"qt|g d¢g d¢ƒdƒ qd S )Nr>   r5   r[   )r    rC   r@   é÷ÿÿÿrd   rL   r1   r1   r2   Útest_dot‰   s
    zTestFBLAS1Simple.test_dotc                 C   s@   dD ]6}t t|d d ƒ}|d u r"qt|g d¢g d¢ƒdƒ qd S )NrI   r7   r`   ©r    rA   r@   y      "À       @rd   rL   r1   r1   r2   Útest_complex_dotu�   s
    z"TestFBLAS1Simple.test_complex_dotuc                 C   s@   dD ]6}t t|d d ƒ}|d u r"qt|g d¢g d¢ƒdƒ qd S )NrI   r6   r`   ©r    ra   r@   y      @      ,Àrd   rL   r1   r1   r2   Útest_complex_dotc—   s
    z"TestFBLAS1Simple.test_complex_dotcc                 C   s|   dD ]6}t t|d d ƒ}|d u r"qt|g d¢ƒt d¡ƒ qdD ]6}t t|d d ƒ}|d u r^q@t|g d¢ƒt d¡ƒ q@d S )Nr>   r4   r[   é2   )r*   r%   r^   r_   r`   )rK   rU   r   ÚmathÚsqrtrL   r1   r1   r2   Ú	test_nrm2ž   s    zTestFBLAS1Simple.test_nrm2c                 C   s¸   dD ]6}t t|d d ƒ}|d u r"qt|dg d¢ƒg d¢ƒ qdD ]6}t t|d d ƒ}|d u r^q@t|dg d¢ƒg d	¢ƒ q@d
D ]6}t t|d d ƒ}|d u ršq|t|dg d¢ƒg d¢ƒ q|d S )Nr>   Zscalr    r[   )é   iøÿÿÿé
   rI   ra   r`   )rf   y       €      (Ày      (@      "@)ÚcsZzdrA   )y              "@iôÿÿÿy      "@      (ÀrT   rL   r1   r1   r2   Ú	test_scalª   s    zTestFBLAS1Simple.test_scalc                 C   s´   dD ]R}t t|d d ƒ}|d u r"qg d¢g d¢ }}|||ƒ\}}t||ƒ t||ƒ qdD ]R}t t|d d ƒ}|d u rzq\g d¢g d¢ }}|||ƒ\}}t||ƒ t||ƒ q\d S )Nr>   Zswaprh   )éþÿÿÿrA   rF   rI   rj   )rt   rA   y      @      ÀrT   )rM   rN   r8   ÚxÚyÚx1Úy1r1   r1   r2   Ú	test_swap»   s     

zTestFBLAS1Simple.test_swapc                 C   s`   dD ](}t td| d ƒ}t|g d¢ƒdƒ qdD ](}t td| d ƒ}t|g d¢ƒdƒ q2d S )Nr>   ÚiZamax)rt   rW   rA   r@   rI   )éûÿÿÿy      @      @rp   )rK   rU   r   rL   r1   r1   r2   Ú	test_amaxÍ   s    zTestFBLAS1Simple.test_amaxN)rP   rQ   rR   rO   rZ   re   rg   ri   rk   ro   rs   ry   r|   r1   r1   r1   r2   rS   a   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 u 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 u 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   ra   rb   ù      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 u r"qt|dddgddgƒddgddggƒ t|dg d	¢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 ]p}t t|d d ƒ}|d u rÎq°t|dddgddgƒddgddggƒ t|dg d¢ddgƒddgd
dgddggƒ q°dD ]‚}dD ]v}t t|| d ƒ}|d u �rP�q.t|dddgddgƒddgddggƒ t|dg d¢ddgƒddgd
dgddggƒ �q.�q&d S )Nr>   Úgerr@   r    rA   rW   rp   rX   r?   r]   é   rH   é   rD   rG   rI   Zgeruù              ð?ra   rY   rt   )r‡   rJ   ra   )r„   ZgercrT   )rM   rN   r8   Ú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 u �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||uƒ 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 u �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||uƒ 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 u �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||uƒ 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Únrt   ©rW   rW   Úsr8   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   ru   ZresxZresx_reverserv   r%   ZreszZresz_reverseZrehzZrehz_reverseÚwrN   r’   r8   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 u 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|	|
uƒ 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    rq   ©r•   r–   ÚincyÚoffy©r•   r–   r®   r¯   r—   rt   r˜   r™   r8   r!   rš   r›   rD   rœ   r�   ©r®   ©r¯   r   )r+   r   r   r    r¡   r¦   rK   rU   r   r§   r   r   r¨   r©   )rM   ru   rv   ÚresxyÚresxy_reverseÚqrN   r’   r8   rE   r«   r1   r1   r2   Ú	test_syr2h  sR    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 u �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|
|uƒ 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�   rt   r±   r²   r    r   )r+   r   r¢   r    r£   r   r¤   r   r¥   r¦   rK   rU   r   r§   r   r¨   r©   )rM   ru   rv   r³   r´   ÚuÚvrN   r’   r8   rE   r«   r1   r1   r2   Ú	test_her2•  sZ    4
&*
  
*ÿÿÿÿÿzTestFBLAS2Simple.test_her2c                 C   s”  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
||ƒ ||||||||
|	|dd�
}||j 	|
¡ ||	  }t
||ƒ qd S )NéÒ  rF   rC   r@   r    r)   )r   r   )r   r@   rp   )r   r    r   )r@   r   rA   rW   r{   )Zgbmv)	Úmr—   ÚkuÚklÚalpharE   ru   rv   Úbeta)
r»   r—   r¼   r½   r¾   rE   ru   rv   r¿   Útrans)r   Ú	enumerateÚDTYPESr   r   r   r   Úastyper   r5   r   r§   )rM   Úindr"   r—   r»   r½   r¼   ÚAÚAbru   rv   r¾   r¿   Úfuncrx   Úy2r1   r1   r2   Ú	test_gbmvÇ  s:    ÿ
ÿ
ÿ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º   rp   r    r)   r@   rB   ç      ô?rA   )Zhbmv)Zsbmv)Úkr¾   rE   ru   rv   r¿   )r   rÁ   rÂ   r   r   r   ÚrangerÃ   r§   r£   r   r   r5   r   )rM   rÄ   r"   r—   rË   rÅ   rÆ   Zind2Útempru   rv   r¾   r¿   rÇ   rx   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¾   Úapru   rv   r¿   )
r—   r¾   r¿   ru   rv   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ÚApru   rv   ZxlongZylongr¾   r¿   rÇ   rx   rÈ   r1   r1   r2   Útest_spmv_hpmv  s6    
 
ÿ: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Ï   ru   ©rA   rA   )r   rÁ   rÂ   rÐ   r   rÃ   r§   r£   r   r   r   r5   r   r   )rM   rÄ   r"   r—   rÅ   r*   rÑ   rÒ   ru   r¾   rÇ   rÈ   rx   Úy1fr1   r1   r2   Útest_spr_hpr&  s,    
 0*zTestFBLAS2Simple.test_spr_hprc                 C   sn  t dƒ ttƒD �]V\}}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< |g d¢  ¡ |g d¢g d¢f< t||ƒ qd S )Nrº   rA   r@   r‡   r    )Zhpr2r)   )Zspr2)r—   r¾   ru   rv   rÏ   rÔ   )r@   rA   rW   )r@   r    r    )r   r   r@   )r   rÁ   rÂ   r   rÃ   r§   r£   r   r   r5   r   r   )rM   rÄ   r"   r—   rÅ   r*   rÑ   rÒ   ru   rv   r¾   rÇ   r·   rÈ   rx   rÕ   r1   r1   r2   Útest_spr2_hpr2A  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º   rq   rA   r)   r@   r‡   r    ©rË   )Ztbmv©rË   rE   ru   ©rË   rE   ru   r   ©rË   rE   ru   r   rÀ   )r   rÁ   rÂ   r   rÃ   r   rÌ   r   r   r   r   r5   r   r§   r£   ©rM   rÄ   r"   r—   rË   ru   rÅ   ÚsuprÆ   ÚrowrÇ   rx   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º   rp   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º   rq   r    r‡   )Ztpmvr)   ©r—   rÏ   ru   r@   ©r—   rÏ   ru   r   ©r—   rÏ   ru   r   rÀ   )r   rÁ   rÂ   r   rÃ   r   r   r   r5   r   r   r§   r£   ©rM   rÄ   r"   r—   ru   rÅ   r*   rÑ   rÒ   rÇ   rx   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º   rq   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   ru   r@   ©rE   ru   r   ©rE   ru   r   rÀ   r    )r   rÁ   rÂ   r   r   rÃ   r   r   r5   r   r   r§   r£   ©	rM   rÄ   r"   r—   rÅ   ru   rÇ   rx   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   ru   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   r}   ×   s     `-2" &&r}   c                   @   s   e Zd Zdd„ ZdS )ÚTestFBLAS3Simplec                 C   s¼   dD ]V}t t|d d ƒ}|d u 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 u 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\   r~   rC   r   rI   ra   rb   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u r"q|V  qdS )z;Just a helper: return a specified BLAS function w/typecode.N)rK   rU   )rÇ   ZpsrN   r8   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   sX   t  ddgddgg¡| _t  g d¢g d¢g¡| _t  d¡| _t  g d¢g d¢g¡| _d S )	Nr�   r›   ç        )r�   ró   ç      @)ró   ç      ð¿r›   )r    rA   )r›   rõ   g       @)rô   ró   g      "@)r+   ÚarrayrE   r«   r   r*   Út©rM   r1   r1   r2   Úsetup_method7  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   r8   Úresr1   r1   r2   Ú	test_symm@  s    ÿzTestBLAS3Symm.test_symmc                 C   s8   t tdd ƒ}|d ur4tt|fi | j| jdddœ¤Ž d S )NÚdsymmr@   )rE   r«   r¾   rý   )rK   rU   r¨   r©   rE   r«   ©rM   r8   r1   r1   r2   Útest_summ_wrong_sideL  s
    ÿz"TestBLAS3Symm.test_summ_wrong_sidec                 C   sn   t tddƒ}|durj|| j| j| jddd�}t || j¡s>J ‚|| j| jd| jddd�}t || j¡rjJ ‚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÷   rþ   r1   r1   r2   Útest_symm_wrong_uploT  s    z"TestBLAS3Symm.test_symm_wrong_uploN)rP   rQ   rR   rù   r   r  r  r1   r1   r1   r2   rò   5  s   	rò   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBLAS3Syrkc                 C   sX   t  ddgddgddgg¡| _t  g d¢g d¢g d¢g¡| _t  d	d
gd
dgg¡| _d S )Nr�   ró   ç       Àr›   rô   )r�   ró   r›   )ró   ç      @ç      À)r›   r  ç      *@ç      @ç      @r	  )r+   rö   rE   r÷   Úttrø   r1   r1   r2   rù   c  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   r8   r*   Zc0r1   r1   r2   Ú	test_syrkm  s    zTestBLAS3Syrk.test_syrkc                 C   s:   t tdd ƒ}|d ur6tt|fi | 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  b  s   
r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBLAS3Syr2kc                 C   sv   t  ddgddgddgg¡| _t  ddgddgddgg¡| _t  g d¢g d¢g d	¢g¡| _t  ddgdd
gg¡| _d S )Nr�   ró   r  r›   rô   r   )ró   rõ   rô   )rõ   ró   ró   )rô   ró   r  rp   )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 ur:tt|fi | 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  g d¢g d¢g¡| _t jg d¢g d¢g d¢g d	¢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@   r@   r    rA   )r   r@   rW   rC   )r   r   r@   rp   )r   r   r   r@   r8   )r#   r@   rW   r    rC   rA   rp   rF   rX   rG   rq   )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   sH   t tdd ƒ}|d urD|d| j| jƒ}t g d¢g d¢g¡}t||ƒ d S )NÚdtrmmr�   )r	  g      0@g      Àr%  ©rK   rU   rE   r«   r+   rö   r   ©rM   r8   ÚresultÚexpectedr1   r1   r2   Útest_abò  s    
ÿzTestTRMM.test_abc                 C   sL   t tdd ƒ}|d urH|d| j| jdd�}t g d¢g d¢g¡}t||ƒ d S )Nr/  r�   Tr“   r$  )rõ   r  ró   r0  r1  r1   r1   r2   Útest_ab_lowerû  s    
ÿzTestTRMM.test_ab_lowerc                 C   s¶   t tdd ƒ}|d ur²dD ]L}| j ¡ }|d| j||d�}t|jjdu oTt 	||¡du ƒ t
|| jƒ qt | j ¡ ¡}|d| j|dd�}t|jjdu o¤t 	||¡du ƒ t||ƒ d S )Nr/  )TFr�   )Zoverwrite_bFT)rK   rU   r«   rV   rE   r   ÚflagsÚf_contiguousr+   Zmay_share_memoryr   Zasfortranarrayr   )rM   r8   ZoverwrZbcopyr2  r1   r1   r2   Útest_b_overwrites  s    
ÿÿzTestTRMM.test_b_overwritesN)rP   rQ   rR   r"  rù   ÚpytestÚmarkZparametrizerÂ   r.  r4  r5  r8  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B2rw   Zx2r1   r1   r2   Ú	test_trsm  sN    2
r<  Fzgh-16930)ÚrunÚreasonc                  C   s8   t  dd¡} tjj | ddd¡}t d¡}t||ƒ d S )Nrq   rG   rC   rA   rB   iô  )	r+   ÚrepeatÚscipyÚlinalgÚblasÚdnrm2rm   rn   r   )ru   Úactualr3  r1   r1   r2   Útest_gh_169309J  s    
rE  c                  C   sR   t  dd¡} d}ttjƒ�$ tjj | dd|¡ W d   ƒ n1 sD0    Y  d S )Nrq   rG   rB   rC   rA   )	r+   r?  r¨   rU   Z__fblas_errorr@  rA  rB  rC  )ru   r•   r1   r1   r2   Útest_dnrm2_neg_incxS  s    rF  )rð   )<rm   r9  Ú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   r@  Zscipy.linalgr   rU   r   r   r   r   r&   ÚImportErrorZREAL_DTYPESrÐ   rÂ   r3   r;   r<   rS   r}   rî   rñ   rò   r  r  r  r#  r<  r:  ZxfailrE  rF  r1   r1   r1   r2   Ú<module>   sJ   D
'v    H
	-%((@3ÿ
