a
    CCCf                     @   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   X/var/www/html/django/DPS/env/lib/python3.9/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 rq|t|dg dg d q|d S )Nr>   Zscalr    r[   )   i
   rI   ra   r`   )rf   y             (y      (@      "@)csZzdrA   )y              "@iy      "@      (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 rqbt|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      5rT   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 rqt|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 qd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rd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qt|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 qt
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rd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>   Hz>+=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 rqt|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rd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! qd 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rt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rt
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rt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< qt
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< qt
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 )zSYMM 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rd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 ot	||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 rt||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
