B
    `V                 @   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$ y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e-Z.G dd de-Z/G dd de-Z0G dd de-Z1d$ddZ2G dd de-Z3G dd de-Z4G dd de-Z5G dd de-Z6G d d! d!e-Z7d"d# Z8d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 r/   K/home/dcms/DCMS/lib/python3.7/site-packages/scipy/linalg/tests/test_blas.pytest_get_blas_funcs$   s*    r1   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dot)r!   r(   )r3   dotcdotu)r   r)   r
   r+   AssertionErrorr	   )fghr/   r/   r0   test_get_blas_funcs_aliasK   s    r:   c               @   s   e Zd Zdd ZdS )TestCBLAS1Simplec             C   s   xLd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W xLdD ]D}t t|d d }|d krrqTt|dddgdddgddd	ddg qTW d S )Nsdr      r         )a   	      czy               @y            $@)getattrr%   r   )selfpr7   r/   r/   r0   	test_axpyX   s    

zTestCBLAS1Simple.test_axpyN)__name__
__module____qualname__rI   r/   r/   r/   r0   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   xLd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W xLdD ]D}t t|d d }|d krrqTt|dddgdddgddd	ddg qTW d S )Nr<   r   r=   r   r>   r?   r@   )rA   rB   rC   rD   rE   y               @y            $@)rF   fblasr   )rG   rH   r7   r/   r/   r0   rI   i   s    

zTestFBLAS1Simple.test_axpyc             C   s   xHdD ]@}t t|d d }|d kr$qt|dddgdgd dddg qW xHdD ]@}t t|d d }|d krnqPt|ddd	gdgd ddd	g qPW d S )
Nr<   copyr>      r@      rE   y              @y      @      @)rF   rN   r   )rG   rH   r7   r/   r/   r0   	test_copyw   s    
&
zTestFBLAS1Simple.test_copyc             C   s|   x:dD ]2}t t|d d }|d kr$qt|dddgd qW x:dD ]2}t t|d d }|d kr`qBt|ddd	gd
 qBW d S )Nr<   Zasumr>   r@      )scdzy              @y      @         )rF   rN   r   )rG   rH   r7   r/   r/   r0   	test_asum   s    

zTestFBLAS1Simple.test_asumc             C   sH   xBdD ]:}t t|d d }|d kr$qt|dddgdddgd qW d S )	Nr<   r3   r>   rS   r@   r   r=   i)rF   rN   r   )rG   rH   r7   r/   r/   r0   test_dot   s
    
zTestFBLAS1Simple.test_dotc             C   sH   xBdD ]:}t t|d d }|d kr$qt|dddgdddgd	 qW d S )
NrE   r5   y              @rS   y      @      r   r>   r=   y      "       @)rF   rN   r   )rG   rH   r7   r/   r/   r0   test_complex_dotu   s
    
z"TestFBLAS1Simple.test_complex_dotuc             C   sH   xBdD ]:}t t|d d }|d kr$qt|dddgdddgd qW d S )	NrE   r4   y              @rS   y      @      r   r=   y      @      ,)rF   rN   r   )rG   rH   r7   r/   r/   r0   test_complex_dotc   s
    
z"TestFBLAS1Simple.test_complex_dotcc             C   s   x@dD ]8}t t|d d }|d kr$qt|dddgtd qW x@dD ]8}t t|d d }|d krfqHt|ddd	gtd qHW d S )
Nr<   r2   r>   rS   r@   2   )r(   r$   rU   rV   y              @y      @      )rF   rN   r   mathsqrt)rG   rH   r7   r/   r/   r0   	test_nrm2   s    

zTestFBLAS1Simple.test_nrm2c             C   s   xBdD ]:}t t|d d }|d kr$qt|ddddgddd	g qW xBd
D ]:}t t|d d }|d krhqJt|ddddgdddg qJW xBdD ]:}t t|d d }|d krqt|ddddgdddg qW d S )Nr<   Zscalr   r>   rS   r@      i
   rE   y              @y      @      iy             (y      (@      "@)cszdy              "@iy      "@      ()rF   rN   r   )rG   rH   r7   r/   r/   r0   	test_scal   s    
 
 
zTestFBLAS1Simple.test_scalc             C   s   x^dD ]V}t t|d d }|d kr$qdddgdddg }}|||\}}t|| t|| qW x^dD ]V}t t|d d }|d krqfdd	dgddd
g }}|||\}}t|| t|| qfW d S )Nr<   Zswapr   r>   r=   rB   rE   y              @y      @      )rF   rN   r   )rG   rH   r7   xyx1y1r/   r/   r0   	test_swap   s     



zTestFBLAS1Simple.test_swapc             C   sl   x2dD ]*}t td| d }t|dddgd qW x2dD ]*}t td| d }t|d	d
dgd q:W d S )Nr<   iZamaxre   rP   r>   r=   rE   y      @      @r`   )rF   rN   r   )rG   rH   r7   r/   r/   r0   	test_amax   s    

zTestFBLAS1Simple.test_amaxN)rJ   rK   rL   rI   rR   rX   rY   rZ   r[   r_   rd   rj   rm   r/   r/   r/   r0   rM   g   s   rM   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   x`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W x`dD ]X}t t|d d }|d krqht|d	d
ggdgdg t|d	d
ggdgddgdg qhW d S )Nr<   Zgemvr>   rS   ir@   irE   y              @y      @      y      H      By              @y      H      5)rF   rN   r   )rG   rH   r7   r/   r/   r0   	test_gemv   s    
$
zTestFBLAS2Simple.test_gemvc          	   C   s  xd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W xzdD ]r}t t|d d }|d krqt|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 qW xdD ]}xdD ]x}t t|| 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>W q4W d S )Nr<   gerr=   r   r>   rP   r`   rQ   rT      rD      )rA   rC   rE   Zgeruy              ?y              @y              @re   y               @)rp   Zgerc)rF   rN   r   )rG   rH   r7   namer/   r/   r0   test_ger   s4    
&(



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 	 }
xt
dddgD ]|\}}tt|d d }|d krf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||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>W xt
d%ddgD ]|\}}tt|d d }|d k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rtd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 qW xt
d%ddgD ]\}}tt|d( d }|d krqft|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 qfW d S ))Nr=   r@   r&   )r!   r?   r   g      !@   F)endpointrC   DrP   r<   gHz>g+=Zsyrg      ?)rtolT)lowerr   )incxoffxnre   )rP   rP   sr7   r    )rA   overwrite_ag       @)rA   r>   )rz   )r{   )r|   )r   r   rE   r(   Zher)r)   r   r   newaxislinspaceviewconjc_r   ravelziprF   rN   r   Tr   assert_raises	Exception)rG   rf   ZresxZresx_reverserg   r$   ZreszZresz_reverseZrehzZrehz_reversewrH   rx   r7   rA   br/   r/   r0   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}x@tdddgD ],\}}tt|d d }|d k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|	|
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! qW d S )'Nr=   r@   r&   )r!   rC   r?   r   g      !@ru   F)rv   r<   gHz>g+=Zsyr2g      ?)rx   r>   )r|   T)ry   r   ra   )rz   r{   incyoffy)rz   r{   r   r   r|   re   )rP   rP   r}   r7   r    )rA   r~   g       @)rA   )rz   )r{   )r   )r   )r   r   )r)   r   r   r   r   r   rF   rN   r   r   r   r   r   r   )rG   rf   rg   resxyresxy_reverseqrH   rx   r7   rA   r   r/   r/   r0   	test_syr2n  sH    2$&*

zTestFBLAS2Simple.test_syr2c             C   sV  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  }xJt	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W d S )%Nr=   rC   r&   )r!   rw   ru   r?   rP   rE   gHz>g+=Zher2g      ?)rx   r>   )r|   T)ry   )rz   r{   r   r   )rz   r{   r   r   r|   r   )rP   rP   r(   r    )rA   r~   g       @)rA   r   )rz   r@   )r{   re   )r   )r   r   )r   r   )r)   r   r   r   r   r   r   r   r   r   rF   rN   r   r   r   r   r   )rG   rf   rg   r   r   uvrH   rx   r7   rA   r   r/   r/   r0   	test_her2  sP    4
&*
  
*

zTestFBLAS2Simple.test_her2c             C   s\  t d xLt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W d S )Ni  rB   r@   r=   r   )r!   )r   r   )r   r=   r`   )r   r   r   )r=   r   r>   rP   rl   )Zgbmv)	mr|   kuklalpharA   rf   rg   beta)r   	enumerateDTYPESr   r   r   r   astyper   r3   r   )rG   indr!   r|   r   r   r   AAbrf   rg   r   r   funcri   y2r/   r/   r0   	test_gbmv  s,     
zTestFBLAS2Simple.test_gbmvc          	   C   s  t d xtttD ]f\}}d}d}t||f|d}t|d |f|d}t||t|t|f< xPtd|d D ]>}t|| }||t|| t||f< ||d| |d f< qrW ||}|dk r||j n||	 j }t
||dd d f< t||}	t||}
|d|d }}|dkr:td	|d\}ntd
|d\}|||||	|
|d}|||	 ||
  }t|| qW d S )Ni  r`   r   )r!   r=   r?   g      ?r>   )Zhbmv)Zsbmv)kr   rA   rf   rg   r   )r   r   r   r   r   r   ranger   r   r   r   r   r3   r   )rG   r   r!   r|   r   r   r   Zind2temprf   rg   r   r   r   ri   r   r/   r/   r0   test_sbmv_hbmv  s.    
 
zTestFBLAS2Simple.test_sbmv_hbmvc             C   s  t d xttt D ]\}}d}t|||}|dkrP|t||d 7 }||}|dk rl||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W d S )Ni  r>   r=   y              ?rP   r   g      ?)Zhpmv)r!   )Zspmv)r|   r   aprf   rg   r   )
r|   r   r   rf   rg   r   rz   r   r{   r   r?   )r   r   r   COMPLEX_DTYPESr   r   r   r   r   r   r   r   r3   r   r   )rG   r   r!   r|   r   r(   rAprf   rg   ZxlongZylongr   r   r   ri   r   r/   r/   r0   test_spmv_hpmv  s4    
 
:zTestFBLAS2Simple.test_spmv_hpmvc             C   s  t d x|ttt D ]j\}}d}t|||}|dkrP|t||d 7 }||}|dk rl||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rn| n||||f< t|| qW d S )Ni  r>   r=   y              ?rP   g      @)Zhpr)r!   )Zspr)r|   r   r   rf   )r>   r>   )r   r   r   r   r   r   r   r   r   r   r   r3   r   r   )rG   r   r!   r|   r   r(   r   r   rf   r   r   r   ri   y1fr/   r/   r0   test_spr_hpr'  s,    
 0*zTestFBLAS2Simple.test_spr_hprc             C   sz  t d xjttD ]\\}}d}t|||}|dkrL|t||d 7 }||}|dk rh||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< |dddg  |dddgdddgf< t|| qW d S )Ni  r>   r=   y              ?r   )Zhpr2)r!   )Zspr2)r|   r   rf   rg   r   )r>   r>   rP   r   )r   r   r   r   r   r   r   r   r   r3   r   r   )rG   r   r!   r|   r   r(   r   r   rf   rg   r   r   r   r   ri   r   r/   r/   r0   test_spr2_hpr2B  s.    
 .&zTestFBLAS2Simple.test_spr2_hpr2c          
   C   s  t d xttD ]\}}d}d}t||}t||f|d}x6t|d D ]&}t|| |t|| t||f< qRW |dkr|t|  dt|d | ||d  d  | 7  < t|d |f|d}x2t|d D ]"}	t	||	d||	 d |	d f< qW t
d	|d\}
|
|||d
}||}t|| |
|||dd}|d|t|t|f< ||}t|| |
|||ddd}|j|}t|| |
|||ddd}| j|}t|| qW d S )Ni  ra   r>   )r!   r=   y              ?r   )r   )Ztbmv)r   rA   rf   )r   rA   rf   r   )r   rA   rf   r   trans)r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   )rG   r   r!   r|   r   rf   r   supr   rowr   ri   r   r/   r/   r0   	test_tbmv^  s6    &:"




zTestFBLAS2Simple.test_tbmvc          
   C   s  t d xttD ]\}}d}d}t||}t||f|d}x6t|d D ]&}t|| |t|| t||f< qRW |dkr|t|  dt|d | ||d  d  | 7  < t|d |f|d}x2t|d D ]"}	t	||	d||	 d |	d f< qW 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W d S )Ni  r`   r>   )r!   r=   y              ?r   )r   )Ztbsv)r   rA   rf   )r   rA   rf   r   )r   rA   rf   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rG   r   r!   r|   r   rf   r   r   r   r   r   ri   r   r/   r/   r0   	test_tbsv  s6    &:"




zTestFBLAS2Simple.test_tbsvc             C   sB  t d x2ttD ]$\}}d}t||}|dk rFt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W d S )Ni  ra   r   y              ?)Ztpmv)r!   )r|   r   rf   r=   )r|   r   rf   r   )r|   r   rf   r   r   )r   r   r   r   r   r   r   r   r3   r   r   r   r   )rG   r   r!   r|   rf   r   r(   r   r   r   ri   r   r/   r/   r0   	test_tpmv  s*    2




zTestFBLAS2Simple.test_tpmvc             C   sN  t d x>ttD ]0\}}d}t||}|dk rFt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W d S )Ni  ra   r   y              ?)Ztpsv)r!   )r|   r   rf   r=   )r|   r   rf   r   )r|   r   rf   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rG   r   r!   r|   rf   r   r(   r   r   r   ri   r   r/   r/   r0   	test_tpsv  s,    2




zTestFBLAS2Simple.test_tpsvc       	      C   s  t d x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W d S )
Ni  r>   )Ztrmv)r!   )rA   rf   r=   )rA   rf   r   )rA   rf   r   r   r   )r   r   r   r   r   r   r   r   r3   r   r   r   r   )	rG   r   r!   r|   r   rf   r   ri   r   r/   r/   r0   	test_trmv  s&    


zTestFBLAS2Simple.test_trmvc       	      C   s>  t d x.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W d S )Ni     )Ztrsv)r!   )rA   rf   r=   )rA   rf   ry   )rA   rf   r   )rA   rf   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )	rG   r   r!   r|   r   rf   r   ri   r   r/   r/   r0   	test_trsv  s,    



zTestFBLAS2Simple.test_trsvN)rJ   rK   rL   ro   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   rn      s     `-2 &&rn   c               @   s   e Zd Zdd ZdS )TestFBLAS3Simplec             C   s   x^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W x^dD ]V}t t|d d }|d krqft|d	d
gdgdgg t|d	d
gdgddgdg qfW d S )Nr<   r'   r>   rS   ir@   irE   y              @y      @      y      H      By              @y      H      5)rF   rN   r   )rG   rH   r7   r/   r/   r0   	test_gemm  s    
"
zTestFBLAS3Simple.test_gemmN)rJ   rK   rL   r   r/   r/   r/   r0   r     s   r   sdzcc             c   s2   x,|D ]$}t t||  d}|dkr$q|V  qW dS )z;Just a helper: return a specified BLAS function w/typecode.N)rF   rN   )r   ZpsrH   r7   r/   r/   r0   	_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 )	Ng      ?g       @g        g      @g      )r   r>   g       @g      "@)r)   arrayrA   r   r   r(   t)rG   r/   r/   r0   setup_method8  s    
zTestBLAS3Symm.setup_methodc          	   C   s   xt 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
W d S )Nsymmg      ?)rA   r   r(   r   r   r=   )rA   r   ry   r(   r   r   )rA   r   sider(   r   r   )r   rA   r   r(   r   r   r   )rG   r7   resr/   r/   r0   	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=   )rA   r   r   r   )rF   rN   r   r   rA   r   )rG   r7   r/   r/   r0   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 )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   Ng      ?)rA   r   r(   r   r   r=   )rA   r   ry   r(   r   r   )	rF   rN   rA   r   r(   r)   Zallcloser   r6   )rG   r7   r   r/   r/   r0   test_symm_wrong_uploU  s    z"TestBLAS3Symm.test_symm_wrong_uploN)rJ   rK   rL   r   r   r   r   r/   r/   r/   r0   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 )Ng      ?g        g       g       @g      @g      @g      g      *@g      @g      @)r)   r   rA   r   tt)rG   r/   r/   r0   r   d  s    

zTestBLAS3Syrk.setup_methodc             C   s   xt 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
W d S )Nsyrkg      ?)rA   r   r=   )rA   r   ry   )rA   r   r   r(   )rA   r   r   )
r   rA   r   r)   r   r   r   r   shaper   )rG   r7   r(   c0r/   r/   r0   	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dsyrkg      ?)r@   rQ   )rA   r   r(   )rF   rN   r   r   rA   r)   r   )rG   r7   r/   r/   r0   test_syrk_wrong_c  s    zTestBLAS3Syrk.test_syrk_wrong_cN)rJ   rK   rL   r   r   r   r/   r/   r/   r0   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 )
Ng      ?g        g       g       @g      @r   g      g      @r`   )r)   r   rA   r   r   r   )rG   r/   r/   r0   r     s    


zTestBLAS3Syr2k.setup_methodc             C   s   xt 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
W d S )Nsyr2kg      ?)rA   r   r   r=   )rA   r   r   ry   )rA   r   r   r   r(   )rA   r   r   r   )r   rA   r   r   r)   r   r   r   r   r   r   )rG   r7   r(   r   r/   r/   r0   
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dsyr2kg      ?)r   rQ   )rA   r   r   r(   )rF   rN   r   r   rA   r   r)   r   )rG   r7   r/   r/   r0   test_syr2k_wrong_c  s    z!TestBLAS3Syr2k.test_syr2k_wrong_cN)rJ   rK   rL   r   r   r   r/   r/   r/   r0   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 )Ng        y             y              ?)r)   r   sigma_y)rG   r/   r/   r0   r     s    
zTestSyHe.setup_methodc             C   sD   x>t ddD ]0}|| j| jdd}tt|tddg qW d S )Nr   zcg      ?)rA   r   r   r=   r?   )r   r   r   r)   r   r   )rG   r7   r   r/   r/   r0   test_symm_zc  s    zTestSyHe.test_symm_zcc             C   sD   x>t ddD ]0}|| j| jdd}tt|tddg qW d S )NZhemmr   g      ?)rA   r   r   r=   )r   r   r   r)   r   r   )rG   r7   r   r/   r/   r0   test_hemm_zc  s    zTestSyHe.test_hemm_zcc             C   s@   x:t ddD ],}|| jdd}tt|tddg qW d S )Nr   r   g      ?)rA   r   r?   )r   r   r   r)   r   r   )rG   r7   r   r/   r/   r0   test_syrk_zr  s    zTestSyHe.test_syrk_zrc             C   s@   x:t ddD ],}|| jdd}tt|tddg qW d S )NZherkr   g      ?)rA   r   r=   )r   r   r   r)   r   r   )rG   r7   r   r/   r/   r0   test_herk_zr  s    zTestSyHe.test_herk_zrc             C   sH   xBt ddD ]4}|| j| jdd}tt|dtddg  qW d S )Nr   r   g      ?)rA   r   r   g       @r?   )r   r   r   r)   r   r   )rG   r7   r   r/   r/   r0   test_syr2k_zr  s    zTestSyHe.test_syr2k_zrc             C   sH   xBt ddD ]4}|| j| jdd}tt|dtddg  qW d S )NZher2kr   g      ?)rA   r   r   g       @r=   )r   r   r   r)   r   r   )rG   r7   r   r/   r/   r0   test_her2k_zr  s    zTestSyHe.test_her2k_zrN)rJ   rK   rL   __doc__r   r   r   r   r   r   r   r/   r/   r/   r0   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 )Ng      ?g       @g       g      @g      @g      g      @g      @r=   r   r>   r   rP   r@   r`   r7   )r"   rB   rQ   rC   ra   )r)   r   rA   r   a2b2)rG   r/   r/   r0   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trmm)r!   g      ?r=   )r   g        d   )rx   atol)r   r   r   r   r   r   r   r   r)   finfoeps)rG   r   r   r   r   r/   r/   r0   	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dtrmmg      ?g      *@g      0@g      g      @g      @g       )rF   rN   rA   r   r)   r   r   )rG   r7   resultexpectedr/   r/   r0   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   g      ?T)ry   g      @g      @g      g       g        )rF   rN   rA   r   r)   r   r   )rG   r7   r   r   r/   r/   r0   test_ab_lower  s    zTestTRMM.test_ab_lowerc             C   s   t tdd }|d k	rxTdD ]L}| j }|d| j||d}t|jjdkoVt	||dk t
|| j qW t| j }|d| j|dd}t|jjdkot	||dk t|| d S )Nr   )TFg      ?)Zoverwrite_bFT)rF   rN   r   rO   rA   r   flagsf_contiguousr)   Zmay_share_memoryr   Zasfortranarrayr   )rG   r7   ZoverwrZbcopyr   r/   r/   r0   test_b_overwrites  s    

zTestTRMM.test_b_overwritesN)rJ   rK   rL   r   r   pytestmarkZparametrizer   r   r   r   r   r/   r/   r/   r0   r     s   	r   c           	   C   s  t d xpt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W d S )Ni  i  )Ztrsm)r!   rP   r@   r=   rQ   rB   g      r   y              ?)r   rA   r   )r   )r   rA   r   Ztrans_a)r   rA   r   r   )r   rA   r   r   r   )r   rA   r   r   r   ry   )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B2rh   Zx2r/   r/   r0   	test_trsm  sN    2
r   )r   )9Z	__usage__r]   r   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   rN   r   r   r   r   r%   ImportErrorZREAL_DTYPESr   r   r1   r:   objectr;   rM   rn   r   r   r   r   r   r   r   r   r/   r/   r/   r0   <module>
   s@   D
'v    C
	-%((@