o
    ?Hh                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZm Z m!Z!m"Z" zd dlm#Z$ W n e%yi   dZ$Y nw eegZ&eegZ'e&e' Z(dd Z)d	d
 Z*G dd dZ+G dd dZ,G dd dZ-G dd dZ.d)ddZ/G dd dZ0G dd dZ1G dd dZ2G dd dZ3G dd dZ4d d! Z5ej6j7d"d#d$d%d& Z8d'd( Z9dS )*    N)assert_equalassert_almost_equalassert_assert_array_almost_equalassert_allclose)raises)float32float64	complex64
complex128arangetriutrilzerostril_indicesonesmoddiagappendeyenonzero)_fblasget_blas_funcstoeplitzsolve)_cblasc                  C   s   t dtjdtjddtjdtjddf\} }}t| jd t|jd td ur4t| jd t|jd t d} t| jd	 t d
tjd} t| jd t d
dd} t| jd t d
tj	d} t| jd t dtjdtj
dtjdtjdf} t| jd d S )N)axpyr   r      r   F)dtypeorderCzcblasrotgdgemmr    cr   )r   npemptyr
   r   r   typecoder$   module_nameclongdoubler	   )f1f2f3 r2   \/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_blas.pytest_get_blas_funcs   s2   
r4   c                  C   s^   t dtjd\} }| jdksJ |jdksJ t dtjd\} }}| |u s'J | |u s-J d S )N)nrm2dotr(   r)   )r6   dotcdotu)r   r*   r
   r,   r	   )fghr2   r2   r3   test_get_blas_funcs_aliasE   s   r<   c                   @      e Zd Zdd ZdS )TestCBLAS1Simplec                 C      dD ]}t t|d d }|d u rqt|g dg dddg d qdD ]}t t|d d }|d u r3q$t|g d	g dddg d
 q$d S Nsdr      r      )r   rD      a)   	      cz)rC                  @rD   )rI   y            $@rK   )getattrr$   r   selfpr9   r2   r2   r3   	test_axpyR      zTestCBLAS1Simple.test_axpyN)__name__
__module____qualname__rR   r2   r2   r2   r3   r>   P       r>   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestFBLAS1Simplec                 C   r?   r@   rN   fblasr   rO   r2   r2   r3   rR   c   rS   zTestFBLAS1Simple.test_axpyc                 C   s   dD ]}t t|d d }|d u rqt|g ddgd g d qdD ]}t t|d d }|d u r2q#t|g ddgd g d q#d S )NrA   copy)rD      rF      rD   rL   )rD                 @y      @      @rY   rO   r2   r2   r3   	test_copyq   s     zTestFBLAS1Simple.test_copyc                 C   sp   dD ]}t t|d d }|d u rqt|g dd qdD ]}t t|d d }|d u r,qt|g dd qd S )NrA   asumrD   rF      )scdz              @rb         @         rN   rZ   r   rO   r2   r2   r3   	test_asum}   s   zTestFBLAS1Simple.test_asumc                 C   @   dD ]}t t|d d }|d u rqt|g dg dd qd S )NrA   r6   ra   )r   rF   rC   rj   rO   r2   r2   r3   test_dot      zTestFBLAS1Simple.test_dotc                 C   rl   )NrL   r8   rf   r   rD   rC   y      "       @rj   rO   r2   r2   r3   test_complex_dotu   ro   z"TestFBLAS1Simple.test_complex_dotuc                 C   rl   )NrL   r7   rf   r   rg   rC   y      @      ,rj   rO   r2   r2   r3   test_complex_dotc   ro   z"TestFBLAS1Simple.test_complex_dotcc                 C   s|   dD ]}t t|d d }|d u rqt|g dtd qdD ]}t t|d d }|d u r/q t|g dtd q d S )NrA   r5   ra   2   )r)   r#   rd   re   rf   )rN   rZ   r   mathsqrtrO   r2   r2   r3   	test_nrm2   s   zTestFBLAS1Simple.test_nrm2c                 C   s   dD ]}t t|d d }|d u rqt|dg dg d qdD ]}t t|d d }|d u r/q t|dg dg d	 q d
D ]}t t|d d }|d u rMq>t|dg dg d q>d S )NrA   scalr   ra   )   i
   rL   rg   rf   )rm   y             (y      (@      "@)cszdrD   )y              "@iy      "@      (rY   rO   r2   r2   r3   	test_scal   s    zTestFBLAS1Simple.test_scalc                 C   s   dD ])}t t|d d }|d u rqg dg d}}|||\}}t|| t|| qdD ])}t t|d d }|d u r=q.g dg d}}|||\}}t|| t|| q.d S )NrA   swaprp   )rD   rI   rL   rr   )r   rD   y      @      rY   )rP   rQ   r9   xyx1y1r2   r2   r3   	test_swap   s"   

zTestFBLAS1Simple.test_swapc                 C   s`   dD ]}t td| d }t|g dd qdD ]}t td| d }t|g dd qd S )NrA   iamax)r   r\   rD   rC   rL   )y      @      @ry   )rN   rZ   r   rO   r2   r2   r3   	test_amax   s   zTestFBLAS1Simple.test_amaxN)rT   rU   rV   rR   r_   rk   rn   rq   rs   rw   r}   r   r   r2   r2   r2   r3   rX   a   s    rX   c                   @   s   e Zd Zdd Zejjdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestFBLAS2Simplec                 C   s   dD ],}t t|d d }|d u rqt|ddggdgdg t|ddggdgddgdg qdD ],}t t|d d }|d u r@q1t|d	d
ggdgdg t|d	d
ggdgddgdg q1d S )NrA   gemvrD   rb   rF   rL   rg   rh         H      B              @      H      5rY   rO   r2   r2   r3   	test_gemv   s   "zTestFBLAS2Simple.test_gemvc              	   C   s  dD ]S}t t|d d }|d u rqt|dddgddgddgddgg t|dg d	ddgddgd
dgddgg t|dddgddgddgddggdddgdd
gg qdD ]8}t t|d d }|d u rgqXt|dddgddgddgddgg t|dg dddgddgd
dgddgg qXdD ]=}dD ]8}t t|| d }|d u 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 )NrA   gerrC   r   rD   r\   ry   r]   rB   rc      rK      rG   rJ   rL   geru              ?rg   r^   r   )r   rM   rg   )r   gercrY   )rP   rQ   r9   namer2   r2   r3   test_ger   sH   &zTestFBLAS2Simple.test_gerc                 C   s  t jdddd}t |d d t jf | }t |d d dt jf |d d d  }t jdddd	d
}t jddddd}t |d d t jf | }t |d d dt jf |d d d  }t |d d t jf |  }t |d d dt jf |d d d   }	t jt d|t df 	 }
t
dddgD ]\}}tt|d d }|d u 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 ))NrC   rF   r&   r(   rE   r         !@   FendpointrJ   Dr\   rA   Hz>+=syr      ?rtolTlowerr   )incxoffxnr   r\   r\   sr9   r   rH   overwrite_a       @rG   rD   r   r   r   r   rL   r)   her)r*   r   r   newaxislinspaceviewconjc_r   ravelziprN   rZ   r   Tr   assert_raises	Exception)rP   r   resxresx_reverser   r#   reszresz_reverserehzrehz_reversewrQ   r   r9   rH   br2   r2   r3   test_syr_her  s   (( , 
 
 zTestFBLAS2Simple.test_syr_herc                 C   s  t jdddd}t jdddd}t |d d t jf | |d d t jf |  }t |d d dt jf |d d d  |d d dt jf |d d d   }t jddd	d
d}tdddgD ]\}}tt|d d }|d u rpq^t|d||||d t|d||dd|d dd df |d t|d||dd|j	|d t|d||ddddd||d t|d||dddddd|d dd df |d t|d||ddddd||d t 
d|dk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 )'NrC   rF   r&   r(   rJ   rE   r   r   r   Fr   rA   r   r   syr2r   r   rD   r   Tr   r   rz   r   r   incyoffyr   r   r   r   r   r   r   r   r9   r   r   r   rG   r   r   r   r   r   )r*   r   r   r   r   r   rN   rZ   r   r   r   r   r   r   )rP   r   r   resxyresxy_reverseqrQ   r   r9   rH   r   r2   r2   r3   	test_syr2k  sT   2$ *zTestFBLAS2Simple.test_syr2c                 C   sJ  t jddddd}t jddddd}|d d t jf |  |d d t jf |   }t |}|d d dt jf |d d d   }||d d dt jf |d d d   7 }t |}t jt d|t df  }t jt d|t df  }t	d	d
dgD ]\}}t
t|d d }	|	d u 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 )%NrC   rJ   r&   r(   r   r   rE   r\   rL   r   r   her2r   r   rD   r   Tr   r   r   r   r   r)   r   r   r   rG   r   r   rF   r   r   r   r   r   r   )r*   r   r   r   r   r   r   r   r   r   rN   rZ   r   r   r   r   r   )rP   r   r   r   r   uvrQ   r   r9   rH   r   r2   r2   r3   	test_her2  s\   4
&*
  *zTestFBLAS2Simple.test_her2c                 C   s  t jd}ttD ]\}}d}d}d}d}tt||d t|| d t||d t|| d }||}t|| d |f|d}	|d |	dd df< |d |	ddd	f< |d
 |	dddf< |d |	dd df< |||}
|||}|d|d}}t	d|d\}|||||||	|
||d	}||
|
 ||  }t|| |||||||	||
|dd
}||j
| ||
  }t|| q
d S )N  rI   rF   rC   r   r(   )r   r   )r   rC   ry   )r   r   r   )rC   r   rD   r\   r   )gbmv)	mr   kuklalpharH   r   r   beta)
r   r   r   r   r   rH   r   r   r   trans)r*   randomdefault_rng	enumerateDTYPESr   r   r   astyper   r6   r   r   )rP   rngindr    r   r   r   r   AAbr   r   r   r   funcr   y2r2   r2   r3   	test_gbmv  s<    

zTestFBLAS2Simple.test_gbmvc              	   C   s  t jd}ttD ]\}}d}d}t||f|d}t|d |f|d}|||t|t|f< td|d D ] }||| }	|	|t|| t||f< |	|d| |d f< q8||}|dk rg||j	 n||
 j	 }t||dd d f< |||}
|||}|d|d}}|dkrtd	|d\}ntd
|d\}|||||
||d}|||
 ||  }t|| q
d S )Nr   ry   r   r(   rC   rE         ?rD   )hbmv)sbmv)kr   rH   r   r   r   )r*   r   r   r   r   r   r   ranger   r   r   r   r   r6   r   )rP   r   r   r    r   r   r   r   ind2tempr   r   r   r   r   r   r   r2   r2   r3   test_sbmv_hbmv  s0   
 zTestFBLAS2Simple.test_sbmv_hbmvc                 C   s  t jd}ttt D ]\}}d}|||f|}|dkr+||||fd 7 }||}|dk r9||j n|| j }t	|\}}|||f }|||}	|||}
t
d| |}td| |}|d|d}}|dk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 rD   rC   r   r\   r   r   )hpmvr(   )spmv)r   r   apr   r   r   )
r   r   r   r   r   r   r   r   r   r   rE   )r*   r   r   r   r   COMPLEX_DTYPESr   r   r   r   r   r   r   r6   r   r   )rP   r   r   r    r   r   r)   rApr   r   xlongylongr   r   r   r   r   r2   r2   r3   test_spmv_hpmv	  s8   
 
:zTestFBLAS2Simple.test_spmv_hpmvc                 C   s  t jd}ttt D ]\}}d}|||f|}|dkr+||||fd 7 }||}|dk r9||j n|| j }t	|\}}|||f }|||}	tt t
|d d}
|dk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   rD   rC   r   r\   g      @)hprr(   )spr)r   r   r   r   rD   rD   )r*   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   )rP   r   r   r    r   r   r)   r   r   r   r   r   r   r   y1fr2   r2   r3   test_spr_hpr)  s.   
 0*zTestFBLAS2Simple.test_spr_hprc                 C   s|  t jd}ttD ]\}}d}|||f|}|dkr)||||fd 7 }||}|dk r7||j n|| j }t|\}}|||f }|||}	|||}
|d}|dkrjt	d|d\}nt	d|d\}| |	d d d f 
|
d d d f   }|| | j }||||	|
|d	}td
|d}||||f< |g d  |g dg df< t|| q
d S )Nr   rD   rC   r   r   )hpr2r(   )spr2)r   r   r   r   r   r   )rC   rD   r\   )rC   r   r   )r   r   rC   )r*   r   r   r   r   r   r   r   r   r   r6   r   r   )rP   r   r   r    r   r   r)   r   r   r   r   r   r   r   r   r   r   r2   r2   r3   test_spr2_hpr2D  s0   
 . zTestFBLAS2Simple.test_spr2_hpr2c                 C   s  t jd}ttD ]\}}d}d}|||}t||f|d}t|d D ]}||| |t|| t||f< q(|dkr_|t	|  d||d | ||d  d  | 7  < t|d |f|d}	t|d D ]}
t
||
d|	|
 d |
d f< qotd	|d\}|||	|d
}||}t|| |||	|dd}|d|t|t|f< ||}t|| |||	|ddd}|j|}t|| |||	|ddd}| j|}t|| q
d S )Nr   rz   rD   r(   rC   r   r   r   )tbmvr   rH   r   r   rH   r   r   r   rH   r   r   r   )r*   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   rP   r   r   r    r   r   r   r   supr   rowr   r   r   r2   r2   r3   	test_tbmv`  8   &< 




zTestFBLAS2Simple.test_tbmvc                 C   s  t jd}ttD ]\}}d}d}|||}t||f|d}t|d D ]}||| |t|| t||f< q(|dkr_|t	|  d||d | ||d  d  | 7  < t|d |f|d}	t|d D ]}
t
||
d|	|
 d |
d f< qotd	|d\}|||	|d
}t||}t|| |||	|dd}|d|t|t|f< t||}t|| |||	|ddd}t|j|}t|| |||	|ddd}t| j|}t|| q
d S )Nr   ry   rD   r(   rC   r   r   r  )tbsvr  r  r  )r*   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r2   r2   r3   	test_tbsv  r  zTestFBLAS2Simple.test_tbsvc                 C   sN  t jd}ttD ]\}}d}|||}|dk r&t|||f}nt|||f|||fd  }t|\}}|||f }	td|d\}
|
||	|d}|	|}t
|| |
||	|dd	}|d|t|t|f< |	|}t
|| |
||	|ddd
}|j	|}t
|| |
||	|ddd
}| j	|}t
|| q
d S )Nr   rz   r   r   )tpmvr(   r   r   r   rC   r   r   r   r   r   r   r   r   r   )r*   r   r   r   r   r   r   r   r   r6   r   r   r   r   rP   r   r   r    r   r   r   r)   r   r   r   r   r   r2   r2   r3   	test_tpmv  s0   $




zTestFBLAS2Simple.test_tpmvc                 C   sZ  t jd}ttD ]\}}d}|||}|dk r&t|||f}nt|||f|||fd  }|t|7 }t|\}}|||f }	t	d|d\}
|
||	|d}t
||}t|| |
||	|dd	}|d|t|t|f< t
||}t|| |
||	|ddd
}t
|j|}t|| |
||	|ddd
}t
| j|}t|| q
d S )Nr   rz   r   r   )tpsvr(   r  rC   r  r  )r*   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r2   r2   r3   	test_tpsv  s2   $




zTestFBLAS2Simple.test_tpsvc           
      C   s  t jd}ttD ]\}}d}|||ft| |}|d|}td|d\}|||d}t|	|}	t
||	 |||dd}|d|t|t|f< t|	|}	t
||	 |||ddd}t|j	|}	t
||	 |||dd	d}t| j	|}	t
||	 q
d S )
Nr   rD   )trmvr(   rH   r   rC   rH   r   r   rH   r   r   r   r   )r*   r   r   r   r   r   r   r   r   r6   r   r   r   r   
rP   r   r   r    r   r   r   r   r   r   r2   r2   r3   	test_trmv  s(   


zTestFBLAS2Simple.test_trmvc           
      C   s@  t jd}ttD ]\}}d}|||ft| |}|||}td|d\}|||d}tt	||}	t
||	 |||dd}tt||}	t
||	 |||dd}|d|t|t|f< tt	||}	t
||	 |||ddd	}tt	|j|}	t
||	 |||dd
d	}tt	| j|}	t
||	 q
d S )Nr      )trsvr(   r  rC   )rH   r   r   r  r  r   )r*   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r2   r2   r3   	test_trsv  s.   



zTestFBLAS2Simple.test_trsvN)rT   rU   rV   r   pytestmarkthread_unsafer   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r2   r2   r2   r3   r      s$    
 `-2" &&!!r   c                   @   r=   )TestFBLAS3Simplec                 C   s   dD ]+}t t|d d }|d u rqt|ddgdgdgg t|ddgdgddgdg qdD ]+}t t|d d }|d u r?q0t|d	d
gdgdgg t|d	d
gdgddgdg q0d S )NrA   r'   rD   rb   r   rF   r   rL   rg   rh   r   r   r   rY   rO   r2   r2   r3   	test_gemm'  s     zTestFBLAS3Simple.test_gemmN)rT   rU   rV   r#  r2   r2   r2   r3   r"  %  rW   r"  sdzcc                 c   s0    |D ]}t t||  d}|du rq|V  qdS )z;Just a helper: return a specified BLAS function w/typecode.N)rN   rZ   )r   psrQ   r9   r2   r2   r3   	_get_func6  s   r&  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestBLAS3Symmc                 C   sX   t ddgddgg| _t g dg dg| _t d| _t g dg dg| _d S )	Nr   r           )r   r(        @)r(        r   )r   rD   )r   r*  g       @)r)  r(  g      "@)r*   arrayrH   r   r   r)   trP   r2   r2   r3   setup_methodA  s   


zTestBLAS3Symm.setup_methodc              	   C   s   t dD ]>}|| j| j| jddd}t|| j || jj| jd| jddd}t|| j || j| jjd| jjddd}t|| jj qd S )Nsymmr   rH   r   r)   r   r   rC   rH   r   r   r)   r   r   )rH   r   sider)   r   r   )r&  rH   r   r)   r   r,  r   rP   r9   resr2   r2   r3   	test_symmJ  s   zTestBLAS3Symm.test_symmc                 C   s<   t tdd }|d urtt|fi | j| jddd d S d S )NdsymmrC   )rH   r   r   r2  )rN   rZ   r   r   rH   r   rP   r9   r2   r2   r3   test_summ_wrong_sideV  s   z"TestBLAS3Symm.test_summ_wrong_sidec                 C   sr   t tdd}|dur5|| j| j| jddd}t|| jsJ || j| jd| jddd}t|| jr7J dS dS )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.
        r6  Nr   r0  rC   r1  )rN   rZ   rH   r   r)   r*   allcloser,  r3  r2   r2   r3   test_symm_wrong_uplo^  s   z"TestBLAS3Symm.test_symm_wrong_uploN)rT   rU   rV   r.  r5  r8  r:  r2   r2   r2   r3   r'  ?  s
    	r'  c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestBLAS3Syrkc                 C   sX   t ddgddgddgg| _t g dg dg dg| _t d	d
gd
dgg| _d S )Nr   r(         r   r)  )r   r(  r   )r(        @      )r   r?        *@      @      @r@  )r*   r+  rH   r,  ttr-  r2   r2   r3   r.  m  s   


zTestBLAS3Syrk.setup_methodc                 C   s   t dD ][}|| jdd}tt|t| j || jddd}tt|t| j t| jj}|| jdd|d}tt|t| j|  || jddd}tt|t| j	 qd S )Nsyrkr   rH   r   rC   )rH   r   r   )rH   r   r   r)   )rH   r   r   )
r&  rH   r   r*   r   r,  r   r   shaperC  rP   r9   r)   c0r2   r2   r3   	test_syrkw  s   zTestBLAS3Syrk.test_syrkc                 C   s>   t tdd }|d urtt|fi | jdtdd d S d S )Ndsyrkr   )rF   r]   )rH   r   r)   )rN   rZ   r   r   rH   r*   r   r7  r2   r2   r3   test_syrk_wrong_c  s   zTestBLAS3Syrk.test_syrk_wrong_cN)rT   rU   rV   r.  rI  rK  r2   r2   r2   r3   r<  l  s    
r<  c                   @   r;  )TestBLAS3Syr2kc                 C   sv   t ddgddgddgg| _t ddgddgddgg| _t g dg dg d	g| _t ddgdd
gg| _d S )Nr   r(  r=  r   r)  r   )r(  r*  r)  )r*  r(  r(  )r)  r(  rB  ry   )r*   r+  rH   r   r,  rC  r-  r2   r2   r3   r.    s   



zTestBLAS3Syr2k.setup_methodc                 C   s   t dD ]c}|| j| jdd}tt|t| j || j| jddd}tt|t| j t| jj	}|| j| jdd|d}tt|t| j|  || j| jddd}tt|t| j
 qd S )Nsyr2kr   rH   r   r   rC   )rH   r   r   r   )rH   r   r   r   r)   )rH   r   r   r   )r&  rH   r   r   r*   r   r,  r   r   rF  rC  rG  r2   r2   r3   
test_syr2k  s   zTestBLAS3Syr2k.test_syr2kc              	   C   sB   t tdd }|d urtt|fi | j| jdtdd d S d S )Ndsyr2kr   )r  r]   )rH   r   r   r)   )rN   rZ   r   r   rH   r   r*   r   r7  r2   r2   r3   test_syr2k_wrong_c  s   z!TestBLAS3Syr2k.test_syr2k_wrong_cN)rT   rU   rV   r.  rO  rQ  r2   r2   r2   r3   rL    s    rL  c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )TestSyHez2Quick and simple tests for (zc)-symm, syrk, syr2k.c                 C   s   t ddgddgg| _d S )Nr(  y             r   )r*   r+  sigma_yr-  r2   r2   r3   r.    s   
zTestSyHe.setup_methodc                 C   s@   t ddD ]}|| j| jdd}tt|tddg qd S )Nr/  zcr   rN  rC   rE   r&  rS  r   r*   r   r   r3  r2   r2   r3   test_symm_zc     zTestSyHe.test_symm_zcc                 C   s@   t ddD ]}|| j| jdd}tt|tddg qd S )NhemmrT  r   rN  rC   rU  r3  r2   r2   r3   test_hemm_zc  rW  zTestSyHe.test_hemm_zcc                 C   <   t ddD ]}|| jdd}tt|tddg qd S )NrD  rT  r   rE  rE   rU  r3  r2   r2   r3   test_syrk_zr     zTestSyHe.test_syrk_zrc                 C   rZ  )NherkrT  r   rE  rC   rU  r3  r2   r2   r3   test_herk_zr  r\  zTestSyHe.test_herk_zrc                 C   D   t ddD ]}|| j| jdd}tt|dtddg  qd S )NrM  rT  r   rN  r   rE   rU  r3  r2   r2   r3   test_syr2k_zr      zTestSyHe.test_syr2k_zrc                 C   r_  )Nher2krT  r   rN  r   rC   rU  r3  r2   r2   r3   test_her2k_zr  ra  zTestSyHe.test_her2k_zrN)rT   rU   rV   __doc__r.  rV  rY  r[  r^  r`  rc  r2   r2   r2   r3   rR    s    rR  c                   @   sF   e Zd ZdZdd Zejdedd Z	dd Z
d	d
 Zdd ZdS )TestTRMMz!Quick and simple tests for dtrmm.c                 C   s   t ddgddgg| _t g dg dg| _t jg dg dg dg d	gd
d| _t jddgddgddgddgddggd
d| _d S )Nr   r   r=  r)  r>  r*  rA  rB  r=  )rC   rC   r   rD   )r   rC   r\   rF   )r   r   rC   ry   )r   r   r   rC   r9   )r!   rC   r\   r   rF   rD   ry   rI   r]   rJ   rz   )r*   r+  rH   r   a2b2r-  r2   r2   r3   r.    s    


$zTestTRMM.setup_methoddtype_c                 C   s   t d|d}tt|d| j| j |d| j|| j|dd}| jjd }t|| j| jd |d |f  ddt	|j
 d d S )	Ntrmmr(   r   rC   )r2  r(  d   )r   atol)r   r   r   rh  ri  r   rF  r   r*   finfoeps)rP   rj  rk  r4  r   r2   r2   r3   	test_side  s    
zTestTRMM.test_sidec                 C   sL   t tdd }|d ur$|d| j| j}tg dg dg}t|| d S d S )Ndtrmmr   )r@  g      0@g      rg  rN   rZ   rH   r   r*   r+  r   rP   r9   resultexpectedr2   r2   r3   test_ab  s   
zTestTRMM.test_abc                 C   sP   t tdd }|d ur&|d| j| jdd}tg dg dg}t|| d S d S )Nrq  r   Tr   rf  )r*  r=  r(  rr  rs  r2   r2   r3   test_ab_lower  s   
zTestTRMM.test_ab_lowerc                 C   s   t tdd }|d ur[dD ]&}| j }|d| j||d}t|jjdu o*t	||du  t
|| j qt| j }|d| j|dd}t|jjdu oRt	||du  t|| d S d S )Nrq  )TFr   )overwrite_bFT)rN   rZ   r   r[   rH   r   flagsf_contiguousr*   may_share_memoryr   asfortranarrayr   )rP   r9   overwrbcopyrt  r2   r2   r3   test_b_overwrites  s    
zTestTRMM.test_b_overwritesN)rT   rU   rV   rd  r.  r  r   parametrizer   rp  rv  rw  r  r2   r2   r2   r3   re    s    

	re  c               	   C   s  t jd} ttD ]@\}}t |jd }td|d\}| d|}| d|}|d}t	t
|||| t	t
|||j| d}d	}	|d
}|dk r[| |	|	ft|	 }n| |	|	f| |	|	fd  t|	 }||}t|}
t|}| |	|f|}| ||	f|}||||d}t|j|j t|
|| }t|||d ||||dd}t|
j|| }t|||d ||||dd}t|
 j|| }t|||d ||||dd}|d|
t|	t|	f< t|
|| }t|||d ||||ddd}t|
 j|| j }t|| j|d ||||dddd}|d|t|	t|	f< t| j|| j }t|| j|d q
d S )Nr   i  )trsmr(   )r\   rF   r   rC   r]   rI   g      r   r   )r   rH   r   )rm  )r   rH   r   trans_a)r   rH   r   r   )r   rH   r   r   r2  )r   rH   r   r   r2  r   )r*   r   r   r   r   rn  ro  r   r   r   r   r   r   r   r   r   rF  r   r   r   r   )r   r   r    tolr   r   Br   r   r   AuAlB1B2r   x2r2   r2   r3   	test_trsm!  sT   (
r  Fzgh-16930)runreasonc                  C   s8   t dd} tjj| ddd}td}t|| d S )Nrz   rJ   rF   rD   rE   i  )	r*   repeatscipylinalgblasdnrm2ru   rv   r   )r   actualru  r2   r2   r3   test_gh_169309W  s   
r  c                  C   sT   t dd} d}ttj tjj| dd| W d    d S 1 s#w   Y  d S )Nrz   rJ   rE   rF   rD   )	r*   r  r   rZ   __fblas_errorr  r  r  r  )r   r   r2   r2   r3   test_dnrm2_neg_incx`  s
   "r  )r$  ):ru   r  numpyr*   numpy.randomnumpy.testingr   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r  scipy.linalgr   rZ   r   r   r   r   r$   ImportErrorREAL_DTYPESr   r   r4   r<   r>   rX   r   r"  r&  r'  r<  rL  rR  re  r  r   xfailr  r  r2   r2   r2   r3   <module>   sN   D'v    R
	-%((@6
