
    biے                     x   d dl Z d dlZd dlZd dl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 d dlZd dlmZmZmZmZ 	 d dlmZ ej>                  ej@                  gZ!ejD                  ejF                  gZ$e!e$z   Z%d Z&d Z'd	 Z( G d
 d      Z) G d d      Z* G d d      Z+ G d d      Z, G d d      Z- G d d      Z. G d d      Z/ G d d      Z0 G d d      Z1ejd                  jg                  de%      d        Z4ejd                  jk                  dd       d!        Z6d" Z7y# e$ r dZY w xY w)#    N)assert_equalassert_almost_equalassert_array_almost_equalassert_allclose)raises)
arangetriutrilzerostril_indicesonesdiagappendeyenonzero)_fblasget_blas_funcstoeplitzsolve)_cblasc            	         t        dt        j                  dt        j                  d      t        j                  dt        j                  d      f      \  } }}t        | j                  d       t        |j                  d       t        ,t        | j                  d       t        |j                  d       t        d      } t        | j                  d	       t        d
t        j                        } t        | j                  d       t        d
d      } t        | j                  d       t        d
t        j                        } t        | j                  d       t        dt        j                  dt        j                        t        j                  dt        j                        f      } t        | j                  d       y )N)axpyr   r      r   F)dtypeorderCzcblasrotgdgemmr   cr   )r   npempty	complex64
complex128r   typecoder    module_nameclongdoublefloat64)f1f2f3s      W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/linalg/tests/test_blas.pytest_get_blas_funcsr2      s?      	&C	8	&S	9	;
JBB c"c"R^^W-R^^W- 
	Bc" 
bll	3Bc"	c	*Bc" 
bnn	5Bc" 
&

;&=?
B c"    c                      t        dt        j                        \  } }| j                  dk(  sJ |j                  dk(  sJ t        dt        j                        \  } }}| |u sJ | |u sJ y )N)nrm2dotr$   r%   )r6   dotcdotu)r   r&   r(   r*   r-   )fghs      r1   test_get_blas_funcs_aliasr<   C   sg    />DAq::::4BJJGGAq!6M66M6r3   c           	         |  t         j                  j                  d      S g }|D ]  }d|v rt        j                  }n@d|v rt        j
                  }n+d|v rt        j                  }nd|v sJ t        j                  }t        | ||z         }|j                  t        j                  ||||z                 t         j                  j                  d|      S )	Nzcblas not available)reasonr   r%   r"   s)idzf,dtype)pytestmarkskipr&   r)   r(   r-   float32getattrr   paramparametrize)mod	func_nameprefixesparamsprefixr   r9   s          r1   parametrize_blasrM   N   s    
{{{'<==F E&=MMEF]LLEF]JJE&= =JJEC)+,fll1e0BCDE ;;""9f55r3   c                   ,    e Zd Z eedd      d        Zy)TestCBLAS1Simpler   sdczc                     t         |g dg dd      g d       |t        v rt         |g dg dd      g d       y y N   r      )r   rU      a)   	      )rT                  @rU   )rZ   y            $@r\   r   COMPLEX_DTYPESselfr9   r   s      r1   	test_axpyzTestCBLAS1Simple.test_axpyd   ;    !!IzQ"?",	.N"%a
J!&D&46 #r3   N)__name__
__module____qualname__rM   r    rb    r3   r1   rO   rO   c   s    eVV,6 -6r3   rO   c                   \   e Zd Z eedd      d        Z eedd      d        Z eedg d      d        Z eed	d
      d        Z eedd      d        Z	 eedd      d        Z
 eedg d      d        Z eedg d      d        Z eedd      d        Z eedg d      d        Zy)TestFBLAS1Simpler   rP   c                     t         |g dg dd      g d       |t        v rt         |g dg dd      g d       y y rR   r^   r`   s      r1   rb   zTestFBLAS1Simple.test_axpyo   rc   r3   copyc                     t         |g ddgdz        g d       |t        v rt         |g ddgdz        g d       y y )N)rU      rW      rU   )rU                 @y      @      @r^   r`   s      r1   	test_copyzTestFBLAS1Simple.test_copyw   s=    !!Is1u"5yAN"%as1u&=}M #r3   asum)r?   r"   scdzc                 f    t         |g d      d       |t        v rt         |g d      d       y y )NrU   rW                    @rv         @         )r   r_   r`   s      r1   	test_asumzTestFBLAS1Simple.test_asum}   s,    AjM2.N". 126 #r3   r6   sdc                 2    t         |g dg d      d       y )Nru   )r   rW   rT   ir   r`   s      r1   test_dotzTestFBLAS1Simple.test_dot   s    Aj)4b9r3   r8   czc                 2    t         |g dg d      d       y )Nrx   r   rU   rT   y      "       @r   r`   s      r1   	test_dotuzTestFBLAS1Simple.test_dotu   s    Ani8%@r3   r7   c                 2    t         |g dg d      d       y )Nrx   r   ry   rT   y      @      ,r   r`   s      r1   	test_dotczTestFBLAS1Simple.test_dotc   s    Anj95Ar3   r5   c                     t         |g d      t        j                  d             |t        v r(t         |g d      t        j                  d             y y )Nru   2   rx   )r   mathsqrtr_   r`   s      r1   	test_nrm2zTestFBLAS1Simple.test_nrm2   s<    AjM499R=9N". 1499R=A #r3   scal)r?   r"   cszdc                 r    t         |dg d      g d       |t        v rt         |dg d      g d       y y )Nr   ru   )   i
   rU   rx   )y              "@iy      "@      (r^   r`   s      r1   	test_scalzTestFBLAS1Simple.test_scal   s2    !!Az"2K@N"%a>&:<LM #r3   swapc                     g dg d}} |||      \  }}t        ||       t        ||       |t        v r-g dg d}} |||      \  }}t        ||       t        ||       y y )Nr   )rU   rZ   r   )r   rU   y      @      r^   )ra   r9   r   xyx1y1s          r1   	test_swapzTestFBLAS1Simple.test_swap   sg    *11aB!"a(!"a(N"}qAq!WFB%b!,%b!,	 #r3   amax)isr@   icizc                 f    t         |g d      d       |t        v rt         |g d      d       y y )N)r   rm   rU   rT   )y      @      @r   )r   r_   r`   s      r1   	test_amaxzTestFBLAS1Simple.test_amax   s,    Qz]A&N"=)1- #r3   N)rd   re   rf   rM   fblasrb   rp   r|   r   r   r   r   r   r   r   rg   r3   r1   ri   ri   m   s0   eVV,6 -6 eVV,N -N
 eV%;<7 =7
 eUD): *: eVT*A +A eVT*B +B eV%;<B =B
 eV%;<N =N
 eVV,
- -
- eV%=>. ?.r3   ri   c            
          e Zd Z eedd      d        Z eedd      d        Z eedd      d	        Z eed
d      d        Z eedd      d        Z	 eedd      d        Z
 eedd      d        Z eedd      d        Zej                  j                  de      d        Zej                  j                  de      d        Zej                  j                  dg eez   D  cg c]  }d|f c}} eD  cg c]  }d|f c}}       d        Zej                  j                  dg eez   D  cg c]  }d|f c}} eD  cg c]  }d|f c}}       d        Zej                  j                  de      d        Zej                  j                  de      d        Zej                  j                  de      d         Zej                  j                  de      d!        Zej                  j                  de      d"        Zej                  j                  de      d#        Zej                  j                  de      d$        Zy%c c}} w c c}} w c c}} w c c}} w )&TestFBLAS2SimplegemvrP   c           	          t         |ddggdg      dg       t         |ddggdgddg      dg       |t        v r4t         |ddggdg      dg       t         |ddggdgdd	g      d
g       y y NrU   rv   irW   iry   rz   y      H      By              @y      H      5r^   r`   s      r1   	test_gemvzTestFBLAS2Simple.test_gemv   s    !!Aurd"3cU;!!AurdAs";cUCN"%adVHrd&;gYG%adVHrdAt&D'.i1 #r3   gerr}   c           
      ^   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gddgg       |t        v r@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       y y )NrT   r   rU   rm   r   rn   rS   rw      r\      rX   r[                 ?ry   ro   r   r]   ry   r^   r`   s      r1   test_gerzTestFBLAS2Simple.test_ger   s    !!A1v1v"6!Q!Q8HI!!Ay1a&"9$%q6B8b"X">	@!!A1v1v&'VaV$4#69:AB7H	JN"%aB7QF&;(*Bx!Q&8:%a<"b&B()1vBx"b&BD #r3   gerur   c                     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       y )NrT   r   r   rU   rm   ry   ro   r   rn   r   r   rw   r   r\   r   r   r`   s      r1   	test_geruzTestFBLAS2Simple.test_geru   s[    !!AAwA"7$&8aV"4	6!!Br2h"?$%q6B8b"X">	@r3   gercc                     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       y )NrT   r   r   rU   rm   ry   ro   r   rn   r   rw   r   r\   r   r   r`   s      r1   	test_gerczTestFBLAS2Simple.test_gerc   s[    !!AAwA"7$&8aV"4	6!!A|b"X">$%q6B8b"X">	@r3   syrc                 J   t        j                  ddd      }t        j                  |d d t         j                  f   |z        }t        j                  |d d dt         j                  f   |d d d   z        }t        j                  dddd	
      }t        j                  ddd      j                  d      }t        j                  |d d t         j                  f   |z        }t        j                  |d d dt         j                  f   |d d d   z        }	t         j                  t        j                  d      |t        j                  d      f   j                         }
t        j                  |      j                  }t         |d|      ||       t         |d|d      |j                  |       t         |d|ddd      ||       t         |d|ddd      ||       |t        v rt         |d|      ||       t         |d|d      |j                  |       t         |d|
ddd      ||       t         |d|
ddd      |	|       t        j                  d|d      } |d||d      }t        |||        |d||      }||usJ t        |d|z  |       nSt        j                  d|d      } |d||d      }t        |||        |d||      }||usJ t        |d|z  |       t        t        |d|d       t        t        |d|d       t        t        |d|d       t        t        |d|d       t        t        |d|d       t        t        |d|d       t        t        |d|t        j                  ddd             y ) NrT   rW   r"   r$   rV   r         !@   Fendpointr[   Drm         ?rtolTlowerr   incxoffxnr   rU   rm   rm   r   rY   overwrite_a       @rX   r   r   r   r   )r&   r   r	   newaxislinspaceviewc_r   ravelfinfoepsr   Tr_   assert_raises	Exception)ra   r9   r   r   resxresx_reverser   r   reszresz_reversewr   rY   bs                 r1   test_syrzTestFBLAS2Simple.test_syr   s   IIa#&wwqBJJ'!+,wwq2rzz!12QttW<=KK3U3IIa#&++C0wwqBJJ'!+,wwq2rzz!12QttW<=EE"((1+q"((1+-.446xx""#q	4d3#q-tvvDA#qqqA64H#qrQ7$4	1 N"Ac1It$7Ac1D1466EAc111:DtLAc12A;(t5 ,A#qA40AAt$/#qAAA::AqvD1 ,A#qA40AAt$/#qAAA::AqvD1iC3iC3iC4iCb1iCa0iC!4iCbhhvsC.HIr3   herc                 "   t        j                  ddd      }t        j                  ddd      j                  d      }t        j                  |d d t         j                  f   |j                         z        }t        j                  |d d dt         j                  f   |d d d   j                         z        }t         j                  t        j                  d      |t        j                  d      f   j                         }t        j                  |      j                  }t         |d	|      ||
       t         |d	|d      |j                  j                         |
       t         |d	|ddd      ||
       t         |d	|ddd      ||
       t        j                  d|d      }	 |d	||	d      }
t        |	||
        |d||	      }
|	|
usJ t        |
d|z  |
       t        t        |d	|d       t        t        |d	|d       t        t        |d	|d       t        t        |d	|d       t        t        |d	|d       t        t        |d	|d       t        t        |d	|t        j                  ddd             y )NrT   rW   r"   r$   r[   r   rV   rm   r   r   Tr   rU   r   r   r   r   r   r   rX   r   r   r   r   r   r   r   )r&   r   r   r	   r   conjr   r   r   r   r   r   r   r   r   )ra   r9   r   r   r   rehzrehz_reverser   r   rY   r   s              r1   test_herzTestFBLAS2Simple.test_her	  s   IIa#&IIa#&++C0wwqBJJ'!&&(23wwq2rzz!12QttW\\^CDEE"((1+q"((1+-.446xx""#q	4d3#q-tvv{{}4H#qqqA64H#qrQ7$4	1 HHVUC(c1t,4d+c1Nzz1T6-iC3iC3iC4iCb1iCa0iC!4iCbhhvsC.HIr3   syr2c                    t        j                  ddd      }t        j                  ddd      }t        j                  |d d t         j                  f   |z  |d d t         j                  f   |z  z         }t        j                  |d d dt         j                  f   |d d d   z  |d d dt         j                  f   |d d d   z  z         }t        j                  ddd	d
      }t        j
                  |      j                  }t         |d||      ||       t         |d||d      |d dd df   |       t         |d||d      |j                  |       t         |d||dddd      ||       t         |d||ddddd      |d dd df   |       t         |d||dddd      ||       t        j                  d|d      }	 |d|||	d      }
t        |	||        |d|||	      }
|	|
usJ t        |
d|z  |       t        t        |d||d       t        t        |d||d       t        t        |d||d       t        t        |d||d       t        t        |d||d       t        t        |d||d       t        t        |d||d       t        t        |d||d       t        t        |d||d       t        t        |d||t        j                  d dd             y )!NrT   rW   r"   r$   r[   rV   r   r   r   Fr   r   r   rU   r   Tr   r   r   r   r   incyoffyr   r   r   r   r   r   r   r   r   r   rX   r   r   r   r   r   )r&   r   r	   r   r   r   r   r   r   r   r   r   )ra   r9   r   r   r   resxyresxy_reverseqr   rY   r   s              r1   	test_syr2zTestFBLAS2Simple.test_syr2*  s   IIa#&IIa#&!RZZ-(1,qBJJ/?!/CCD$B$

"2 3a"g ="#DbD"**$4"5$B$"?!@ A KK3U3xx""#q!e$7#q!q)5!RaR=tD#q!40%''E#q!!!!"ED	*#q!!!!"Jbqb"1"fD	2 	#q!"12BG%D	2 HHVUC(c1a1$/5t,c1a1zz1U7.iCAA6iCAA6iCAB7iCAA6iCAA6iCAB7iCA4iCA3iCAQ7iCA&#s1KLr3   her2c                    t        j                  ddd      j                  d      }t        j                  ddd      j                  d      }|d d t         j                  f   |j	                         z  |d d t         j                  f   |j	                         z  z   }t        j
                  |      }|d d dt         j                  f   |d d d   j	                         z  }||d d dt         j                  f   |d d d   j	                         z  z  }t        j
                  |      }t         j                  t        j                  d      |t        j                  d      f   j                         }t         j                  t        j                  d      |t        j                  d      f   j                         }t        j                  |      j                  }	t         |d	||      ||	
       t         |d	||d      |d dd df   |	
       t         |d	||d      |j                  j	                         |	
       t         |d	||dddd      ||	
       t         |d	||ddddd      |d dd df   |	
       t         |d	||dddd      ||	
       t        j                  d|d      }
 |d	|||
d      }t        |
||	
        |d|||
      }|
|usJ t        |d|z  |	
       t        t        |d	||d       t        t        |d	||d       t        t        |d	||d       t        t        |d	||d       t        t        |d	||d       t        t        |d	||d       t        t        |d	||d       t        t        |d	||d       t        t        |d	||d       t        t        |d	||t        j                  ddd             y ) NrT   r[   r"   r$   r   r   rV   rm   r   r   rU   r   Tr   r   r   r   r   r   r   r   rX   r   r   rW   r   r   r   r   r   r   )r&   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   )ra   r9   r   r   r   r   r   uvr   rY   r   s               r1   	test_her2zTestFBLAS2Simple.test_her2T  sP   IIa#&++C0IIa3',,S1!RZZ- 1668+a2::.>.II$B$

*+a"glln<4R4+,q2w||~==.EE"((1+q"((1+-.446EE"((1+q"((1+-.446xx""#q!e$7#q!q)5!RaR=tD#q!40%'',,.!	# 	#q!!!!!DD	*#q!!!!!qIbqb"1"fD	2 	#q!"12AF%D	2 HHVUC(c1a1$/5t,c1a1zz1U7.iCAA6iCAA6iCAB7iCAA6iCAA6iCAB7iCA4iCA3iCAQ7iCAc2	4r3   r   c                 r   t         j                  j                  d      }d}d}d}d}t        t	        |j                  |dz         t        ||z
  dz
              t	        |j                  |dz         t        ||z
  dz
                    }|j                  |      }t        ||z   dz   |f|      }|d   |dd df<   |d   |ddd	f<   |d
   |dddf<   |d   |dd df<   |j                  |      j                  |      }	|j                  |      j                  |      }
 |d       |d      }}t        d|      \  } ||||||||	|
|	      }||j                  |	      z  ||
z  z   }t        ||        ||||||||
|	|d
      }||j                  j                  |
      z  ||	z  z   }t        ||       y )N  rZ   rW   rT   r   r$   )r   r   )r   rT   r   )r   r   r   )rT   r   rU   rm   r   )gbmv)	mr   kuklalpharY   r   r   beta)
r   r   r   r   r   rY   r   r   r   trans)r&   randomdefault_rngr   r   r   astyper   r6   r   r   )ra   r   rngr   r   r   r   AAbr   r   r   r   funcr   y2s                   r1   	test_gbmvzTestFBLAS2Simple.test_gbmv  s   ii##D)VCJJr!t,eAbDFm<CJJr!t,eAbDFm<>HHUOBrE!GQ<u- dG1bqb5	tW1ac6
tW1ac6
dG1bqb5	JJqM  'JJqM  'Ahb	ty6Arb'QUU1Xq(!"b)ArbQ0QSSWWQZ$(*!"b)r3   c                 r   t         j                  j                  d      }d}d}t        ||f|      }t        |dz   |f|      }|j                  |      |t	        |      t	        |      f<   t        d|dz         D ]?  }|j                  ||z
        }||t	        ||z
        t	        ||      f<   ||d|z
  |d f<   A |j                  |      }|t        v r-||j                         j                  z  }t        d|      \  }	n||j                  z  }t        d|      \  }	t        |      |dd d f<   |j                  |      j                  |      }
|j                  |      j                  |      } |d	       |d
      }} |	||||
||      }||j                  |
      z  ||z  z   }t        ||       y )Nr   r   r   r$   rT   rV   )hbmv)sbmv      ?rU   )kr   rY   r   r   r   )r&   r  r  r   r   ranger  r_   r   r   r   r   r6   r   )ra   r   r  r   r  r  r  ind2tempr  r   r   r   r   r   r  s                   r1   test_sbmv_hbmvzTestFBLAS2Simple.test_sbmv_hbmv  s   ii##D)1a&&AaC85) #&**Q-&)VAY
!QqSM 	&D::af%D15AfQtVnfT1o-.!%Br$w~	& HHUON"OA"9E:EDHA"9E:EDG2q5	JJqM  'JJqM  'Dk58tAUbA>QUU1Xq(!"b)r3   zfname,dtypespmvhpmvc                    t         j                  j                  d      }d}|j                  ||f      j                  |      }|t        v r||j                  ||f      dz  z  }||dk(  r|j
                  n|j                         j
                  z  }t        |      \  }}|||f   }|j                  |      j                  |      }	|j                  |      j                  |      }
t        d|z        j                  |      }t        d|z        j                  |      } |d       |d      }}t        |f|      \  } |||||	|
|      }||j                  |	      z  ||
z  z   }t        ||        ||d	z
  |||||dd||

      }||d dd df   z  j                  |dd d         ||dd d   z  z   }t        |dd d   |       t        |d   |d          y )Nr   rU   r   r  r   r  r$   )r   r   apr   r   r   rT   )
r   r   r   r   r   r  r   r   r   r   rV   rm   )r&   r  r  r  r_   r   r   r   r   r   r   r6   r   r   )ra   fnamer   r  r   r  r%   rApr   r   xlongylongr   r   r  r   r  s                     r1   test_spmv_hpmvzTestFBLAS2Simple.test_spmv_hpmv  s   
 ii##D)JJ1v%%e,N"QF#B&&A	EVOQSS3A1q!tWJJqM  'JJqM  'qs""5)QqS	  'Dk58txu5AUrQ!$?QUU1Xq(!"b) AaCu45Ebqqq2aSbSk!&&uQTT{3dU14a4[6HH!"QTT(B/BqE58,r3   sprhprc                 v   t         j                  j                  d      }d}|j                  ||f      j                  |      }|t        v r||j                  ||f      dz  z  }||dk(  r|j
                  n|j                         j
                  z  }t        |      \  }}|||f   }|j                  |      j                  |      }	t        j                  |      j                  j                  d      }
|dk(  rCt        d|      \  }|
|	d d d f   j                  |	d d d f   j                               z  |z   }n4t        d	|      \  }|
|	d d d f   j                  |	d d d f         z  |z   } |||
||	
      }t        d|      }||||f<   |dk(  r|j                         n||||f<   t        ||       y )Nr   rU   r   r  g      @r  )r  r$   )r  )r   r   r  r   rU   rU   )r&   r  r  r  r_   r   r   r   r   r   typer   r6   r   r   )ra   r  r   r  r   r  r%   r  r  r   r   r  r  r   y1fs                  r1   test_spr_hprzTestFBLAS2Simple.test_spr_hpr  s   
 ii##D)JJ1v%%e,N"QF#B&&A	EUNQSS

2A1q!tWJJqM  '%%**3/E>"859ED1d7$'
(9::Q>B"859ED1d7$'
33a7BAUrQ/F%(AqD	!&%BGGIRAqD	!#r*r3   c                 n   t         j                  j                  d      }d}|j                  ||f      j                  |      }|t        v rF||j                  ||f      dz  z  }||j                         j                  z  }t        d|      \  }n||j                  z  }t        d|      \  }t        |      \  }}|||f   }|j                  |      j                  |      }	|j                  |      j                  |      }
 |d      }|j                         |	d d d f   j                  |
d d d f   j                               z  }||z   |j                         j                  z   } ||||	|
|      }t        d	|      }||||f<   |g d
   j                         |g dg df<   t        ||       y )Nr   rU   r   )hpr2r$   )spr2r   )r   r   r   r   r  r   )rT   rU   rm   )rT   r   r   )r   r   rT   )r&   r  r  r  r_   r   r   r   r   r6   r   r   )ra   r   r  r   r  r  r%   r  r  r   r   r   r   r  r   r"  s                   r1   test_spr2_hpr2zTestFBLAS2Simple.test_spr2_hpr2  s   ii##D)JJ1v%%e,N"QF#B&&AOA"9E:EDHA"9E:EDA1q!tWJJqM  'JJqM  'aJJL1QW:>>!D!G*//*;<<UQVVXZZAUa14F%(AqD	$&yM$6$6$8Iy !!#r*r3   c           
      2   t         j                  j                  d      }d}d}|j                  |      j                  |      }t	        ||f|      }t        |dz         D ]1  }|j                  ||z
        |t        ||z
        t        ||      f<   3 |t        v rI|t        |      xx   d|j                  |dz   |z  ||dz   z  dz  z
        j                  |      z  z  cc<   t	        |dz   |f|      }t        |dz         D ]  }	t        ||	      ||	 dz
  |	d f<    t        d	|      \  }
 |
|||
      }|j                  |      }t        ||        |
|||d      } |d      |t        |      t        |      f<   |j                  |      }t        ||        |
|||dd      }|j                  j                  |      }t        ||        |
|||dd      }|j                         j                  j                  |      }t        ||       y )Nr   r   rU   r$   rT   r   r   r  )tbmvr  rY   r   r  rY   r   r   r  rY   r   r   r   )r&   r  r  r  r   r  r   r_   r   r   r   r6   r   r   r   ra   r   r  r   r  r   r  supr  rowr  r   r  s                r1   	test_tbmvzTestFBLAS2Simple.test_tbmv  s   ii##D)JJqM  '1a&&1: 	AC/2zz!C%/@AfQsUmVC^+,	A N"gajMR#**ac1Wa1gqj-A"B"I"I%"PPPM AaC85)1: 	.C#A~BtAvst|	.y6Aq!UU1X!"b)Aqq)"'(&)VAY
UU1X!"b)Aqq2SSWWQZ!"b)Aqq2VVXZZ^^A!"b)r3   c           
      
   t         j                  j                  d      }d}d}|j                  |      j                  |      }t	        ||f|      }t        |dz         D ]1  }|j                  ||z
        |t        ||z
        t        ||      f<   3 |t        v rI|t        |      xx   d|j                  |dz   |z  ||dz   z  dz  z
        j                  |      z  z  cc<   t	        |dz   |f|      }t        |dz         D ]  }	t        ||	      ||	 dz
  |	d f<    t        d	|      \  }
 |
|||
      }t        ||      }t        ||        |
|||d      } |d      |t        |      t        |      f<   t        ||      }t        ||        |
|||dd      }t        |j                  |      }t        ||        |
|||dd      }t        |j                         j                  |      }t        ||       y )Ni90  r   rU   r$   rT   r   r   r)  )tbsvr+  r,  r-  )r&   r  r  r  r   r  r   r_   r   r   r   r   r   r   r   r.  s                r1   	test_tbsvzTestFBLAS2Simple.test_tbsvC  s   ii##E*JJqM  '1a&&1: 	AC/2zz!C%/@AfQsUmVC^+,	A N"gajMR#**ac1Wa1gqj-A"B"I"I%"PPPM AaC85)1: 	.C#A~BtAvst|	.y6Aq!1a[!"b)Aqq)"'(&)VAY
1a[!"b)Aqq2133]!"b)Aqq21668::q!!"b)r3   c                 J   t         j                  j                  d      }d}|j                  |      j                  |      }|t        v r4t        |j                  ||f      |j                  ||f      dz  z         }nt        |j                  ||f            }t        |      \  }}|||f   }t        d|      \  }	 |	|||      }
|j                  |      }t        |
|        |	|||d      }
 |d      |t        |      t        |      f<   |j                  |      }t        |
|        |	|||dd	      }
|j                  j                  |      }t        |
|        |	|||dd
	      }
|j                         j                  j                  |      }t        |
|       y )Nr   r   r   )tpmvr$   r   r  r   rT   r   r  r   r   r   r  r   r   r   r   )r&   r  r  r  r_   r	   r   r   r6   r   r   r   r   ra   r   r  r   r   r  r%   r  r  r  r   r  s               r1   	test_tpmvzTestFBLAS2Simple.test_tpmvi  sr   ii##D)JJqM  'N"SZZA'#**aV*<R*??@ASZZA'(A A1q!tWy6A""UU1X!"b)A"*"'(&)VAY
UU1X!"b)A"3SSWWQZ!"b)A"3VVXZZ^^A!"b)r3   c                 >   t         j                  j                  d      }d}|j                  |      j                  |      }|t        v r4t        |j                  ||f      |j                  ||f      dz  z         }nt        |j                  ||f            }|t        |      z  }t        |      \  }}|||f   }t        d|      \  }	 |	|||      }
t        ||      }t        |
|        |	|||d      }
 |d      |t        |      t        |      f<   t        ||      }t        |
|        |	|||dd	      }
t        |j                  |      }t        |
|        |	|||dd
	      }
t        |j                         j                  |      }t        |
|       y )Nr   r   r   )tpsvr$   r7  rT   r8  r9  r   )r&   r  r  r  r_   r	   r   r   r   r   r   r   r   r   r:  s               r1   	test_tpsvzTestFBLAS2Simple.test_tpsv  su   ii##D)JJqM  'N"SZZA'#**aV*<R*??@ASZZA'(A	SVA1q!tWy6A""1a[!"b)A"*"'(&)VAY
1a[!"b)A"3133]!"b)A"31668::q!!"b)r3   c                    t         j                  j                  d      }d}|j                  ||f      t        |      z   j	                  |      }|j                  d      j	                  |      }t        d|      \  } |||      }t        |      j                  |      }t        ||        |||d      } |d      |t        |      t        |      f<   t        |      j                  |      }t        ||        |||dd      }t        |      j                  j                  |      }t        ||        |||dd	      }t        |      j                         j                  j                  |      }t        ||       y )
Nr   rU   )trmvr$   rY   r   rT   rY   r   r   rY   r   r   r   r   )r&   r  r  r   r  r   r	   r6   r   r   r   r   	ra   r   r  r   r  r   r  r   r  s	            r1   	test_trmvzTestFBLAS2Simple.test_trmv  s;   ii##D)ZZAA&..u5JJqM  'y6A^!W[[^!"b)A#"'(&)VAY
!W[[^!"b)A!,!WYY]]1!"b)A!,!W\\^!!!$!"b)r3   c                 <   t         j                  j                  d      }d}|j                  ||f      t        |      z   j	                  |      }|j                  |      j	                  |      }t        d|      \  } |||      }t        t        |      |      }t        ||        |||d      }t        t        |      |      }t        ||        |||d      } |d      |t        |      t        |      f<   t        t        |      |      }t        ||        |||dd	      }t        t        |      j                  |      }t        ||        |||dd
	      }t        t        |      j                         j                  |      }t        ||       y )Nr      )trsvr$   rA  rT   )rY   r   r   rB  rC  r   )r&   r  r  r   r  r   r   r	   r   r
   r   r   r   rD  s	            r1   	test_trsvzTestFBLAS2Simple.test_trsv  s[   ii##D)ZZAA&..u5JJqM  'y6A^47A!"b)A!$47A!"b)A#"'(&)VAY
47A!"b)A!,4799a !"b)A!,47<<>##Q'!"b)r3   N)rd   re   rf   rM   r   r   r   r   r   r   r   r   r   rA   rB   rG   DTYPESr	  r  REAL_DTYPESr_   r  r#  r'  r1  r4  r;  r>  rE  rI  ).0r   s   00r1   r   r      s   eVV,1 -1 eUD)
D *
D eVT*@ +@ eVT*@ +@ eUF+0J ,0Jd eUD)J *J@ eVT*'M +'MR eVT*.4 +.4` [[Wf-* .*B [[Wf-* .*< [[] -'2^'C	De65/	D-'5	6e65/	6- -	-6 [[] -&1N&B	CU5%.	C-&4	5U5%.	5- +	+2 [[Wf-+ .+4 [[Wf-#* .#*J [[Wf-#* .#*J [[Wf-* .*@ [[Wf-* .*@ [[Wf-* .*0 [[Wf-* .*} 
E	6< 
D	5s   (I<I5I	I$r   c                   ,    e Zd Z eedd      d        Zy)TestFBLAS3Simpler#   rP   c           	          t         |ddgdg      dgg       t         |ddgdgddg      dg       |t        v r3t         |ddgdg      dgg       t         |ddgdgdd	g      d
g       y y r   r^   r`   s      r1   	test_gemmzTestFBLAS3Simple.test_gemm  s    !!AsRD/SE7;!!AsRD!aS"9C5AN"%aTFRD&9WI;G%aTFRD!bT&BWIN #r3   N)rd   re   rf   rM   r   rP  rg   r3   r1   rN  rN    s    eVV,O -Or3   rN  c                   r    e Zd Zd Z eedd      d        Z eedd      d        Z eedd      d        Zy)TestBLAS3Symmc                     t        j                  ddgddgg      | _        t        j                  g dg dg      | _        t        j                  d      | _        t        j                  g dg dg      | _        y )	Nr   r           )r   rT        @)rT        r   )r   rU   )r   rV  g       @)rU  rT  g      "@)r&   arrayrY   r   r   r%   tra   s    r1   setup_methodzTestBLAS3Symm.setup_method  sg    B88% &<(* +=') *r3   symmrP   c                     || j                   | j                  | j                  dd      }t        || j                          || j                   j
                  | j                  d| j                  dd      }t        || j                          || j                   | j                  j
                  d| j                  j
                  dd      }t        || j                  j
                         y )Nr   rY   r   r%   r   r   rT   rY   r   r   r%   r   r   )rY   r   sider%   r   r   )rY   r   r%   r   rX  r   ra   r9   r   ress       r1   	test_symmzTestBLAS3Symm.test_symm  s    $&&DFFdffBR@!#tvv.$&&((dffArK!#tvv.$&&DFFHH1r#!#tvvxx0r3   c                     t        j                  t              5   || j                  | j                  dd       ddd       y# 1 sw Y   yxY w)z|`side=1` means C <- B*A, hence shapes of A and B are to be
        compatible. Otherwise, f2py exception is raised.
        rT   )rY   r   r   r_  N)rA   r   r   rY   r   r`   s      r1   test_symm_wrong_sidez"TestBLAS3Symm.test_symm_wrong_side  s;     ]]9% 	3$&&2	3 	3 	3s   !AAc                 :    || j                   | j                  | j                  dd      }t        j                  || j
                        sJ  || j                   | j                  d| j                  dd      }t        j                  || j
                        rJ y)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   r]  rT   r^  N)rY   r   r%   r&   allcloserX  r`  s       r1   test_symm_wrong_uploz"TestBLAS3Symm.test_symm_wrong_uplo  su     $&&DFFdffBR@{{3'''$&&DFF!tvvRbI;;sDFF++++r3   N)	rd   re   rf   rZ  rM   r   rb  rd  rg  rg   r3   r1   rR  rR    s^    * eVV,	1 -	1 eVV,3 -3 eVV,, -,r3   rR  c                   R    e Zd Zd Z eedd      d        Z eedd      d        Zy)TestBLAS3Syrkc                     t        j                  ddgddgddgg      | _        t        j                  g dg dg dg      | _        t        j                  d	d
gd
dgg      | _        y )Nr   rT         r   rU  )r   rT  r   )rT        @      )r   rm        *@      @      @rn  )r&   rW  rY   rX  ttrY  s    r1   rZ  zTestBLAS3Syrk.setup_method  sn    B898% & <()+ , ((RHI' (r3   syrkrP   c                     || j                   d      }t        t        j                  |      t        j                  | j                                || j                   dd      }t        t        j
                  |      t        j
                  | j                               t        j                  | j                  j                        } || j                   dd|      }t        t        j                  |      t        j                  | j                  |z                 || j                   dd      }t        t        j                  |      t        j                  | j                               y )Nr   rY   r   rT   )rY   r   r   )rY   r   r   r%   )rY   r   r   )	rY   r   r&   r	   rX  r
   r   shaperq  ra   r9   r   r%   c0s        r1   	test_syrkzTestBLAS3Syrk.test_syrk#  s    b!!"''!*bggdffo>b*!"''!*bggdffo>WWTVV\\"brR0!"''!*bggdffRi.@Ab*!"''!*bggdgg.>?r3   c                     t        j                  t              5   || j                  dt	        j
                  d             d d d        y # 1 sw Y   y xY w)Nr   )rW   rn   )rY   r   r%   )rA   r   r   rY   r&   r   r`   s      r1   test_syrk_wrong_czTestBLAS3Syrk.test_syrk_wrong_c4  s=     ]]9% 	5bBGGFO4	5 	5 	5s   )AAN)rd   re   rf   rZ  rM   r   rx  rz  rg   r3   r1   ri  ri    sC    ( eVV,@ -@  eVV,5 -5r3   ri  c                   R    e Zd Zd Z eedd      d        Z eedd      d        Zy)TestBLAS3Syr2kc                    t        j                  ddgddgddgg      | _        t        j                  ddgddgddgg      | _        t        j                  g dg dg d	g      | _        t        j                  ddgdd
gg      | _        y )Nr   rT  rk  r   rU  r   )rT  rV  rU  )rV  rT  rT  )rU  rT  rp  r   )r&   rW  rY   r   rX  rq  rY  s    r1   rZ  zTestBLAS3Syr2k.setup_method=  s    B898% & B88r7$ % =(') * ((RHG% &r3   syr2krP   c                 <    || j                   | j                  d      }t        t        j                  |      t        j                  | j
                                || j                   | j                  dd      }t        t        j                  |      t        j                  | j
                               t        j                  | j
                  j                        } || j                   | j                  dd|      }t        t        j                  |      t        j                  | j
                  |z                 || j                   | j                  dd      }t        t        j                  |      t        j                  | j                               y )Nr   rY   r   r   rT   )rY   r   r   r   )rY   r   r   r   r%   )rY   r   r   r   )
rY   r   r   r&   r	   rX  r
   r   ru  rq  rv  s        r1   
test_syr2kzTestBLAS3Syr2k.test_syr2kJ  s    $&&+!"''!*bggdffo>$&&!4!"''!*bggdffo>WWTVV\\"$&&r:!"''!*bggdffRi.@A$&&!4!"''!*bggdgg.>?r3   c           	          t        j                  t              5   || j                  | j                  dt        j                  d             d d d        y # 1 sw Y   y xY w)Nr   )rG  rn   )rY   r   r   r%   )rA   r   r   rY   r   r&   r   r`   s      r1   test_syr2k_wrong_cz!TestBLAS3Syr2k.test_syr2k_wrong_cZ  sF    ]]9% 	A$&&bhhw.?@	A 	A 	As   4AA N)rd   re   rf   rZ  rM   r   r  r  rg   r3   r1   r|  r|  <  sE    & eWf-@ .@ eWf-A .Ar3   r|  c                       e Zd ZdZd Z eedd      d        Z eedd      d        Z eedd      d	        Z	 eed
d      d        Z
 eedd      d        Z eedd      d        Zy)TestSyHez2Quick and simple tests for (zc)-symm, syrk, syr2k.c                 D    t        j                  ddgddgg      | _        y )NrT  y             r   )r&   rW  sigma_yrY  s    r1   rZ  zTestSyHe.setup_methodd  s$    xx"d"%r!, -r3   r[  zcc                      || j                   | j                   d      }t        t        j                  |      t        j                  ddg             y )Nr   r  rT   rV   r  r   r&   r	   r   r`  s       r1   rb  zTestSyHe.test_symmh  s9     $,,$,,b9!"''#,B0@Ar3   hemmc                      || j                   | j                   d      }t        t        j                  |      t        j                  ddg             y )Nr   r  rT   r  r`  s       r1   	test_hemmzTestSyHe.test_hemmn  s8     $,,$,,b9!"''#,A@r3   rr  c                      || j                   d      }t        t        j                  |      t        j                  ddg             y )Nr   rt  rV   r  r`  s       r1   rx  zTestSyHe.test_syrkt  s1    $,,b)!"''#,R0ABr3   herkc                      || j                   d      }t        t        j                  |      t        j                  ddg             y )Nr   rt  rT   r  r`  s       r1   	test_herkzTestSyHe.test_herky  s0    $,,b)!"''#,A@r3   r~  c                      || j                   | j                   d      }t        t        j                  |      dt        j                  ddg      z         y )Nr   r  r   rV   r  r`  s       r1   test_syr2k_zrzTestSyHe.test_syr2k_zr~  s<    $,,$,,b9!"''#,277B83D0DEr3   her2kc                      || j                   | j                   d      }t        t        j                  |      dt        j                  ddg      z         y )Nr   r  r   rT   r  r`  s       r1   test_her2k_zrzTestSyHe.test_her2k_zr  s;    $,,$,,b9!"''#,277Aq6?0BCr3   N)rd   re   rf   __doc__rZ  rM   r   rb  r  rx  r  r  r  rg   r3   r1   r  r  a  s    <- eVT*B +B
 eVT*A +A
 eVT*C +C eVT*A +A eWd+F ,F eWd+D ,Dr3   r  c                       e Zd ZdZd Zej                  j                  de      d        Z	 e
edd      d        Z e
edd      d        Z e
edd      d	        Zy
)TestTRMMz!Quick and simple tests for *trmm.c                 *   t        j                  ddgddgg      | _        t        j                  g dg dg      | _        t        j                  g dg dg dg d	gd
      | _        t        j                  ddgddgddgddgddggd
      | _        y )Nr   r   rk  rU  rl  rV  ro  rp  rk  )rT   rT   r   rU   )r   rT   rm   rW   )r   r   rT   r   )r   r   r   rT   r9   )r   rT   rm   r   rW   rU   r   rZ   rn   r[   r   )r&   rW  rY   r   a2b2rY  s    r1   rZ  zTestTRMM.setup_method  s    B:9& '=(* + ((L(((* 256 ((QFQFQFQFQGD!$&r3   r   c           	         t        d|      }t        t        |d| j                  | j                          |d| j                  j                  |      | j                  j                  |      d      }| j                  j                  d   }t        || j                  | j                  d |d |f   z  ddt        j                  |      j                  z         y )	Ntrmmr$   r   rT   )r_  rT  d   )r   atol)r   r   r   r  r  r  ru  r   r&   r   r   )ra   r   r  ra  r  s        r1   	test_sidezTestTRMM.test_side  s    fE2isDGGTWW=3u-tww~~e/DGGMM!TWWtwwrr2A2v6R %!4!44	6r3   r  rP   c                      |d| j                   | j                        }t        j                  g dg dg      }t	        ||       y )Nr   )rn  g      0@g      r  rY   r   r&   rW  r   ra   r9   r   resultexpecteds        r1   test_abzTestTRMM.test_ab  s:    2tvvtvv&88_,. /!&(3r3   c                      |d| j                   | j                  d      }t        j                  g dg dg      }t	        ||       y )Nr   Tr   r  )rV  rk  rT  r  r  s        r1   test_ab_lowerzTestTRMM.test_ab_lower  s<    2tvvtvvT288_,. /!&(3r3   c                    | j                   j                  |      }dD ]d  }|j                         } |d| j                  ||      }|j                  j
                  rJ t        j                  ||      rJ t        ||       f t        j                  |j                               } |d| j                  |d      }|j                  j
                  sJ t        j                  ||      sJ t        ||       y )N)TFr   )overwrite_bT)r   r  rk   rY   flagsf_contiguousr&   may_share_memoryr   asfortranarrayr   )ra   r9   r   r   overwrbcopyr  s          r1   test_b_overwriteszTestTRMM.test_b_overwrites  s     FFMM% # 	#FFFHEr4665f=F{{////**5&999"	# !!!&&(+2tvvu$7{{''''""5&111!%0r3   N)rd   re   rf   r  rZ  rA   rB   rG   rJ  r  rM   r   r  r  r  rg   r3   r1   r  r    s    +& [[Wf-6 .6 eVV,4 -4 eVV,4 -4 eVV,1 -1r3   r  r   c                 N   t         j                  j                  d      }t        j                  |       j                  dz  }t        d|       \  }|j                  d      j                  |       }|j                  d      j                  |       } | d      }t        t        ||||       t        t        |||j                  |       d}d	} | d
      }| t        v r7|j                  ||f      |j                  ||f      dz  z   t        |      z   }n|j                  ||f      t        |      z   }|j                  |       }t        |      }	t        |      }
|j                  ||f      j                  |       }|j                  ||f      j                  |       } ||||      }t        |j                  |j                         t!        |	||z        }t#        |||        ||||d      }t!        |	j                  ||z        }t#        |||        ||||d      }t!        |	j%                         j                  ||z        }t#        |||        ||||d      } | d      |	t'        |      t'        |      f<   t!        |	||z        }t#        |||        ||||dd      }t!        |	j%                         j                  ||j%                         j                  z        }t#        ||j%                         j                  |        ||||ddd      } | d      |
t'        |      t'        |      f<   t!        |
j%                         j                  ||j%                         j                  z        }t#        ||j%                         j                  |       y )Nr   i  )trsmr$   )rm   rW   r   rT   rn   rZ   g      r   )r   rY   r   )r  )r   rY   r   trans_ar   )r   rY   r   r   )r   rY   r   r   r_  )r   rY   r   r   r_  r   )r&   r  r  r   r   r   r  r   r   r   r_   r   r	   r
   r   ru  r   r   r   r   )r   r  tolr  r  Br   r   r   AuAlB1B2r   x2s                  r1   	test_trsmr    s   
))


%C
((5/

d
"C9E2ED 	

6!!%(A

6!!%(A!HE)T5!Q/)T5!##q1	A	A$KEZZA#**aV"4R"773q6AJJ1vQ'	A	aB	aB	QF		"	"5	)B	QF		"	"5	)B	EQ"	%B288$	r58	BB%	EQ"a	0B	rttU2X	BB%	EQ"a	0B	rwwy{{E"H	%BB%	EQ"1	-B$QxBvay&)	r58	BB%	EQ"11	5B	rwwy{{E"'')++-	.BB	#.	EQ"11A	>B$QxBvay&)	rwwy{{E"'')++-	.BB	#.r3   Fzgh-16930)runr>   c                      t        j                  dd      } t        j                  j                  j                  | ddd      }t        j                  d      }t        ||       y )Nr   r[   rW   rU   rV   i  )	r&   repeatscipylinalgblasdnrm2r   r   r   )r   actualr  s      r1   test_gh_169309r    sK     			"aA\\$$Q1b1Fyy~HFH%r3   c                      t        j                  dd      } d}t        t        j                        5  t
        j                  j                  j                  | dd|       d d d        y # 1 sw Y   y xY w)Nr   r[   rV   rW   rU   )	r&   r  r   r   __fblas_errorr  r  r  r  )r   r   s     r1   test_dnrm2_neg_incxr    sZ     			"aAD	u**	+ /1a./ / /s   -A((A1)8r   rA   numpyr&   numpy.testingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r  scipy.linalgr   r   r   r   r   r   r    ImportErrorrD   r-   rK  r(   r)   r_   rJ  r2   r<   rM   rO   ri   r   rN  rR  ri  r|  r  r  rB   rG   r  xfailr  r  rg   r3   r1   <module>r     sY  
   G G */ / /  I I, zz2::&,,.	~	%$#N6*6 6?. ?.Hn* n*bO O), ),X 5  5H!A !AJ%D %DP;1 ;1| &)2/ *2/j u$  &&&&/e  Es   D/ /D98D9