a
    Rei                     @   s  d dl Z d dlZd dlmZmZmZmZmZmZ d dl	m
Z
mZmZmZ d dl mZ d dl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#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ d	d
 Z,ej-. Z/e/0e1d e/G dd dZ2e/G dd dZ3e/G dd dZ4e j56deeegdd Z7G dd dZ8G dd dZ9G dd dZ:G dd dZ;G dd dZ<G dd  d Z=G d!d" d"Z>G d#d$ d$Z?G d%d& d&Z@G d'd( d(ZAG d)d* d*ZBG d+d, d,ZCd-d. ZDd/d0 ZEd1d2 ZFd3d4 ZGG d5d6 d6ZHdS )7    N)arangeaddarrayeyecopysqrt)assert_equalassert_array_equalassert_array_almost_equalassert_allclose)raises)fft)comb)toeplitzhankel	circulanthadamardlesliedft	companiontritriutrilkron
block_diaghelmerthilbert
invhilbertpascal	invpascalfiedlerfiedler_companioneigvalsconvolution_matrix)condc                 C   s   t | }t||}|S N)r   r   outer)ndata r)   \/var/www/sunrise/env/lib/python3.9/site-packages/scipy/linalg/tests/test_special_matrices.pyget_mat   s    r+   'tri'/'tril/'triu'c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTric                 C   s^   t tdtg dg dg dg dg t tdddtg dg dg dg dgd d S )N      r   r   r   r0   r0   r   r   r0   r0   r0   r   r0   r0   r0   r0   fdtyper   r   r   selfr)   r)   r*   
test_basic   s    zTestTri.test_basicc                 C   s`   t tdddtg dg dg dg dg t tdddtg dg d	g dg dg d S )
Nr.   r0   kr1   r2   r3   r   r   r   r   r/   r7   r8   r)   r)   r*   	test_diag&   s    zTestTri.test_diagc                 C   sV   t tddtg dg dg dg dg t tddtg dg dg dg d S )	Nr.      r0   r   r   r0   r0   r   r0   r0   r0   r/   r1   r2   r7   r8   r)   r)   r*   test_2d0   s    zTestTri.test_2dc                 C   s^   t tddddtg dg dg dg t tddddtg dg dg d	g d
g d S )Nr@   r.      r;   r2   r3   )r   r   r   rA   rB   r7   r8   r)   r)   r*   test_diag2d9   s    zTestTri.test_diag2dN)__name__
__module____qualname__r:   r?   rD   rG   r)   r)   r)   r*   r-      s   

	r-   c                   @   s   e Zd Zdd Zdd ZdS )TestTrilc                 C   sZ   dt d d}| }tdD ]$}t|d dD ]}d|||f< q4q"tt|| d S Nd      lr0   r   )r+   astyper   ranger   r   r9   abr<   rO   r)   r)   r*   r:   E   s    zTestTril.test_basicc                 C   s   dt d d}| }tdD ]$}t|d dD ]}d|||f< q4q"tt|dd| | }tdD ],}tt|d dfdD ]}d|||f< qqjtt|d	d| d S )
NrM   rN   r4   r@   r   rE   r;   r0   rF   )r+   rP   r   rQ   r   r   maxrR   r)   r)   r*   r?   M   s    zTestTril.test_diagNrH   rI   rJ   r:   r?   r)   r)   r)   r*   rK   C   s   rK   c                   @   s   e Zd Zdd Zdd ZdS )TestTriuc                 C   sZ   dt d d}| }tdD ]$}t|d dD ]}d|||f< q4q"tt|| d S rL   )r+   rP   r   rQ   r   r   rR   r)   r)   r*   r:   ]   s    zTestTriu.test_basicc                 C   s   dt d d}| }tdD ],}tt|d dfdD ]}d|||f< q<q"tt|dd| | }tdD ]$}t|d dD ]}d|||f< qqrtt|d	d| d S )
NrM   rN   r4   r0   r   rE   r;   r@   rF   )r+   rP   r   rQ   rU   r   r   rR   r)   r)   r*   r?   e   s    zTestTriu.test_diagNrV   r)   r)   r)   r*   rW   [   s   rW   funcc                 C   sD   t jtdd" | tdgg W d    n1 s60    Y  d S )Nr,   matchr0   )pytestZwarnsDeprecationWarningnpr   )rX   r)   r)   r*   !test_special_matrices_deprecations   s    r^   c                   @   sD   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S )TestToeplitzc                 C   sZ   t g d}t|g dg dg dg t g dg d}t|g dg dg dg d S )Nr0   rE   r@   )rE   r0   rE   r@   rE   r0   )r0   r.   rN   )rE   r0   r.   r   r	   r9   yr)   r)   r*   r:   {   s    zTestToeplitz.test_basicc                 C   sj   dt d d }t|}t|}t|| |d d df }t|| t|ddd f |dd    d S )N      ?      @y      ?      ?r   r0   )r   r   r   r	   Zconj)r9   r(   xtZcol0r)   r)   r*   test_complex_01   s    

zTestToeplitz.test_complex_01c                 C   s2   t d}t|dgg t dd}t|dgg dS )z*Scalar arguments still produce a 2D array.
      Nrb   )r9   rh   r)   r)   r*   test_scalar_00   s    
zTestToeplitz.test_scalar_00c                 C   s0   t g d}t|d}t|dgdgdgg d S Nr`   r0   rE   r@   r   r   r	   r9   crh   r)   r)   r*   test_scalar_01   s    
zTestToeplitz.test_scalar_01c                 C   s4   t g d}t|t d}t|dgdgdgg d S rm   rn   ro   r)   r)   r*   test_scalar_02   s    zTestToeplitz.test_scalar_02c                 C   s6   t g d}t|t dg}t|dgdgdgg d S rm   rn   ro   r)   r)   r*   test_scalar_03   s    zTestToeplitz.test_scalar_03c                 C   s*   t g d}td|}t|g dg d S )N)rj   rE   r@   r0   r`   rn   )r9   rrh   r)   r)   r*   test_scalar_04   s    
zTestToeplitz.test_scalar_04N)
rH   rI   rJ   r:   ri   rl   rq   rr   rs   ru   r)   r)   r)   r*   r_   y   s   r_   c                   @   s   e Zd Zdd ZdS )
TestHankelc                 C   sZ   t g d}t|g dg dg dg t g dg d}t|g dg dg dg d S )Nr`   rE   r@   r   )r@   r   r   r@   r.   rN   )rE   r@   r.   )r   r	   rc   r)   r)   r*   r:      s    zTestHankel.test_basicNrH   rI   rJ   r:   r)   r)   r)   r*   rv      s   rv   c                   @   s   e Zd Zdd ZdS )TestCirculantc                 C   s,   t g d}t|g dg dg dg d S )Nr`   )r0   r@   rE   )rE   r0   r@   ra   )r   r	   rc   r)   r)   r*   r:      s    zTestCirculant.test_basicNry   r)   r)   r)   r*   rz      s   rz   c                   @   s   e Zd Zdd ZdS )TestHadamardc                 C   s~   t d}t|dgg t dtd}t|ddgddgg t d}t|g dg dg d	g d
g ttt d ttt d d S )Nr0   rE   r5   re         r.   r3   )r0   r=   r0   r=   )r0   r0   r=   r=   )r0   r=   r=   r0   r   rN   )r   r	   floatassert_raises
ValueErrorrc   r)   r)   r*   r:      s    
zTestHadamard.test_basicNry   r)   r)   r)   r*   r{      s   r{   c                   @   s   e Zd Zdd Zdd ZdS )
TestLesliec                 C   sf   t ttddgddggg d t ttg dddgddgg t ttddgddg t ttdgg  d S )Nr0   rE   rx   )r~   r   r   r8   r)   r)   r*   test_bad_shapes   s    zTestLeslie.test_bad_shapesc                 C   s:   t g dddg}tg dg dg dg}t|| d S )Nr`         ?      ?)re          @rf   )r           r   )r   r   r   )r   r   r	   )r9   rS   expectedr)   r)   r*   r:      s    zTestLeslie.test_basicNrH   rI   rJ   r   r:   r)   r)   r)   r*   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestCompanionc                 C   sF   t ttddgddgg t ttg d t ttdg t ttg  d S )Nr0   rE   )r   r.   rN   )r~   r   r   r8   r)   r)   r*   r      s    zTestCompanion.test_bad_shapesc                 C   sX   t g d}tddgddgg}t|| t g d}tddgddgg}t|| d S )	Nr`          g      re   r   )r         @g      $      r   )r   r   r	   )r9   rp   r   r)   r)   r*   r:      s    
zTestCompanion.test_basicNr   r)   r)   r)   r*   r      s   r   c                   @   sL   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S )TestBlockDiagc              	   C   sZ   t tdddgddgddggg dg}t|g dg d	g d
g dg dg dg d S )NrE   r0   r@   r.   rN      r`   )r0   r   r   r   r   r   r   )r   r0   r   r   r   r   r   )r   r   r0   rE   r   r   r   )r   r   r@   r.   r   r   r   )r   r   rN   r   r   r   r   )r   r   r   r   r0   rE   r@   )r   r   r	   r9   rg   r)   r)   r*   r:      s    (
zTestBlockDiag.test_basicc                 C   s4   t dgg}t|jt t dgg}t|jt d S )Ng      ?T)r   r   r6   r}   boolr   r)   r)   r*   
test_dtype   s    zTestBlockDiag.test_dtypec                 C   s6   t dggdgg}tddgddgg}t|| d S )Nr0                 ?r   )r   r]   r   r	   )r9   actualZdesiredr)   r)   r*   test_mixed_dtypes  s    zTestBlockDiag.test_mixed_dtypesc                 C   sJ   t d}t|jd t|dgg t ddgd}t|g dg dg d S )Nr0   r0   r0   rE   r@   r.   rw   )r   r   r.   )r   r   shaper	   r9   rS   r)   r)   r*   test_scalar_and_1d_args  s
    z%TestBlockDiag.test_scalar_and_1d_argsc                 C   s   t ttdggg d S )Nr0   )r~   r   r   r8   r)   r)   r*   test_bad_arg  s    zTestBlockDiag.test_bad_argc                 C   s"   t  }t|jd t|jd d S )NrE   r   )r   r   ndimnbytesr   r)   r)   r*   test_no_args  s    zTestBlockDiag.test_no_argsc              	   C   s\   t ddgddggg ddgddgddgg}t|g d	g d
g dg dg dg dg d S )Nr0   r   rE   r@   r.   rN   r      r/   )r   r0   r   r   r>   )r   r   rE   r@   )r   r   r.   rN   )r   r   r   r   )r   r	   r   r)   r)   r*   test_empty_matrix_arg  s    
z#TestBlockDiag.test_empty_matrix_argc              	   C   sn   t ddgddggg gddgddgddggtjddgd	d
}t|g dg dg dg dg dg dg d S )Nr0   r   rE   r@   r.   rN   r   r   int32r5   )r0   r   r   r   r   r   )r   r0   r   r   r   r   )r   r   r   r   r   r   )r   r   rE   r@   r   r   )r   r   r.   rN   r   r   )r   r   r   r   r   r   )r   r]   zerosr	   r   r)   r)   r*   test_zerosized_matrix_arg$  s    
z'TestBlockDiag.test_zerosized_matrix_argN)rH   rI   rJ   r:   r   r   r   r   r   r   r   r)   r)   r)   r*   r      s   	r   c                   @   s   e Zd Zdd ZdS )TestKronc                 C   s   t tddgddggtg dg}t|tg dg dg tddgddgg}tdgd	gg}t ||}tdd
gd	dgddgddgg}t|| d S )Nr0   rE   r@   r.   rC   )r0   r0   r0   rE   rE   rE   )r@   r@   r@   r.   r.   r.   rj      rk         (   !   ,   )r   r   r	   )r9   rS   m1m2r   r)   r)   r*   r:   6  s    $
zTestKron.test_basicNry   r)   r)   r)   r*   r   4  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestHelmertc                 C   sV   t ddD ]F}t|dd}t|}t||j|dd t|j||dd q
d S )Nr0   r   Tfull-q=atol)rQ   r   r]   r   r   dotT)r9   r'   HZIdr)   r)   r*   test_orthogonalityH  s
    
zTestHelmert.test_orthogonalityc                 C   s   t ddD ]}t|dd}t|}|dd d d f j|jfD ]T}t|t||fd|  }t||j| t|j|t|d dd q>q
d S )NrE   r   Tr   r0   r   r   )rQ   r   r   r]   r   r   r   r   )r9   r'   ZH_fullZ	H_partialUCr)   r)   r*   test_subspaceO  s     zTestHelmert.test_subspaceN)rH   rI   rJ   r   r   r)   r)   r)   r*   r   F  s   r   c                   @   s   e Zd Zdd ZdS )TestHilbertc                 C   sR   t g dg dg dg}ttd| ttddgg td}t|jd d S )	N)re   r   UUUUUU?)r   r   r   )r   r   g?r@   r0   re   r   )r   r   )r   r
   r   r	   r   r   )r9   h3Zh0r)   r)   r*   r:   [  s    zTestHilbert.test_basicNry   r)   r)   r)   r*   r   Y  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestInvHilbertc                 C   s  t dgg}ttddd| ttd| t ddgddgg}ttddd| ttd| t g dg d	g d
g}ttddd| ttd| t g dg dg dg dg}ttddd| ttd| t g dg dg dg dg dg}ttddd| ttd| t g dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g}ttd'dd| ttd'|td(d) d S )*Nr0   Texactr.   i   rE   )	   r   )r      L)r   r      r@   )      t)r   i  t  )r   r   iP  )r   r   r   i
  )     v  )r   i  , i  )r   r   i6 4|  )r   r   r   i  x)r   r   r   r   iD  rN   )i!  p]) 2@l%PAy    g
 P=    /w$:R
   xDum7   O@>/,	   t:`j!    < )r   i y ̌    r	 @u\     Db`Hh    Pz6  }%     l&W c(     hx 4z     d~I
 8wl8Z     @u8! `6a)r   r   l   @iLU  RK   8H,!`g`36    g0  *?*^B    ;t$ }|   @bsk C{'"i   `>9&%mq>   3CM@; 86`T    Pm;,
 )r   r   r   l    pM6= 0	     nC  YJVr     <_ L^V    R8 uxb    eH  EIBQx    HvYP x(6$     7	 >u1)r   r   r   r  l   Dcf$l @QM    8ItHv0"Qs   N
:v @ s/V|    #& p-N$v     5  @,@VK-
    8_DdYI  B _,    qk)r   r   r   r  r  l    O9x&Y)lx     pd gsxmU     D0FZD K|y#l_y     xbr &V%     lny?Cce @M=p-     @@|%6 h\bC )r   r   r   r  r  r  l   @/.L  BAyks'9    | 
LjY   iYn\"% #5Ey    X(@T'3?   @,3 Hx+/S    pO3^#
 )r   r   r   r  r  r  r&  l    @+aF}cJ{
;_    P8Xy8Qo& BIhN    `@
oc#dLq,O    pFYRa Ii9M     R/$L@<8zG 0 )r   r   r   r  r  r  r'  r0  l   $9@t)4   07$$Tv0 l7>?   "`-:M= (^@b)   6a;:BMb-Kx?|#   Z$M~ll )r   r   r   r  r  r  r(  r1  r9  l    l>cTA@8HV-:v    h{d*U zaC<C     dYwMf RyUC#h.    @)]oz+%)r   r   r   r  r  r  r)  r2  r:  rA  l   @e4jT  GU
    `i
t,@  Y,ch8    E@3I3T X=&@E   ~Si)r   r   r   r	  r  r   r*  r3  r;  rB  rH  l    p}v `Xfz~A`si     86Jpsbv  $JY'ip     tk(0u1@<f)r   r   r   r
  r  r!  r+  r4  r<  rC  rI  rN  l   w2T.g]  %\n     PYHul ZR@
R   LwJ)r   r   r   r  r  r"  r,  r5  r=  rD  rJ  rO  rS  l    L#(S.,# 2F=EgJ    @}l`L\k)r   r   r   r  r  r#  r-  r6  r>  rE  rK  rP  rT  rW  l   @i7Qt0" 8B3\f	   p1&S,)r   r   r   r  r  r$  r.  r7  r?  rF  rL  rQ  rU  rX  rZ  l     @Y? }xl]R )r   r   r  r  r  r%  r/  r8  r@  rG  rM  rR  rV  rY  r[  r\  l   /"}+
    r   )rtol)r   r	   r   r
   r   rP   r}   )r9   Zinvh1Zinvh2Zinvh3Zinvh4Zinvh5Zinvh17r)   r)   r*   r:   i  sd    zzTestInvHilbert.test_basicc                 C   sN   t ddD ]>}t|}t|}t|}t||t|d| d| d q
d S )Nr0   rj   gV瞯<)r   r^  )rQ   r   r   r$   r   r   r   )r9   r'   rS   rT   rp   r)   r)   r*   test_inverse  s
    zTestInvHilbert.test_inverseN)rH   rI   rJ   r:   r_  r)   r)   r)   r*   r   g  s    r   c                   @   s   e Zd Zdedggedggfdeddgddggeddgddggfdeg dg dg dgeg dg d	g d
gfdeg dg dg dg dgeg dg dg dg dgfgZdd Zdd Zdd Zdd ZdS )
TestPascalr0   rE   r   r@   rC   r`   )r0   r@   r   rA   rB   )r0   rE   r0   r.   r3   )r0   rE   r@   r.   )r0   r@   r   rj   )r0   r.   rj   rk   r/   r1   )r0   rE   r0   r   )r0   r@   r@   r0   c                 C   st   t t|| t t|dd| t t|dd|j tt|dd| tt|ddd| tt|ddd|j d S )Nlower)kindupperFr   )r   rb  )r	   r   r   r
   r9   r'   symlowr)   r)   r*   
check_case'  s    zTestPascal.check_casec                 C   s$   | j D ]\}}}| ||| qd S r%   )casesrg  rd  r)   r)   r*   
test_cases/  s    zTestPascal.test_casesc                 C   s&   t d}|d tddddks"J d S )N2   )r=   r=   b   1   Tr   )r   r   r9   pr)   r)   r*   test_big3  s    zTestPascal.test_bigc                 C   s\   t d}td|dd |dddd t d}td|dd d	|dd d
d d S )N"   rE   r=   rF   zn = 34err_msg#   r   re   zn = 35)r   r   itemrm  r)   r)   r*   test_threshold7  s    "zTestPascal.test_thresholdN)	rH   rI   rJ   r   rh  rg  ri  ro  ru  r)   r)   r)   r*   r`    sB   


r`  c                  C   sn   dd } g d}g d}|D ]$}|D ]}dD ]}| ||| q,q$qg d}|D ]}|D ]}| ||d qVqNd S )Nc                 S   sR   t | ||d}t| ||d}|t|t}t|t| d| ||f d d S )N)rb  r   zn=%d  kind=%r exact=%rrq  )r   r   rP   objectr   r	   r   )r'   rb  r   iprn  er)   r)   r*   check_invpascalD  s    z'test_invpascal.<locals>.check_invpascal)Z	symmetricra  rc  )r0   rE   rN      )TF)   rp  rs  rj  Tr)   )ry  kindsnsr'   rb  r   r)   r)   r*   test_invpascalB  s    r~  c                  C   s   t d} tddgddgg}t| | t ddd} t| |d  t ddd} t| |td  tg d}t d	} | |}t|}t|| d S )
NrE   re   r|   r'   )Zscaler   Zsqrtn)r   r0   rE   r@   r.   rN   r   r0      )r   r   r
   r   r   r   )mr   rg   ZmxZfxr)   r)   r*   test_dft_  s    

r  c               	   C   s~   t g } t| jd t dg} t| tdgg t tdd} tg dg dg dg d	g d
g dg}t| | d S )Nr   g     ^@r   r0   r   )r   r0   rE   r@   r.   rN   )r0   r   r0   rE   r@   r.   )rE   r0   r   r0   rE   r@   )r@   rE   r0   r   r0   rE   )r.   r@   rE   r0   r   r0   )rN   r.   r@   rE   r0   r   )r    r   sizer	   r]   r   r   )r4   Zdesr)   r)   r*   test_fiedlero  s    

r  c                  C   s   t g } t| jd t dg} t| jd t ddg} t| tdgg t g d} t| tg d tt	 t g d W d    n1 s0    Y  t g d} tt
| tg d d S )	Nr   re   r   r   )r   r   rf   )r   r0   rE   )re   g      0g     U@g      fg     @Z@)g      @r   rf   re   )r!   r   r  r	   r]   r   r
   r   r~   r   r"   )Zfcr)   r)   r*   test_fiedler_companion~  s    

*r  c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	j
dddge	j
dg de	j
dg de	j
dg ddd ZdS )TestConvolutionMatrixzL
    Test convolution_matrix vs. numpy.convolve for various parameters.
    c                 C   s,   t dd|}|r(|dt dd|  }|S )z/Make a complex or real test vector of length n.r   g@r   g      g@)r]   Zlinspace)r9   r'   cpxrg   r)   r)   r*   create_vector  s    z#TestConvolutionMatrix.create_vectorc                 C   s@   t jtdd tg dd W d    n1 s20    Y  d S )Nzn must be a positive integerrY   r`   r   r[   r   r   r#   r8   r)   r)   r*   
test_bad_n  s    z TestConvolutionMatrix.test_bad_nc                 C   s<   t jtdd tdd W d    n1 s.0    Y  d S )Nzone-dimensionalrY   r0   r.   r  r8   r)   r)   r*   test_bad_first_arg  s    z(TestConvolutionMatrix.test_bad_first_argc                 C   s<   t jtdd tg d W d    n1 s.0    Y  d S )Nzlen\(a\)rY   r.   r  r8   r)   r)   r*   test_empty_first_arg  s    z*TestConvolutionMatrix.test_empty_first_argc                 C   s@   t jtdd tdddd W d    n1 s20    Y  d S )Nzmode.*must be one ofrY   r   r.   zinvalid argument)moder  r8   r)   r)   r*   test_bad_mode  s    z#TestConvolutionMatrix.test_bad_moder  FTna)r0   rE   r   nvr  )Nr   ZvalidZsamec           
      C   sh   |  ||}|  ||}|d u r8t||}t||}nt|||}t|||}|| }	t||	 d S r%   )r  r]   Zconvolver#   r
   )
r9   r  r  r  r  rS   vy1Ay2r)   r)   r*   test_against_numpy_convolve  s    z1TestConvolutionMatrix.test_against_numpy_convolveN)rH   rI   rJ   __doc__r  r  r  r  r  r[   markparametrizer  r)   r)   r)   r*   r    s   r  )Ir[   numpyr]   r   r   r   r   r   r   Znumpy.testingr   r	   r
   r   r   r~   Z	scipy.fftr   Zscipy.specialr   Zscipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Znumpy.linalgr$   r+   ZtestingZsuppress_warningsZ
dep_filterfilterr\   r-   rK   rW   r  r  r^   r_   rv   rz   r{   r   r   r   r   r   r   r   r`  r~  r  r  r  r  r)   r)   r)   r*   <module>   sJ    \
(
/D )3