o
    Ö­j£  ã                   @   s°  d dl 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Zd dlmZm Z m!Z!m"Z" zd dlm#Z$ W n e%yi   dZ$Y nw 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ƒZ.d)dd„Z/G dd„ dƒZ0G dd„ dƒZ1G dd„ dƒZ2G dd„ dƒZ3G dd„ dƒZ4d d!„ Z5ej6j7d"d#d$�d%d&„ ƒZ8d'd(„ Z9d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)Ú_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r4t| 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ÚcblasÚrotgÚdÚgemm©r    Úcr   )r   ÚnpÚemptyr
   r   r   Útypecoder$   Úmodule_nameÚclongdoubler	   )Úf1Úf2Úf3© r2   úY/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_blas.pyÚtest_get_blas_funcs   s2   ÿ
þÿÿr4   c                  C   s^   t dtjd�\} }| jdksJ ‚|jdksJ ‚t dtjd�\} }}| |u s'J ‚| |u s-J ‚d S )N)Únrm2Údotr(   r)   )r6   ÚdotcÚdotu)r   r*   r
   r,   r	   )ÚfÚgÚhr2   r2   r3   Útest_get_blas_funcs_aliasE   s   r<   c                   @   ó   e Zd Zdd„ ZdS )ÚTestCBLAS1Simplec                 C   óŒ   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 r3q$t|g d	¢g d¢dd�g d
¢ƒ q$d S ©NÚsdr   ©é   r   é   )r   éÿÿÿÿrD   é   ©Úa)é   é	   é   Úcz)rC   ù               @rD   )rI   y      ð¿      $@rK   )Úgetattrr$   r   ©ÚselfÚpr9   r2   r2   r3   Ú	test_axpyR   ó   ÿÿüzTestCBLAS1Simple.test_axpyN)Ú__name__Ú
__module__Ú__qualname__rR   r2   r2   r2   r3   r>   P   ó    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   r?   r@   ©rN   Úfblasr   rO   r2   r2   r3   rR   c   rS   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 r2q#t|g d¢dgd ƒg d¢ƒ q#d S )NrA   Úcopy)rD   é   rF   é   rD   rL   )rD   ù              @y      @      @rY   rO   r2   r2   r3   Ú	test_copyq   s     üzTestFBLAS1Simple.test_copyc                 C   sp   dD ]}t t|d d ƒ}|d u rqt|g d¢ƒdƒ qdD ]}t t|d d ƒ}|d u r,qt|g d¢ƒdƒ qd S )NrA   Úasum©rD   éüÿÿÿrF   é   )ÚscÚdz©ù              @rb   ù      @      Àé   ©rN   rZ   r   rO   r2   r2   r3   Ú	test_asum}   s   üzTestFBLAS1Simple.test_asumc                 C   ó@   dD ]}t t|d d ƒ}|d u rqt|g d¢g d¢ƒdƒ qd S )NrA   r6   ra   )r   rF   rC   é÷ÿÿÿrj   rO   r2   r2   r3   Útest_dot‰   ó   üzTestFBLAS1Simple.test_dotc                 C   rl   )NrL   r8   rf   ©r   rD   rC   y      "À       @rj   rO   r2   r2   r3   Útest_complex_dotu�   ro   z"TestFBLAS1Simple.test_complex_dotuc                 C   rl   )NrL   r7   rf   ©r   rg   rC   y      @      ,Àrj   rO   r2   r2   r3   Útest_complex_dotc—   ro   z"TestFBLAS1Simple.test_complex_dotcc                 C   s|   dD ]}t t|d d ƒ}|d u rqt|g d¢ƒt d¡ƒ qdD ]}t t|d d ƒ}|d u r/q t|g d¢ƒt d¡ƒ q d S )NrA   r5   ra   é2   )r)   r#   rd   re   rf   )rN   rZ   r   ÚmathÚsqrtrO   r2   r2   r3   Ú	test_nrm2ž   s   üzTestFBLAS1Simple.test_nrm2c                 C   s¸   dD ]}t t|d d ƒ}|d u rqt|dg d¢ƒg d¢ƒ qdD ]}t t|d d ƒ}|d u r/q t|dg d¢ƒg d	¢ƒ q d
D ]}t t|d d ƒ}|d u rMq>t|dg d¢ƒg d¢ƒ q>d S )NrA   Úscalr   ra   )é   iøÿÿÿé
   rL   rg   rf   )rm   y       €      (Ày      (@      "@)ÚcsÚzdrD   )y              "@iôÿÿÿy      "@      (ÀrY   rO   r2   r2   r3   Ú	test_scalª   s    üzTestFBLAS1Simple.test_scalc                 C   s´   dD ])}t t|d d ƒ}|d u rqg d¢g d¢}}|||ƒ\}}t||ƒ t||ƒ qdD ])}t t|d d ƒ}|d u r=q.g d¢g d¢}}|||ƒ\}}t||ƒ t||ƒ q.d S )NrA   Úswaprp   )éþÿÿÿrD   rI   rL   rr   )r   rD   y      @      ÀrY   )rP   rQ   r9   ÚxÚyÚx1Úy1r2   r2   r3   Ú	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ƒ qd S )NrA   ÚiÚamax)r   r\   rD   rC   rL   )éûÿÿÿy      @      @ry   )rN   rZ   r   rO   r2   r2   r3   Ú	test_amaxÍ   s   þzTestFBLAS1Simple.test_amaxN)rT   rU   rV   rR   r_   rk   rn   rq   rs   rw   r}   r„   rˆ   r2   r2   r2   r3   rX   a   s    rX   c                   @   s”   e Zd Zdd„ Zejj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 ],}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 ],}t t|d d ƒ}|d u r@q1t|d	d
ggdgƒdgƒ t|d	d
ggdgddgƒdgƒ q1d S )NrA   ÚgemvrD   rb   éÜÿÿÿrF   éëÿÿÿrL   rg   rh   ù      HÀ      BÀù              @ù      HÀ      5ÀrY   rO   r2   r2   r3   Ú	test_gemvÙ   s   "ÿûzTestFBLAS2Simple.test_gemvc              	   C   s¦  dD ]S}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 ]8}t t|d d ƒ}|d u rgqXt|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ƒ qXdD ]=}dD ]8}t t|| 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—q“d S )NrA   ÚgerrC   r   rD   r\   ry   r]   rB   rc   é   rK   é   rG   rJ   rL   Úgeruù              ð?rg   r^   r   )r•   rM   rg   )r‘   ÚgercrY   )rP   rQ   r9   Únamer2   r2   r3   Útest_gerê   sH   &ÿÿÿÿÿÿÿúÿ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 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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 �rr�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 �r8�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�rwd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%d S ))NrC   rF   r&   r(   rE   r   ç      !@é   F©ÚendpointrJ   ÚDr\   rA   çH¯¼šò×z>ç›+¡†›„=Úsyrç      ð?©ÚrtolT©Úlowerr   )ÚincxÚoffxÚnr   ©r\   r\   Úsr9   r   ©rH   Úoverwrite_aç       @rG   rD   ©r¦   ©r§   ©r¨   r   rL   éýÿÿÿr)   Úher)r*   r   r   ÚnewaxisÚlinspaceÚviewÚconjÚc_r   ÚravelÚziprN   rZ   r   ÚTr   Úassert_raisesÚ	Exception)rP   r€   ÚresxÚresx_reverser�   r#   ÚreszÚresz_reverseÚrehzÚrehz_reverseÚwrQ   r£   r9   rH   Úbr2   r2   r3   Ú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 rpq^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 )'NrC   rF   r&   r(   rJ   rE   r   r™   rš   Fr›   rA   rž   rŸ   Úsyr2r¡   r¢   rD   r°   Tr¤   r   rz   ©r¦   r§   ÚincyÚoffy©r¦   r§   rÈ   rÉ   r¨   r   r©   rª   r9   r   r«   r­   rG   r®   r¯   ©rÈ   ©rÉ   r   )r*   r   r   r³   r´   r¹   rN   rZ   r   rº   r   r   r»   r¼   )rP   r€   r�   ÚresxyÚresxy_reverseÚqrQ   r£   r9   rH   rÄ   r2   r2   r3   Ú	test_syr2k  sT   2$ ÿ*ÿÿÿÿßzTestFBLAS2Simple.test_syr2c                 C   sJ  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 �]\}}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 )%NrC   rJ   r&   r(   r�   rš   rE   r\   rL   rž   rŸ   Úher2r¡   r¢   rD   r°   Tr¤   rÇ   rÊ   r±   r©   r)   r   r«   r­   rG   r   r®   rF   r¯   r   rË   rÌ   r   r   )r*   r   rµ   r³   r¶   r   r·   r   r¸   r¹   rN   rZ   r   rº   r   r»   r¼   )rP   r€   r�   rÍ   rÎ   ÚuÚvrQ   r£   r9   rH   rÄ   r2   r2   r3   Ú	test_her2˜  s\   4
&*
  *ÿÿÿÿÿÞzTestFBLAS2Simple.test_her2c                 C   sž  t j d¡}ttƒD ]Â\}}d}d}d}d}tt| |d ¡t|| d ƒƒ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< | |¡ |¡}
| |¡ |¡}|dƒ|dƒ}}t	d|d�\}|||||||	|
||d�	}|| 
|
¡ ||  }t||ƒ |||||||	||
|dd�
}||j 
|¡ ||
  }t||ƒ q
d S )NéÒ  rI   rF   rC   r   r(   )r   r   )r   rC   ry   )r   r   r   )rC   r   rD   r\   r‡   )Úgbmv)	Úmr¨   ÚkuÚklÚalpharH   r€   r�   Úbeta)
r×   r¨   rØ   rÙ   rÚ   rH   r€   r�   rÛ   Útrans)r*   ÚrandomÚdefault_rngÚ	enumerateÚDTYPESr   r   r   Úastyper   r6   r   rº   )rP   ÚrngÚindr    r¨   r×   rÙ   rØ   ÚAÚAbr€   r�   rÚ   rÛ   Úfuncrƒ   Úy2r2   r2   r3   Ú	test_gbmvÊ  s<    ÿ
ÿ
ÿâzTestFBLAS2Simple.test_gbmvc              	   C   s‚  t j d¡}ttƒD ]´\}}d}d}t||f|d�}t|d |f|d�}| |¡|t|ƒt|ƒf< td|d ƒD ] }| || ¡}	|	|t|| ƒt||ƒf< |	|d| |d …f< q8| |¡}|dk rg||j	 n|| 
¡ j	 }t|ƒ|dd d …f< | |¡ |¡}
| |¡ |¡}|dƒ|dƒ}}|dkr�td	|d�\}ntd
|d�\}|||||
||d�}|| |
¡ ||  }t||ƒ q
d S )NrÕ   ry   r   r(   rC   rE   ç      ô?rD   )Úhbmv)Úsbmv)ÚkrÚ   rH   r€   r�   rÛ   )r*   rÝ   rÞ   rß   rà   r   r   Úrangerá   rº   r¶   r   r   r6   r   )rP   râ   rã   r    r¨   rì   rä   rå   Úind2Útempr€   r�   rÚ   rÛ   ræ   rƒ   rç   r2   r2   r3   Útest_sbmv_hbmvì  s0   
 çzTestFBLAS2Simple.test_sbmv_hbmvc                 C   sÎ  t j d¡}ttt ƒD ]Ø\}}d}| ||f¡ |¡}|dkr+|| ||f¡d 7 }| |¡}|dk r9||j n|| ¡ j }t	|ƒ\}}|||f }| |¡ |¡}	| |¡ |¡}
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 )Niba¼ rD   rC   r•   r\   r   ré   )Úhpmvr(   )Úspmv)r¨   rÚ   Úapr€   r�   rÛ   )
r¨   rÚ   rÛ   r€   r�   ró   r¦   rÈ   r§   rÉ   rE   )r*   rÝ   rÞ   rß   rà   ÚCOMPLEX_DTYPESrá   rº   r¶   r   r   r   r   r6   r   r   )rP   râ   rã   r    r¨   rä   r)   ÚrÚApr€   r�   ÚxlongÚylongrÚ   rÛ   ræ   rƒ   rç   r2   r2   r3   Útest_spmv_hpmv	  s8   
 
ÿ:äzTestFBLAS2Simple.test_spmv_hpmvc                 C   s�  t j d¡}ttt ƒD ]¹\}}d}| ||f¡ |¡}|dkr+|| ||f¡d 7 }| |¡}|dk r9||j n|| ¡ j }t	|ƒ\}}|||f }| |¡ |¡}	tt t
|dƒ dƒ}
|dkr‚td|d�\}|
|	d d …d f  |	d d d …f  ¡ ¡ | }ntd	|d�\}|
|	d d …d f  |	d d d …f ¡ | }|||
||	d
�}td|d�}||||f< |dkrº| ¡ n||||f< t||ƒ qd S )NrÕ   rD   rC   r•   r\   g      @)Úhprr(   )Úspr)r¨   rÚ   ró   r€   ©rD   rD   )r*   rÝ   rÞ   rß   rà   rô   rá   rº   r¶   r   r   r   r6   r   r   )rP   râ   rã   r    r¨   rä   r)   rõ   rö   r€   rÚ   ræ   rç   rƒ   Úy1fr2   r2   r3   Útest_spr_hpr)  s.   
 0*ézTestFBLAS2Simple.test_spr_hprc                 C   s|  t j d¡}ttƒD ]±\}}d}| ||f¡ |¡}|dkr)|| ||f¡d 7 }| |¡}|dk r7||j n|| ¡ j }t|ƒ\}}|||f }| |¡ |¡}	| |¡ |¡}
|dƒ}|dkrjt	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Õ   rD   rC   r•   r   )Úhpr2r(   )Úspr2)r¨   rÚ   r€   r�   ró   rü   )rC   rD   r\   )rC   r   r   )r   r   rC   )r*   rÝ   rÞ   rß   rà   rá   rº   r¶   r   r   r6   r   r   )rP   râ   rã   r    r¨   rä   r)   rõ   rö   r€   r�   rÚ   ræ   rÒ   rç   rƒ   rý   r2   r2   r3   Útest_spr2_hpr2D  s0   
 . èzTestFBLAS2Simple.test_spr2_hpr2c                 C   sÈ  t j d¡}ttƒD ]×\}}d}d}| |¡ |¡}t||f|d�}t|d ƒD ]}| || ¡|t|| ƒt||ƒf< q(|dkr_|t	|ƒ  d| |d | ||d  d  ¡ |¡ 7  < t|d |f|d�}	t|d ƒD ]}
t
||
d�|	|
 d |
d …f< qot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Õ   rz   rD   r(   rC   r•   r   ©rì   )Útbmv©rì   rH   r€   ©rì   rH   r€   r   ©rì   rH   r€   r   rÜ   )r*   rÝ   rÞ   rß   rà   rá   r   rí   r   r   r   r   r6   r   rº   r¶   ©rP   râ   rã   r    r¨   rì   r€   rä   Úsuprå   Úrowræ   rƒ   rç   r2   r2   r3   Ú	test_tbmv`  ó8   &< 




ÞzTestFBLAS2Simple.test_tbmvc                 C   sÈ  t j d¡}ttƒD ]×\}}d}d}| |¡ |¡}t||f|d�}t|d ƒD ]}| || ¡|t|| ƒt||ƒf< q(|dkr_|t	|ƒ  d| |d | ||d  d  ¡ |¡ 7  < t|d |f|d�}	t|d ƒD ]}
t
||
d�|	|
 d |
d …f< qot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Õ   ry   rD   r(   rC   r•   r   r  )Útbsvr  r  r  )r*   rÝ   rÞ   rß   rà   rá   r   rí   r   r   r   r   r   r   rº   r¶   r  r2   r2   r3   Ú	test_tbsv†  r  zTestFBLAS2Simple.test_tbsvc                 C   sN  t j d¡}ttƒD ]š\}}d}| |¡ |¡}|dk r&t| ||f¡ƒ}nt| ||f¡| ||f¡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Õ   rz   r   r•   )Útpmvr(   ©r¨   ró   r€   rC   ©r¨   ró   r€   r   ©r¨   ró   r€   r   rÜ   )r*   rÝ   rÞ   rß   rà   rá   r   r   r   r6   r   r   rº   r¶   ©rP   râ   rã   r    r¨   r€   rä   r)   rõ   rö   ræ   rƒ   rç   r2   r2   r3   Ú	test_tpmv¬  s0   $




ãzTestFBLAS2Simple.test_tpmvc                 C   sZ  t j d¡}ttƒD ] \}}d}| |¡ |¡}|dk r&t| ||f¡ƒ}nt| ||f¡| ||f¡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Õ   rz   r   r•   )Útpsvr(   r  rC   r  r  )r*   rÝ   rÞ   rß   rà   rá   r   r   r   r   r   r   r   rº   r¶   r  r2   r2   r3   Ú	test_tpsvÍ  s2   $




ãzTestFBLAS2Simple.test_tpsvc           
      C   s  t j d¡}ttƒD ]€\}}d}| ||f¡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Õ   rD   )Útrmvr(   ©rH   r€   rC   ©rH   r€   r   ©rH   r€   r   rÜ   r   )r*   rÝ   rÞ   rß   rà   r   rá   r   r   r6   r   r   rº   r¶   ©
rP   râ   rã   r    r¨   rä   r€   ræ   rƒ   rç   r2   r2   r3   Ú	test_trmvî  s(   


ëzTestFBLAS2Simple.test_trmvc           
      C   s@  t j d¡}ttƒD ]“\}}d}| ||f¡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Õ   é   )Útrsvr(   r  rC   )rH   r€   r¥   r  r  r   )r*   rÝ   rÞ   rß   rà   r   rá   r   r   r   r   r   r   rº   r¶   r  r2   r2   r3   Ú	test_trsv  s.   



çzTestFBLAS2Simple.test_trsvN)rT   rU   rV   r�   ÚpytestÚmarkÚthread_unsafer˜   rÅ   rÐ   rÔ   rè   rð   rù   rþ   r  r
  r  r  r  r  r  r2   r2   r2   r3   r‰   ×   s$    
 `-2" &&!!r‰   c                   @   r=   )ÚTestFBLAS3Simplec                 C   s¼   dD ]+}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 ]+}t t|d d ƒ}|d u r?q0t|d	d
gdgƒdggƒ t|d	d
gdgddgƒdgƒ q0d S )NrA   r'   rD   rb   r‹   rF   rŒ   rL   rg   rh   r�   rŽ   r�   rY   rO   r2   r2   r3   Ú	test_gemm'  s     ûzTestFBLAS3Simple.test_gemmN)rT   rU   rV   r#  r2   r2   r2   r3   r"  %  rW   r"  Úsdzcc                 c   s0   � |D ]}t t||  dƒ}|du rq|V  qdS )z;Just a helper: return a specified BLAS function w/typecode.N)rN   rZ   )ræ   ÚpsrQ   r9   r2   r2   r3   Ú	_get_func6  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   rD   )r­   r*  g       @)r)  r(  g      "@)r*   ÚarrayrH   rÄ   r   r)   Út©rP   r2   r2   r3   Úsetup_methodA  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¡   ©rH   rÄ   r)   rÚ   rÛ   rC   ©rH   rÄ   r¥   r)   rÚ   rÛ   )rH   rÄ   Úsider)   rÚ   rÛ   )r&  rH   rÄ   r)   r   r,  rº   ©rP   r9   Úresr2   r2   r3   Ú	test_symmJ  s   ÿ÷zTestBLAS3Symm.test_symmc                 C   s<   t tdd ƒ}|d urtt|fi | j| jdddœ¤Ž d S d S )NÚdsymmrC   )rH   rÄ   rÚ   r2  )rN   rZ   r»   r¼   rH   rÄ   ©rP   r9   r2   r2   r3   Útest_summ_wrong_sideV  s   ÿÿz"TestBLAS3Symm.test_summ_wrong_sidec                 C   sr   t tddƒ}|dur5|| j| j| jddd�}t || j¡sJ ‚|| j| jd| jddd�}t || j¡r7J ‚dS 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.
        r6  Nr¡   r0  rC   r1  )rN   rZ   rH   rÄ   r)   r*   Úallcloser,  r3  r2   r2   r3   Útest_symm_wrong_uplo^  s   ûz"TestBLAS3Symm.test_symm_wrong_uploN)rT   rU   rV   r.  r5  r8  r:  r2   r2   r2   r3   r'  ?  s
    	r'  c                   @   ó$   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+  rH   r,  Úttr-  r2   r2   r3   r.  m  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¡   ©rH   rÚ   rC   )rH   rÚ   r¥   )rH   rÚ   rÛ   r)   )rH   rÚ   rÜ   )
r&  rH   r   r*   r   r,  r   r   ÚshaperC  ©rP   r9   r)   Úc0r2   r2   r3   Ú	test_syrkw  s   ôzTestBLAS3Syrk.test_syrkc                 C   s>   t tdd ƒ}|d urtt|fi | jdt d¡dœ¤Ž d S d S )NÚdsyrkr¡   )rF   r]   )rH   rÚ   r)   )rN   rZ   r»   r¼   rH   r*   r   r7  r2   r2   r3   Útest_syrk_wrong_c‰  s   ÿÿzTestBLAS3Syrk.test_syrk_wrong_cN)rT   rU   rV   r.  rI  rK  r2   r2   r2   r3   r<  l  s    
r<  c                   @   r;  )Ú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(  rB  ry   )r*   r+  rH   rÄ   r,  rC  r-  r2   r2   r3   r.  ’  s   
þ
þ
þ
ÿzTestBLAS3Syr2k.setup_methodc                 C   sÔ   t dƒD ]c}|| 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¡   ©rH   rÄ   rÚ   rC   )rH   rÄ   rÚ   r¥   )rH   rÄ   rÚ   rÛ   r)   )rH   rÄ   rÚ   rÜ   )r&  rH   rÄ   r   r*   r   r,  r   r   rF  rC  rG  r2   r2   r3   Ú
test_syr2kŸ  s   ôzTestBLAS3Syr2k.test_syr2kc              	   C   sB   t tdd ƒ}|d urtt|fi | j| jdt d¡dœ¤Ž d S d S )NÚdsyr2kr¡   )r  r]   )rH   rÄ   rÚ   r)   )rN   rZ   r»   r¼   rH   rÄ   r*   r   r7  r2   r2   r3   Útest_syr2k_wrong_c¯  s   ýÿz!TestBLAS3Syr2k.test_syr2k_wrong_cN)rT   rU   rV   r.  rO  rQ  r2   r2   r2   r3   rL  ‘  s    rL  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-  r2   r2   r3   r.  ¼  s   
ÿzTestSyHe.setup_methodc                 C   s@   t ddƒD ]}|| j| jdd�}tt |¡t ddg¡ƒ qd S )Nr/  Úzcr¡   rN  rC   rE   ©r&  rS  r   r*   r   r   r3  r2   r2   r3   Útest_symm_zcÀ  ó   ýzTestSyHe.test_symm_zcc                 C   s@   t ddƒD ]}|| j| jdd�}tt |¡t ddg¡ƒ qd S )NÚhemmrT  r¡   rN  rC   rU  r3  r2   r2   r3   Útest_hemm_zcÆ  rW  zTestSyHe.test_hemm_zcc                 C   ó<   t ddƒD ]}|| jdd�}tt |¡t ddg¡ƒ qd S )NrD  rT  r¡   rE  rE   rU  r3  r2   r2   r3   Útest_syrk_zrÌ  ó   þzTestSyHe.test_syrk_zrc                 C   rZ  )NÚherkrT  r¡   rE  rC   rU  r3  r2   r2   r3   Útest_herk_zrÑ  r\  zTestSyHe.test_herk_zrc                 C   óD   t ddƒD ]}|| j| jdd�}tt |¡dt ddg¡ ƒ qd S )NrM  rT  r¡   rN  r­   rE   rU  r3  r2   r2   r3   Útest_syr2k_zrÖ  ó    þzTestSyHe.test_syr2k_zrc                 C   r_  )NÚher2krT  r¡   rN  r­   rC   rU  r3  r2   r2   r3   Útest_her2k_zrÛ  ra  zTestSyHe.test_her2k_zrN)rT   rU   rV   Ú__doc__r.  rV  rY  r[  r^  r`  rc  r2   r2   r2   r3   rR  ¹  s    rR  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*  ©rA  rB  r=  )rC   rC   r   rD   )r   rC   r\   rF   )r   r   rC   ry   )r   r   r   rC   r9   )r!   rC   r\   r   rF   rD   ry   rI   r]   rJ   rz   )r*   r+  rH   rÄ   Úa2Úb2r-  r2   r2   r3   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¡   rC   )r2  r(  éd   )r£   Úatol)r   r»   r¼   rh  ri  rá   rF  r   r*   ÚfinfoÚeps)rP   rj  rk  r4  rì   r2   r2   r3   Ú	test_sideñ  s   ÿ 
ÿzTestTRMM.test_sidec                 C   sL   t tdd ƒ}|d ur$|d| j| jƒ}t g d¢g d¢g¡}t||ƒ d S d S )NÚdtrmmr¡   )r@  g      0@g      Àrg  ©rN   rZ   rH   rÄ   r*   r+  r   ©rP   r9   ÚresultÚexpectedr2   r2   r3   Útest_abü  s   
ÿûzTestTRMM.test_abc                 C   sP   t tdd ƒ}|d ur&|d| j| jdd�}t g d¢g d¢g¡}t||ƒ d S d S )Nrq  r¡   Tr¤   rf  )r*  r=  r(  rr  rs  r2   r2   r3   Útest_ab_lower  s   
ÿüzTestTRMM.test_ab_lowerc                 C   sº   t tdd ƒ}|d ur[dD ]&}| j ¡ }|d| j||d�}t|jjdu o*t 	||¡du ƒ t
|| jƒ qt | j ¡ ¡}|d| j|dd�}t|jjdu oRt 	||¡du ƒ t||ƒ d S d S )Nrq  )TFr¡   )Úoverwrite_bFT)rN   rZ   rÄ   r[   rH   r   ÚflagsÚf_contiguousr*   Úmay_share_memoryr   Úasfortranarrayr   )rP   r9   ÚoverwrÚbcopyrt  r2   r2   r3   Útest_b_overwrites  s    
ÿÿózTestTRMM.test_b_overwritesN)rT   rU   rV   rd  r.  r  r   Úparametrizerà   rp  rv  rw  r  r2   r2   r2   r3   re  á  s    

	re  c               	   C   sœ  t j d¡} ttƒD �]@\}}t  |¡jd }td|d�\}|  d¡ |¡}|  d¡ |¡}|dƒ}t	t
||||ƒ t	t
|||j|ƒ d}d	}	|d
ƒ}|dk r[|  |	|	f¡t|	ƒ }n|  |	|	f¡|  |	|	f¡d  t|	ƒ }| |¡}t|ƒ}
t|ƒ}|  |	|f¡ |¡}|  ||	f¡ |¡}||||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è  )Útrsmr(   )r\   rF   r©   rC   r]   rI   g      Àr   r•   )rÚ   rH   rÄ   )rm  )rÚ   rH   rÄ   Útrans_a)rÚ   rH   rÄ   r   )rÚ   rH   rÄ   r   r2  )rÚ   rH   rÄ   r   r2  r¥   )r*   rÝ   rÞ   rß   rà   rn  ro  r   rá   r»   r¼   rº   r   r   r   r   rF  r   r   r¶   r   )râ   rã   r    Útolræ   rä   ÚBrÚ   r¨   r×   ÚAuÚAlÚB1ÚB2r‚   Úx2r2   r2   r3   Ú	test_trsm!  sT   (
ÏrŠ  Fzgh-16930)ÚrunÚreasonc                  C   s8   t  dd¡} tjj | ddd¡}t d¡}t||ƒ d S )Nrz   rJ   rF   rD   rE   iô  )	r*   ÚrepeatÚscipyÚlinalgÚblasÚdnrm2ru   rv   r   )r€   Úactualru  r2   r2   r3   Útest_gh_169309W  s   
r“  c                  C   sT   t  dd¡} d}ttjƒ� tjj | dd|¡ W d   ƒ d S 1 s#w   Y  d S )Nrz   rJ   rE   rF   rD   )	r*   r�  r»   rZ   Ú__fblas_errorrŽ  r�  r�  r‘  )r€   r¦   r2   r2   r3   Útest_dnrm2_neg_incx`  s
   "ÿr•  )r$  ):ru   r  Únumpyr*   Únumpy.randomÚnumpy.testingr   r   r   r   r   r   r»   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   rŽ  Úscipy.linalgr   rZ   r   r   r   r   r$   ÚImportErrorÚREAL_DTYPESrô   rà   r4   r<   r>   rX   r‰   r"  r&  r'  r<  rL  rR  re  rŠ  r   Úxfailr“  r•  r2   r2   r2   r3   Ú<module>   sN   Dÿ'v    R
	-%((@6ÿ
