o
    g                     @   s  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlm Z!m"Z"m#Z#m$Z$ zddlm%Z& W n e'yk   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Z0d$ddZ1G dd dZ2G dd dZ3G dd dZ4G dd dZ5G d d! d!Z6d"d# Z7dS )%zw
Build linalg:
  python setup.py build
Run tests if scipy is installed:
  python -c 'import scipy;scipy.linalg.test()'
    N)assert_equalassert_almost_equalassert_assert_array_almost_equalassert_allclose)raises)float32float64	complex64
complex128arangetriutrilzerostril_indicesonesmoddiagappendeyenonzero)randseed)_fblasget_blas_funcstoeplitzsolve)_cblasc                  C   s   t dtjdtjddtjdtjddf\} }}t| jd t|jd td 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longcomplexr	   )f1f2f3 r4   Z/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_blas.pytest_get_blas_funcs$   s2   
r6   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+   )r8   dotcdotu)r   r,   r
   r.   r	   )fghr4   r4   r5   test_get_blas_funcs_aliasK   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    rF      a)   	      cz)rE                  @rF   )rK   y            $@rM   )getattrr&   r   selfpr;   r4   r4   r5   	test_axpyX      zTestCBLAS1Simple.test_axpyN)__name__
__module____qualname__rT   r4   r4   r4   r5   r@   V       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   rA   rB   rP   fblasr   rQ   r4   r4   r5   rT   i   rU   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 )NrC   copy)rF      rH      rF   rN   )rF                 @y      @      @r[   rQ   r4   r4   r5   	test_copyw   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 )NrC   asumrF   rH      )scdz              @rd         @         rP   r\   r   rQ   r4   r4   r5   	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 )NrC   r8   rc   )r    rH   rE   rl   rQ   r4   r4   r5   test_dot      zTestFBLAS1Simple.test_dotc                 C   rn   )NrN   r:   rh   r    rF   rE   y      "       @rl   rQ   r4   r4   r5   test_complex_dotu   rq   z"TestFBLAS1Simple.test_complex_dotuc                 C   rn   )NrN   r9   rh   r    ri   rE   y      @      ,rl   rQ   r4   r4   r5   test_complex_dotc   rq   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 )NrC   r7   rc   2   )r+   r%   rf   rg   rh   )rP   r\   r   mathsqrtrQ   r4   r4   r5   	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 )NrC   scalr    rc   )   i
   rN   ri   rh   )ro   y             (y      (@      "@)cszdrF   )y              "@iy      "@      (r[   rQ   r4   r4   r5   	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 )NrC   swaprr   )rF   rK   rN   rt   )r   rF   y      @      r[   )rR   rS   r;   xyx1y1r4   r4   r5   	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 )NrC   iamax)r   r^   rF   rE   rN   )y      @      @r{   )rP   r\   r   rQ   r4   r4   r5   	test_amax   s   zTestFBLAS1Simple.test_amaxN)rV   rW   rX   rT   ra   rm   rp   rs   ru   ry   r   r   r   r4   r4   r4   r5   rZ   g   s    rZ   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 ],}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 )NrC   gemvrF   rd   rH   rN   ri   rj         H      B              @      H      5r[   rQ   r4   r4   r5   	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 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 qqd S )NrC   gerrE   r    rF   r^   r{   r_   rD   re      rM      rI   rL   rN   geru              ?ri   r`   r   )r   rO   ri   )r   gercr[   )rR   rS   r;   namer4   r4   r5   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 rqt|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 qt
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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 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 ))NrE   rH   r(   r*   rG   r         !@   FendpointrL   Dr^   rC   Hz>+=syr      ?rtolTlowerr    )incxoffxnr   r^   r^   sr;   r!   rJ   overwrite_a       @rI   rF   r   r   r   r   rN   r+   her)r,   r   r   newaxislinspaceviewconjc_r   ravelziprP   r\   r   Tr   assert_raises	Exception)rR   r   resxresx_reverser   r%   reszresz_reverserehzrehz_reversewrS   r   r;   rJ   br4   r4   r5   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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! q^d S )'NrE   rH   r(   r*   rL   rG   r   r   r   Fr   rC   r   r   syr2r   r   rF   r   Tr   r    r|   r   r   incyoffyr   r   r   r   r   r   r   r   r;   r!   r   r   rI   r   r   r   r   r   )r,   r   r   r   r   r   rP   r\   r   r   r   r   r   r   )rR   r   r   resxyresxy_reverseqrS   r   r;   rJ   r   r4   r4   r5   	test_syr2n  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 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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 qd S )%NrE   rL   r(   r*   r   r   rG   r^   rN   r   r   her2r   r   rF   r   Tr   r   r   r   r   r+   r!   r   r   rI   r   r   rH   r   r   r   r   r    r   )r,   r   r   r   r   r   r   r   r   r   rP   r\   r   r   r   r   r   )rR   r   r   r   r   uvrS   r   r;   rJ   r   r4   r4   r5   	test_her2  s\   4
&*
  *zTestFBLAS2Simple.test_her2c                 C   sT  t d ttD ]\}}d}d}d}d}ttt|d t|| d tt|d t|| d }||}t|| d |f|d}|d |dd df< |d |ddd	f< |d
 |dddf< |d |dd df< t||}	t||}
|d|d}}td|d\}||||||||	|
|d	}||	|	 ||
  }t
|| qd S )N  rK   rH   rE   r    r*   )r   r   )r   rE   r{   )r   r    r   )rE   r   rF   r^   r   )gbmv)	mr   kuklalpharJ   r   r   beta)r   	enumerateDTYPESr   r   r   r   astyper   r8   r   )rR   indr"   r   r   r   r   AAbr   r   r   r   funcr   y2r4   r4   r5   	test_gbmv  s2   
zTestFBLAS2Simple.test_gbmvc              	   C   sv  t d ttD ]\}}d}d}t||f|d}t|d |f|d}t||t|t|f< td|d D ]}t|| }||t|| t||f< ||d| |d f< q5||}|dk rc||j n||	 j }t
||dd d f< t||}	t||}
|d|d}}|dkrtd	|d\}ntd
|d\}|||||	|
|d}|||	 ||
  }t|| qd S )Nr   r{   r    r*   rE   rG         ?rF   )hbmv)sbmv)kr   rJ   r   r   r   )r   r   r   r   r   r   ranger   r   r   r   r   r8   r   )rR   r   r"   r   r   r   r   ind2tempr   r   r   r   r   r   r   r4   r4   r5   test_sbmv_hbmv  s0   
 zTestFBLAS2Simple.test_sbmv_hbmvc                 C   s  t d ttt D ]\}}d}t|||}|dkr%|t||d 7 }||}|dk r3||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   rF   rE   r   r^   r    r   )hpmvr*   )spmv)r   r   apr   r   r   )
r   r   r   r   r   r   r   r   r   r   rG   )r   r   r   COMPLEX_DTYPESr   r   r   r   r   r   r   r   r8   r   r   )rR   r   r"   r   r   r+   rApr   r   xlongylongr   r   r   r   r   r4   r4   r5   test_spmv_hpmv  s8   
 
:zTestFBLAS2Simple.test_spmv_hpmvc                 C   s  t d ttt D ]\}}d}t|||}|dkr%|t||d 7 }||}|dk r3||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   | }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   rF   rE   r   r^   g      @)hprr*   )spr)r   r   r   r   rF   rF   )r   r   r   r   r   r   r   r   r   r   r   r8   r   r   )rR   r   r"   r   r   r+   r   r   r   r   r   r   r   y1fr4   r4   r5   test_spr_hpr'  s.   
 0*zTestFBLAS2Simple.test_spr_hprc                 C   sl  t d ttD ]\}}d}t|||}|dkr#|t||d 7 }||}|dk r1||j n|| j }t|\}}|||f }t||}t||}	|d}
|dkrbt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   rF   rE   r   r    )hpr2r*   )spr2)r   r   r   r   r   r   )rE   rF   r^   )rE   r    r    )r   r   rE   )r   r   r   r   r   r   r   r   r   r8   r   r   )rR   r   r"   r   r   r+   r   r   r   r   r   r   r   r   r   r   r4   r4   r5   test_spr2_hpr2B  s0   
 . 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< q%|dkrZ|t|  dt|d | ||d  d  | 7  < t|d |f|d}t|d D ]}	t	||	d||	 d |	d f< qjt
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   r|   rF   r*   rE   r   r    r   )tbmvr   rJ   r   r   rJ   r   r   r   rJ   r   r   trans)r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   rR   r   r"   r   r   r   r   supr   rowr   r   r   r4   r4   r5   	test_tbmv^  8   $: 




zTestFBLAS2Simple.test_tbmvc              
   C   s  t d ttD ]\}}d}d}t||}t||f|d}t|d D ]}t|| |t|| t||f< q%|dkrZ|t|  dt|d | ||d  d  | 7  < t|d |f|d}t|d D ]}	t	||	d||	 d |	d f< qjt
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   r{   rF   r*   rE   r   r    r   )tbsvr  r  r  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r4   r4   r5   	test_tbsv  r
  zTestFBLAS2Simple.test_tbsvc                 C   s:  t d ttD ]\}}d}t||}|dk r t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   r|   r    r   )tpmvr*   r   r   r   rE   r   r   r   r   r   r   r   r   r  )r   r   r   r   r   r   r   r   r8   r   r   r   r   rR   r   r"   r   r   r   r+   r   r   r   r   r   r4   r4   r5   	test_tpmv  s,   2




zTestFBLAS2Simple.test_tpmvc                 C   sF  t d ttD ]\}}d}t||}|dk r t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   r|   r    r   )tpsvr*   r  rE   r  r  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r4   r4   r5   	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   rF   )trmvr*   rJ   r   rE   rJ   r   r   rJ   r   r   r  r    )r   r   r   r   r   r   r   r   r8   r   r   r   r   	rR   r   r"   r   r   r   r   r   r   r4   r4   r5   	test_trmv  s(   


zTestFBLAS2Simple.test_trmvc           	      C   s6  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      )trsvr*   r  rE   )rJ   r   r   r  r  r    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r4   r4   r5   	test_trsv  s.   



zTestFBLAS2Simple.test_trsvN)rV   rW   rX   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r  r4   r4   r4   r5   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 )NrC   r)   rF   rd   r   rH   r   rN   ri   rj   r   r   r   r[   rQ   r4   r4   r5   	test_gemm  s     zTestFBLAS3Simple.test_gemmN)rV   rW   rX   r  r4   r4   r4   r5   r    rY   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)rP   r\   )r   psrS   r;   r4   r4   r5   	_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    rF   )r   r&  g       @)r%  r$  g      "@)r,   arrayrJ   r   r   r+   trR   r4   r4   r5   setup_method8  s   


zTestBLAS3Symm.setup_methodc              	   C   s   t dD ]>}|| j| j| jddd}t|| j || jj| jd| jddd}t|| j || j| jjd| jjddd}t|| jj qd S )Nsymmr   rJ   r   r+   r   r   rE   rJ   r   r   r+   r   r   )rJ   r   sider+   r   r   )r"  rJ   r   r+   r   r(  r   rR   r;   resr4   r4   r5   	test_symmA  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dsymmrE   )rJ   r   r   r.  )rP   r\   r   r   rJ   r   rR   r;   r4   r4   r5   test_summ_wrong_sideM  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 )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.
        r2  Nr   r,  rE   r-  )rP   r\   rJ   r   r+   r,   allcloser(  r/  r4   r4   r5   test_symm_wrong_uploU  s   z"TestBLAS3Symm.test_symm_wrong_uploN)rV   rW   rX   r*  r1  r4  r6  r4   r4   r4   r5   r#  6  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'  rJ   r(  ttr)  r4   r4   r5   r*  d  s   


zTestBLAS3Syrk.setup_methodc                 C   s   t dD ][}|| jdd}tt|t| j || jddd}tt|t| j t| jj}|| jdd|d}tt|t| j|  || jddd}tt|t| j	 qd S )Nsyrkr   rJ   r   rE   )rJ   r   r   )rJ   r   r   r+   )rJ   r   r  )
r"  rJ   r   r,   r   r(  r   r   shaper?  rR   r;   r+   c0r4   r4   r5   	test_syrkn  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   )rH   r_   )rJ   r   r+   )rP   r\   r   r   rJ   r,   r   r3  r4   r4   r5   test_syrk_wrong_c  s   zTestBLAS3Syrk.test_syrk_wrong_cN)rV   rW   rX   r*  rE  rG  r4   r4   r4   r5   r8  c  s    
r8  c                   @   r7  )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$  r9  r   r%  r   )r$  r&  r%  )r&  r$  r$  )r%  r$  r>  r{   )r,   r'  rJ   r   r(  r?  r)  r4   r4   r5   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   rJ   r   r   rE   )rJ   r   r   r   )rJ   r   r   r   r+   )rJ   r   r   r  )r"  rJ   r   r   r,   r   r(  r   r   rB  r?  rC  r4   r4   r5   
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_   )rJ   r   r   r+   )rP   r\   r   r   rJ   r   r,   r   r3  r4   r4   r5   test_syr2k_wrong_c  s   z!TestBLAS3Syr2k.test_syr2k_wrong_cN)rV   rW   rX   r*  rK  rM  r4   r4   r4   r5   rH    s    rH  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)  r4   r4   r5   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   rJ  rE   rG   r"  rO  r   r,   r   r   r/  r4   r4   r5   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hemmrP  r   rJ  rE   rQ  r/  r4   r4   r5   test_hemm_zc  rS  zTestSyHe.test_hemm_zcc                 C   <   t ddD ]}|| jdd}tt|tddg qd S )Nr@  rP  r   rA  rG   rQ  r/  r4   r4   r5   test_syrk_zr     zTestSyHe.test_syrk_zrc                 C   rV  )NherkrP  r   rA  rE   rQ  r/  r4   r4   r5   test_herk_zr  rX  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 )NrI  rP  r   rJ  r   rG   rQ  r/  r4   r4   r5   test_syr2k_zr      zTestSyHe.test_syr2k_zrc                 C   r[  )Nher2krP  r   rJ  r   rE   rQ  r/  r4   r4   r5   test_her2k_zr  r]  zTestSyHe.test_her2k_zrN)rV   rW   rX   __doc__r*  rR  rU  rW  rZ  r\  r_  r4   r4   r4   r5   rN    s    rN  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   r9  r%  r:  r&  r=  r>  r9  )rE   rE   r    rF   )r   rE   r^   rH   )r   r   rE   r{   )r   r   r   rE   r;   )r#   rE   r^   r    rH   rF   r{   rK   r_   rL   r|   )r,   r'  rJ   r   a2b2r)  r4   r4   r5   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   rE   )r.  r$  d   )r   atol)r   r   r   rd  re  r   rB  r   r,   finfoeps)rR   rf  rg  r0  r   r4   r4   r5   	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      rc  rP   r\   rJ   r   r,   r'  r   rR   r;   resultexpectedr4   r4   r5   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 )Nrm  r   Tr   rb  )r&  r9  r$  rn  ro  r4   r4   r5   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 )Nrm  )TFr   )overwrite_bFT)rP   r\   r   r]   rJ   r   flagsf_contiguousr,   may_share_memoryr   asfortranarrayr   )rR   r;   overwrbcopyrp  r4   r4   r5   test_b_overwrites  s    
zTestTRMM.test_b_overwritesN)rV   rW   rX   r`  r*  pytestmarkparametrizer   rl  rr  rs  r{  r4   r4   r4   r5   ra    s    

	ra  c               	   C   sz  t d ttD ]1\} }t|jd }td|d\}tdd|}tdd|}|d}t	t
|||| t	t
|||j| d}d	}|d
}| dk rRt||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  )trsmr*   r^   rH   rE   r_   rK   g      r    r   )r   rJ   r   )ri  )r   rJ   r   trans_a)r   rJ   r   r   )r   rJ   r   r   r.  )r   rJ   r   r   r.  r   )r   r   r   r,   rj  rk  r   r   r   r   r   r   r   r   r   r   rB  r   r   r   r   )r   r"   tolr   r   Br   r   r   AuAlB1B2r   x2r4   r4   r5   	test_trsm  sP   2
r  )r   )8	__usage__rw   r|  numpyr,   numpy.testingr   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   numpy.randomr   r   scipy.linalgr   r\   r   r   r   r   r&   ImportErrorREAL_DTYPESr   r   r6   r>   r@   rZ   r   r  r"  r#  r8  rH  rN  ra  r  r4   r4   r4   r5   <module>   sD   D'v    C
	-%((@