o
    i                     @   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cblasZrotgdgemmr    cr   )r   npemptyr
   r   r   typecoder$   module_nameZclongdoubler	   )f1f2Zf3 r/   V/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/linalg/tests/test_blas.pytest_get_blas_funcs   s2   
r1   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(   )r3   dotcdotu)r   r)   r
   r+   r	   )fghr/   r/   r0   test_get_blas_funcs_aliasE   s   r9   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   rA      a)   	      cz)r@                  @rA   )rF   y            $@rH   )getattrr$   r   selfpr6   r/   r/   r0   	test_axpyR      zTestCBLAS1Simple.test_axpyN)__name__
__module____qualname__rO   r/   r/   r/   r0   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=   rK   fblasr   rL   r/   r/   r0   rO   c   rP   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 )Nr>   copy)rA      rC      rA   rI   )rA                 @y      @      @rV   rL   r/   r/   r0   	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 )Nr>   ZasumrA   rC      )scdz              @r^         @         rK   rW   r   rL   r/   r/   r0   	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 )Nr>   r3   r]   )r   rC   r@   rf   rL   r/   r/   r0   test_dot      zTestFBLAS1Simple.test_dotc                 C   rh   )NrI   r5   rb   r   rA   r@   y      "       @rf   rL   r/   r/   r0   test_complex_dotu   rk   z"TestFBLAS1Simple.test_complex_dotuc                 C   rh   )NrI   r4   rb   r   rc   r@   y      @      ,rf   rL   r/   r/   r0   test_complex_dotc   rk   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 )Nr>   r2   r]   2   )r(   r#   r`   ra   rb   )rK   rW   r   mathsqrtrL   r/   r/   r0   	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 )Nr>   Zscalr   r]   )   i
   rI   rc   rb   )ri   y             (y      (@      "@)csZzdrA   )y              "@iy      "@      (rV   rL   r/   r/   r0   	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 )Nr>   Zswaprl   )rA   rF   rI   rn   )rx   rA   y      @      rV   )rM   rN   r6   xyx1y1r/   r/   r0   	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 )Nr>   iZamax)rx   rY   rA   r@   rI   )y      @      @rt   )rK   rW   r   rL   r/   r/   r0   	test_amax   s   zTestFBLAS1Simple.test_amaxN)rQ   rR   rS   rO   r\   rg   rj   rm   ro   rs   rw   r}   r   r/   r/   r/   r0   rU   a   s    rU   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 )Nr>   ZgemvrA   r^   rC   rI   rc   rd         H      B              @      H      5rV   rL   r/   r/   r0   	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 )Nr>   gerr@   r   rA   rY   rt   rZ   r?   r_      rH      rD   rG   rI   Zgeru              ?rc   r[   rx   )r   rJ   rc   )r   ZgercrV   )rM   rN   r6   namer/   r/   r0   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 ))Nr@   rC   r%   r'   rB   r         !@   FZendpointrG   DrY   r>   Hz>+=Zsyr      ?rtolTlowerr   )incxoffxnrx   rY   rY   sr6   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   rW   r   Tr   assert_raises	Exception)rM   ry   ZresxZresx_reverserz   r#   ZreszZresz_reverseZrehzZrehz_reversewrN   r   r6   rE   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}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 )'Nr@   rC   r%   r'   rG   rB   r   r   r   Fr   r>   r   r   Zsyr2r   r   rA   r   Tr   r   ru   r   r   incyoffyr   r   r   r   r   rx   r   r   r6   r   r   r   rD   r   r   r   r   r   )r)   r   r   r   r   r   rK   rW   r   r   r   r   r   r   )rM   ry   rz   resxyresxy_reverseqrN   r   r6   rE   r   r/   r/   r0   	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 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 )%Nr@   rG   r%   r'   r   r   rB   rY   rI   r   r   Zher2r   r   rA   r   Tr   r   r   r   r   r(   r   r   r   rD   r   r   rC   r   rx   r   r   r   r   )r)   r   r   r   r   r   r   r   r   r   rK   rW   r   r   r   r   r   )rM   ry   rz   r   r   uvrN   r   r6   rE   r   r/   r/   r0   	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  rF   rC   r@   r   r'   )r   r   )r   r@   rt   )r   r   r   )r@   r   rA   rY   r   )Zgbmv)	mr   kuklalpharE   ry   rz   beta)
r   r   r   r   r   rE   ry   rz   r   trans)r)   randomdefault_rng	enumerateDTYPESr   r   r   astyper   r3   r   r   )rM   rngindr    r   r   r   r   AAbry   rz   r   r   funcr|   y2r/   r/   r0   	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rtd	|d\}ntd
|d\}|||||
||d}|||
 ||  }t|| q
d S )Nr   rt   r   r'   r@   rB         ?rA   )Zhbmv)Zsbmv)kr   rE   ry   rz   r   )r)   r   r   r   r   r   r   ranger   r   r   r   r   r3   r   )rM   r   r   r    r   r   r   r   Zind2tempry   rz   r   r   r   r|   r   r/   r/   r0   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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 )Niba rA   r@   r   rY   r   r   )Zhpmvr'   )Zspmv)r   r   apry   rz   r   )
r   r   r   ry   rz   r   r   r   r   r   rB   )r)   r   r   r   r   COMPLEX_DTYPESr   r   r   r   r   r   r   r3   r   r   )rM   r   r   r    r   r   r(   rApry   rz   ZxlongZylongr   r   r   r|   r   r/   r/   r0   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rt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   rA   r@   r   rY   g      @)Zhprr'   )Zspr)r   r   r   ry   rA   rA   )r)   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   )rM   r   r   r    r   r   r(   r   r   ry   r   r   r   r|   y1fr/   r/   r0   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   rA   r@   r   r   )Zhpr2r'   )Zspr2)r   r   ry   rz   r   r   )r@   rA   rY   )r@   r   r   )r   r   r@   )r)   r   r   r   r   r   r   r   r   r   r3   r   r   )rM   r   r   r    r   r   r(   r   r   ry   rz   r   r   r   r   r|   r   r/   r/   r0   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   ru   rA   r'   r@   r   r   r   )Ztbmvr   rE   ry   r   rE   ry   r   r   rE   ry   r   r   )r)   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   rM   r   r   r    r   r   ry   r   supr   rowr   r|   r   r/   r/   r0   	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   rt   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   r   r/   r/   r0   	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   ru   r   r   )Ztpmvr'   r   r   ry   r@   r   r   ry   r   r   r   ry   r   r   )r)   r   r   r   r   r   r   r   r   r3   r   r   r   r   rM   r   r   r    r   ry   r   r(   r   r   r   r|   r   r/   r/   r0   	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   ru   r   r   )Ztpsvr'   r   r@   r   r   )r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r0   	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   rA   )Ztrmvr'   rE   ry   r@   rE   ry   r   rE   ry   r   r   r   )r)   r   r   r   r   r   r   r   r   r3   r   r   r   r   
rM   r   r   r    r   r   ry   r   r|   r   r/   r/   r0   	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      )Ztrsvr'   r   r@   )rE   ry   r   r   r   r   )r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r0   	test_trsv  s.   



zTestFBLAS2Simple.test_trsvN)rQ   rR   rS   r   pytestmarkZthread_unsafer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   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 )Nr>   r&   rA   r^   r   rC   r   rI   rc   rd   r   r   r   rV   rL   r/   r/   r0   	test_gemm'  s     zTestFBLAS3Simple.test_gemmN)rQ   rR   rS   r   r/   r/   r/   r0   r   %  rT   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)rK   rW   )r   ZpsrN   r6   r/   r/   r0   	_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   rA   )r   r   g       @)r   r   g      "@)r)   arrayrE   r   r   r(   trM   r/   r/   r0   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   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   r6   resr/   r/   r0   	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dsymmr@   )rE   r   r   r  )rK   rW   r   r   rE   r   rM   r6   r/   r/   r0   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 )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   rW   rE   r   r(   r)   Zallcloser  r  r/   r/   r0   test_symm_wrong_uplo^  s   z"TestBLAS3Symm.test_symm_wrong_uploN)rQ   rR   rS   r  r
  r  r  r/   r/   r/   r0   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   rE   r  ttr  r/   r/   r0   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   rE   r   r@   )rE   r   r   )rE   r   r   r(   )rE   r   r   )
r   rE   r   r)   r   r  r   r   shaper  rM   r6   r(   Zc0r/   r/   r0   	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 )NZdsyrkr   )rC   rZ   )rE   r   r(   )rK   rW   r   r   rE   r)   r   r  r/   r/   r0   test_syrk_wrong_c  s   zTestBLAS3Syrk.test_syrk_wrong_cN)rQ   rR   rS   r  r  r  r/   r/   r/   r0   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   r  rt   )r)   r   rE   r   r  r  r  r/   r/   r0   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   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  r/   r/   r0   
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 )NZdsyr2kr   )r   rZ   )rE   r   r   r(   )rK   rW   r   r   rE   r   r)   r   r  r/   r/   r0   test_syr2k_wrong_c  s   z!TestBLAS3Syr2k.test_syr2k_wrong_cN)rQ   rR   rS   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 )Nr   y             r   )r)   r   sigma_yr  r/   r/   r0   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   r   r@   rB   r   r$  r   r)   r   r   r  r/   r/   r0   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 )NZhemmr%  r   r   r@   r&  r  r/   r/   r0   test_hemm_zc  r(  zTestSyHe.test_hemm_zcc                 C   <   t ddD ]}|| jdd}tt|tddg qd S )Nr  r%  r   r  rB   r&  r  r/   r/   r0   test_syrk_zr     zTestSyHe.test_syrk_zrc                 C   r*  )NZherkr%  r   r  r@   r&  r  r/   r/   r0   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 )Nr  r%  r   r   r   rB   r&  r  r/   r/   r0   test_syr2k_zr      zTestSyHe.test_syr2k_zrc                 C   r.  )NZher2kr%  r   r   r   r@   r&  r  r/   r/   r0   test_her2k_zr  r0  zTestSyHe.test_her2k_zrN)rQ   rR   rS   __doc__r  r'  r)  r+  r-  r/  r1  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 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@   rY   rC   )r   r   r@   rt   )r   r   r   r@   r6   )r!   r@   rY   r   rC   rA   rt   rF   rZ   rG   ru   )r)   r   rE   r   a2b2r  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trmmr'   r   r@   )r  r   d   )r   atol)r   r   r   r6  r7  r   r  r   r)   finfoeps)rM   r8  r9  r	  r   r/   r/   r0   	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      r5  rK   rW   rE   r   r)   r   r   rM   r6   resultexpectedr/   r/   r0   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 )Nr?  r   Tr   r4  )r   r  r   r@  rA  r/   r/   r0   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 )Nr?  )TFr   )Zoverwrite_bFT)rK   rW   r   rX   rE   r   flagsf_contiguousr)   Zmay_share_memoryr   Zasfortranarrayr   )rM   r6   ZoverwrZbcopyrB  r/   r/   r0   test_b_overwrites  s    
zTestTRMM.test_b_overwritesN)rQ   rR   rS   r2  r  r   r   Zparametrizer   r>  rD  rE  rH  r/   r/   r/   r0   r3    s    

	r3  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  )Ztrsmr'   )rY   rC   r   r@   rZ   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   r    Ztolr   r   Br   r   r   ZAuZAlZB1ZB2r{   Zx2r/   r/   r0   	test_trsm!  sT   (
rJ  Fzgh-16930)runreasonc                  C   s8   t dd} tjj| ddd}td}t|| d S )Nru   rG   rC   rA   rB   i  )	r)   repeatscipylinalgblasdnrm2rq   rr   r   )ry   actualrC  r/   r/   r0   test_gh_169309W  s   
rS  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 )Nru   rG   rB   rC   rA   )	r)   rM  r   rW   Z__fblas_errorrN  rO  rP  rQ  )ry   r   r/   r/   r0   test_dnrm2_neg_incx`  s
   "rT  )r   ):rq   r   numpyr)   Znumpy.randomZnumpy.testingr   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   rN  Zscipy.linalgr   rW   r   r   r   r   r$   ImportErrorZREAL_DTYPESr   r   r1   r9   r;   rU   r   r   r   r   r  r  r#  r3  rJ  r   ZxfailrS  rT  r/   r/   r/   r0   <module>   sN   D'v    R
	-%((@6
