o
    &&iel                     @   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)   SC:\wamp64\www\opt\env\Lib\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                   @      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< qqtt|| d S Nd      lr0   r   )r+   astyper   ranger   r   r9   abr<   rP   r)   r)   r*   r:   E      zTestTril.test_basicc                 C   s   dt d d}| }tdD ]}t|d dD ]}d|||f< qqtt|dd| | }tdD ]}tt|d dfdD ]}d|||f< qBq5tt|d	d| d S )
NrN   rO   r4   r@   r   rE   r;   r0   rF   )r+   rQ   r   rR   r   r   maxrS   r)   r)   r*   r?   M   s   zTestTril.test_diagNrH   rI   rJ   r:   r?   r)   r)   r)   r*   rL   C       rL   c                   @   rK   )TestTriuc                 C   sZ   dt d d}| }tdD ]}t|d dD ]}d|||f< qqtt|| d S rM   )r+   rQ   r   rR   r   r   rS   r)   r)   r*   r:   ]   rV   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< qBq9tt|d	d| d S )
NrN   rO   r4   r0   r   rE   r;   r@   rF   )r+   rQ   r   rR   rW   r   r   rS   r)   r)   r*   r?   e   s   zTestTriu.test_diagNrX   r)   r)   r)   r*   rZ   [   rY   rZ   funcc                 C   sF   t jtdd | tdgg W d    d S 1 sw   Y  d S )Nr,   matchr0   )pytestZwarnsDeprecationWarningnpr   )r[   r)   r)   r*   !test_special_matrices_deprecations   s   "ra   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.   rO   )rE   r0   r.   r   r	   r9   yr)   r)   r*   r:   {       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.
      Nre   )r9   rl   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 Nrc   r0   rE   r@   r   r   r	   r9   crl   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 rq   rr   rs   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 rq   rr   rs   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)rn   rE   r@   r0   rc   rr   )r9   rrl   r)   r)   r*   test_scalar_04   s   
zTestToeplitz.test_scalar_04N)
rH   rI   rJ   r:   rm   rp   ru   rv   rw   ry   r)   r)   r)   r*   rb   y   s    rb   c                   @      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 )Nrc   rE   r@   r   )r@   r   r   r@   r.   rO   )rE   r@   r.   )r   r	   rf   r)   r)   r*   r:      rh   zTestHankel.test_basicNrH   rI   rJ   r:   r)   r)   r)   r*   r{          r{   c                   @   rz   )TestCirculantc                 C   s,   t g d}t|g dg dg dg d S )Nrc   )r0   r@   rE   )rE   r0   r@   rd   )r   r	   rf   r)   r)   r*   r:      s    zTestCirculant.test_basicNr~   r)   r)   r)   r*   r      r   r   c                   @   rz   )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   ri         r.   r3   )r0   r=   r0   r=   )r0   r0   r=   r=   )r0   r=   r=   r0   r   rO   )r   r	   floatassert_raises
ValueErrorrf   r)   r)   r*   r:      s   
zTestHadamard.test_basicNr~   r)   r)   r)   r*   r          r   c                   @   rK   )
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   r}   )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 )Nrc         ?      ?)ri          @rj   )r           r   )r   r   r   )r   r   r	   )r9   rT   expectedr)   r)   r*   r:      s   zTestLeslie.test_basicNrH   rI   rJ   r   r:   r)   r)   r)   r*   r          r   c                   @   rK   )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.   rO   )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 )	Nrc          g      ri   r   )r         @g      $      r   )r   r   r	   )r9   rt   r   r)   r)   r*   r:      s   
zTestCompanion.test_basicNr   r)   r)   r)   r*   r      r   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.   rO      rc   )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   rO   r   r   r   r   )r   r   r   r   r0   rE   r@   )r   r   r	   r9   rk   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.   r|   )r   r   r.   )r   r   shaper	   r9   rT   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.   rO   r      r/   )r   r0   r   r   r>   )r   r   rE   r@   )r   r   r.   rO   )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.   rO   r   r   Z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.   rO   r   r   )r   r   r   r   r   r   )r   r`   Z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                   @   rz   )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.   rn      ro         (   !   ,   )r   r   r	   )r9   rT   m1m2r   r)   r)   r*   r:   6  s   $
zTestKron.test_basicNr~   r)   r)   r)   r*   r   4  r   r   c                   @   rK   )TestHelmertc                 C   sV   t ddD ]#}t|dd}t|}t||j|dd t|j||dd qd S )Nr0   r   Tfull-q=atol)rR   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 ]E}t|dd}t|}|dd d d f j|jfD ]*}t|t||fd|  }t||j| t|j|t|d dd qqd S )NrE   r   Tr   r0   r   r   )rR   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                   @   rz   )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)ri   r   UUUUUU?)r   r   r   )r   r   g?r@   r0   ri   r   )r   r   )r   r
   r   r	   r   r   )r9   Zh3Zh0r)   r)   r*   r:   [  s   zTestHilbert.test_basicNr~   r)   r)   r)   r*   r   Y  r   r   c                   @   rK   )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  rO   )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,  r5  l   $9@t)4   07$$Tv0 l7>?   "`-:M= (^@b)   6a;:BMb-Kx?|#   Z$M~ll )r   r   r   r  r  r#  r-  r6  r>  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.  r7  r?  rF  l   @e4jT  GU
    `i
t,@  Y,ch8    E@3I3T X=&@E   ~Si)r   r   r  r  r  r%  r/  r8  r@  rG  rM  l    p}v `Xfz~A`si     86Jpsbv  $JY'ip     tk(0u1@<f)r   r   r  r  r  r&  r0  r9  rA  rH  rN  rS  l   w2T.g]  %\n     PYHul ZR@
R   LwJ)r   r   r  r  r  r'  r1  r:  rB  rI  rO  rT  rX  l    L#(S.,# 2F=EgJ    @}l`L\k)r   r   r  r  r  r(  r2  r;  rC  rJ  rP  rU  rY  r\  l   @i7Qt0" 8B3\f	   p1&S,)r   r   r  r  r  r)  r3  r<  rD  rK  rQ  rV  rZ  r]  r_  l     @Y? }xl]R )r   r   r  r  r  r*  r4  r=  rE  rL  rR  rW  r[  r^  r`  ra  l   /"}+
    r   )rtol)r   r	   r   r
   r   rQ   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   rn   gV瞯<)r   rc  )rR   r   r   r$   r   r   r   )r9   r'   rT   rU   rt   r)   r)   r*   test_inverse  s   $zTestInvHilbert.test_inverseN)rH   rI   rJ   r:   rd  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   rc   )r0   r@   r   rA   rB   )r0   rE   r0   r.   r3   )r0   rE   r@   r.   )r0   r@   r   rn   )r0   r.   rn   ro   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   rg  )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%   )casesrl  ri  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   ri   zn = 35)r   r   itemrr  r)   r)   r*   test_threshold7  s   "*zTestPascal.test_thresholdN)	rH   rI   rJ   r   rm  rl  rn  rt  rz  r)   r)   r)   r*   re    sD    


re  c                  C   sn   dd } g d}g d}|D ]}|D ]}dD ]}| ||| qqqg d}|D ]}|D ]}| ||d q+q'd S )Nc                 S   sR   t | ||d}t| ||d}|t|t}t|t| d| ||f d d S )N)rg  r   zn=%d  kind=%r exact=%rrv  )r   r   rQ   objectr   r	   r   )r'   rg  r   iprs  er)   r)   r*   check_invpascalD  s   z'test_invpascal.<locals>.check_invpascal)Z	symmetricrf  rh  )r0   rE   rO      )TF)   ru  rx  ro  Tr)   )r~  kindsnsr'   rg  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   ri   r   r'   )scaler   Zsqrtn)r   r0   rE   r@   r.   rO   r   r0      )r   r   r
   r   r   r   )mr   rk   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.   rO   )r0   r   r0   rE   r@   r.   )rE   r0   r   r0   rE   r@   )r@   rE   r0   r   r0   rE   )r.   r@   rE   r0   r   r0   )rO   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 sIw   Y  t g d} tt
| tg d d S )	Nr   ri   r   r   )r   r   rj   )r   r0   rE   )ri   g      0g     U@g      fg     @Z@)g      @r   rj   ri   )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'   cpxrk   r)   r)   r*   create_vector  s   z#TestConvolutionMatrix.create_vectorc                 C   sB   t jtdd tg dd W d    d S 1 sw   Y  d S )Nzn must be a positive integerr\   rc   r   r^   r   r   r#   r8   r)   r)   r*   
test_bad_n     "z TestConvolutionMatrix.test_bad_nc                 C   s>   t jtdd tdd W d    d S 1 sw   Y  d S )Nzone-dimensionalr\   r0   r.   r  r8   r)   r)   r*   test_bad_first_arg     "z(TestConvolutionMatrix.test_bad_first_argc                 C   s>   t jtdd tg d W d    d S 1 sw   Y  d S )Nzlen\(a\)r\   r.   r  r8   r)   r)   r*   test_empty_first_arg  r  z*TestConvolutionMatrix.test_empty_first_argc                 C   sB   t jtdd tdddd W d    d S 1 sw   Y  d S )Nzmode.*must be one ofr\   r   r.   zinvalid argument)moder  r8   r)   r)   r*   test_bad_mode  r  z#TestConvolutionMatrix.test_bad_moder  FTna)r0   rE   r   nvr  )Nr   ZvalidZsamec           
      C   sh   |  ||}|  ||}|d u rt||}t||}nt|||}t|||}|| }	t||	 d S r%   )r  r`   Zconvolver#   r
   )
r9   r  r  r  r  rT   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+   testingZsuppress_warningsZ
dep_filterfilterr_   r-   rL   rZ   r  r  ra   rb   r{   r   r   r   r   r   r   r   r   r   re  r  r  r  r  r  r)   r)   r)   r*   <module>   sL     \
(
/D )3