o
    gVh                     @   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,G dd dZ-G dd dZ.G dd dZ/G dd dZ0G dd dZ1G dd dZ2G dd dZ3G dd dZ4G dd dZ5G dd dZ6G dd  d Z7G d!d" d"Z8G d#d$ d$Z9G d%d& d&Z:G d'd( d(Z;d)d* Z<d+d, Z=d-d. Z>d/d0 Z?G d1d2 d2Z@dS )3    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)   f/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_special_matrices.pyget_mat   s   r+   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   r/   r/   r   r   r/   r/   r/   r   r/   r/   r/   r/   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-   r/   kr0   r1   r2   r   r   r   r   r.   r6   r7   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-      r/   r   r   r/   r/   r   r/   r/   r/   r.   r0   r1   r6   r7   r)   r)   r*   test_2d.   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:   r1   r2   )r   r   r   r@   rA   r6   r7   r)   r)   r*   test_diag2d7   s   zTestTri.test_diag2dN)__name__
__module____qualname__r9   r>   rC   rF   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      lr/   r   )r+   astyper   ranger   r   r8   abr;   rO   r)   r)   r*   r9   B      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 )
NrM   rN   r3   r?   r   rD   r:   r/   rE   )r+   rP   r   rQ   r   r   maxrR   r)   r)   r*   r>   J   s   zTestTril.test_diagNrG   rH   rI   r9   r>   r)   r)   r)   r*   rK   A       rK   c                   @   rJ   )TestTriuc                 C   sZ   dt d d}| }tdD ]}t|d dD ]}d|||f< qqtt|| d S rL   )r+   rP   r   rQ   r   r   rR   r)   r)   r*   r9   Y   rU   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 )
NrM   rN   r3   r/   r   rD   r:   r?   rE   )r+   rP   r   rQ   rV   r   r   rR   r)   r)   r*   r>   a   s   zTestTriu.test_diagNrW   r)   r)   r)   r*   rY   X   rX   rY   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r/   rD   r?   )rD   r/   rD   r?   rD   r/   )r/   r-   rN   )rD   r/   r-   r   r	   r8   yr)   r)   r*   r9   q       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   r/   )r   r   r   r	   conj)r8   r(   xtcol0r)   r)   r*   test_complex_01w   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.
      Nr]   )r8   re   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[   r/   rD   r?   r   r   r	   r8   cre   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 rk   rl   rm   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 rk   rl   rm   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)rh   rD   r?   r/   r[   rl   )r8   rre   r)   r)   r*   test_scalar_04   s   
zTestToeplitz.test_scalar_04N)
rG   rH   rI   r9   rg   rj   ro   rp   rq   rs   r)   r)   r)   r*   rZ   o   s    rZ   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 )Nr[   rD   r?   r   )r?   r   r   r?   r-   rN   )rD   r?   r-   )r   r	   r^   r)   r)   r*   r9      r`   zTestHankel.test_basicNrG   rH   rI   r9   r)   r)   r)   r*   ru          ru   c                   @   rt   )TestCirculantc                 C   s,   t g d}t|g dg dg dg d S )Nr[   )r/   r?   rD   )rD   r/   r?   r\   )r   r	   r^   r)   r)   r*   r9      s    zTestCirculant.test_basicNrx   r)   r)   r)   r*   rz      ry   rz   c                   @   rt   )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 )Nr/   rD   r4   ra         r-   r2   )r/   r<   r/   r<   )r/   r/   r<   r<   )r/   r<   r<   r/   r   rN   )r   r	   floatassert_raises
ValueErrorr^   r)   r)   r*   r9      s   
zTestHadamard.test_basicNrx   r)   r)   r)   r*   r{          r{   c                   @   rJ   )
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 )Nr/   rD   rw   )r~   r   r   r7   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[         ?      ?)ra          @rb   )r           r   )r   r   r   )r   r   r	   )r8   rS   expectedr)   r)   r*   r9      s   zTestLeslie.test_basicNrG   rH   rI   r   r9   r)   r)   r)   r*   r          r   c                   @   rJ   )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 )Nr/   rD   )r   r-   rN   )r~   r   r   r7   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      ra   r   )r         @g      $      r   )r   r   r	   )r8   rn   r   r)   r)   r*   r9      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 )NrD   r/   r?   r-   rN      r[   )r/   r   r   r   r   r   r   )r   r/   r   r   r   r   r   )r   r   r/   rD   r   r   r   )r   r   r?   r-   r   r   r   )r   r   rN   r   r   r   r   )r   r   r   r   r/   rD   r?   )r   r   r	   r8   rd   r)   r)   r*   r9      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   r5   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 )Nr/                 ?r   )r   npr   r	   )r8   actual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 )Nr/   r/   r/   rD   r?   r-   rv   )r   r   r-   )r   r   shaper	   r8   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 )Nr/   )r~   r   r   r7   r)   r)   r*   test_bad_arg  s   zTestBlockDiag.test_bad_argc                 C   s"   t  }t|jd t|jd d S )NrD   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 )Nr/   r   rD   r?   r-   rN   r      r.   )r   r/   r   r   r=   )r   r   rD   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 )Nr/   r   rD   r?   r-   rN   r   r   int32r4   )r/   r   r   r   r   r   )r   r/   r   r   r   r   )r   r   r   r   r   r   )r   r   rD   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)rG   rH   rI   r9   r   r   r   r   r   r   r   r)   r)   r)   r*   r      s    	r   c                   @   rt   )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 )Nr/   rD   r?   r-   rB   )r/   r/   r/   rD   rD   rD   )r?   r?   r?   r-   r-   r-   rh      ri         (   !   ,   )r   r   r	   )r8   rS   m1m2r   r)   r)   r*   r9   ,  s   $
zTestKron.test_basicNrx   r)   r)   r)   r*   r   *  r   r   c                   @   rJ   )TestHelmertc                 C   sV   t ddD ]#}t|dd}t|}t||j|dd t|j||dd qd S )Nr/   r   Tfull-q=atol)rQ   r   r   r   r   dotT)r8   r'   HIdr)   r)   r*   test_orthogonality>  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 )NrD   r   Tr   r/   r   r   )rQ   r   r   r   r   r   r   r   )r8   r'   H_full	H_partialUCr)   r)   r*   test_subspaceE  s    "zTestHelmert.test_subspaceN)rG   rH   rI   r   r   r)   r)   r)   r*   r   <  s    r   c                   @   rt   )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)ra   r   UUUUUU?)r   r   r   )r   r   g?r?   r/   ra   r   )r   r   )r   r
   r   r	   r   r   )r8   h3h0r)   r)   r*   r9   Q  s   zTestHilbert.test_basicNrx   r)   r)   r)   r*   r   O  r   r   c                   @   rJ   )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 )*Nr/   Texactr-   i   rD   )	   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/  r8  l   $9@t)4   07$$Tv0 l7>?   "`-:M= (^@b)   6a;:BMb-Kx?|#   Z$M~ll )r   r   r  r  r  r&  r0  r9  rA  l    l>cTA@8HV-:v    h{d*U zaC<C     dYwMf RyUC#h.    @)]oz+%)r   r   r  r  r  r'  r1  r:  rB  rI  l   @e4jT  GU
    `i
t,@  Y,ch8    E@3I3T X=&@E   ~Si)r   r   r  r  r  r(  r2  r;  rC  rJ  rP  l    p}v `Xfz~A`si     86Jpsbv  $JY'ip     tk(0u1@<f)r   r   r  r  r  r)  r3  r<  rD  rK  rQ  rV  l   w2T.g]  %\n     PYHul ZR@
R   LwJ)r   r   r  r  r  r*  r4  r=  rE  rL  rR  rW  r[  l    L#(S.,# 2F=EgJ    @}l`L\k)r   r   r  r  r   r+  r5  r>  rF  rM  rS  rX  r\  r_  l   @i7Qt0" 8B3\f	   p1&S,)r   r   r  r  r!  r,  r6  r?  rG  rN  rT  rY  r]  r`  rb  l     @Y? }xl]R )r   r   r	  r  r"  r-  r7  r@  rH  rO  rU  rZ  r^  ra  rc  rd  l   /"}+
    r   )rtol)r   r	   r   r
   r   rP   r}   )r8   invh1invh2invh3invh4invh5invh17r)   r)   r*   r9   _  sd   zzTestInvHilbert.test_basicc                 C   sN   t ddD ]}t|}t|}t|}t||t|d| d| d qd S )Nr/   rh   gV瞯<)r   rf  )rQ   r   r   r$   r   r   r   )r8   r'   rS   rT   rn   r)   r)   r*   test_inverse  s   $zTestInvHilbert.test_inverseN)rG   rH   rI   r9   rm  r)   r)   r)   r*   r   ]  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 )
TestPascalr/   rD   r   r?   rB   r[   )r/   r?   r   r@   rA   )r/   rD   r/   r-   r2   )r/   rD   r?   r-   )r/   r?   r   rh   )r/   r-   rh   ri   r.   r0   )r/   rD   r/   r   )r/   r?   r?   r/   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   rp  )r	   r   r   r
   r8   r'   symlowr)   r)   r*   
check_case  s   zTestPascal.check_casec                 C   s$   | j D ]\}}}| ||| qd S r%   )casesru  rr  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   r8   pr)   r)   r*   test_big)  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"   rD   r<   rE   zn = 34err_msg#   r   ra   zn = 35)r   r   itemr{  r)   r)   r*   test_threshold-  s   "*zTestPascal.test_thresholdN)	rG   rH   rI   r   rv  ru  rw  r}  r  r)   r)   r)   r*   rn    sD    


rn  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)rp  r   zn=%d  kind=%r exact=%rr  )r   r   rP   objectr   r	   r   )r'   rp  r   ipr|  er)   r)   r*   check_invpascal:  s   z'test_invpascal.<locals>.check_invpascal)	symmetricro  rq  )r/   rD   rN      )TF)   r~  r  rx  Tr)   )r  kindsnsr'   rp  r   r)   r)   r*   test_invpascal8  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 )
NrD   ra   r|   r'   )scaler   sqrtn)r   r/   rD   r?   r-   rN   r   r/      )r   r   r
   r   r   r   )mr   rd   mxfxr)   r)   r*   test_dftU  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   r/   r   )r   r/   rD   r?   r-   rN   )r/   r   r/   rD   r?   r-   )rD   r/   r   r/   rD   r?   )r?   rD   r/   r   r/   rD   )r-   r?   rD   r/   r   r/   )rN   r-   r?   rD   r/   r   )r    r   sizer	   r   r   r   )r3   desr)   r)   r*   test_fiedlere  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   ra   r   r   )r   r   rb   )r   r/   rD   )ra   g      0g     U@g      fg     @Z@)g      @r   rb   ra   )r!   r   r  r	   r   r   r
   r   r~   r   r"   )fcr)   r)   r*   test_fiedler_companiont  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   linspace)r8   r'   cpxrd   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 integermatchr[   r   pytestr   r   r#   r7   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  r/   r-   r  r7   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  r7   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  r7   r)   r)   r*   test_bad_mode  r  z#TestConvolutionMatrix.test_bad_moder  FTna)r/   rD   r   nvr  )Nr   validsamec           
      C   sh   |  ||}|  ||}|d u rt||}t||}nt|||}t|||}|| }	t||	 d S r%   )r  r   convolver#   r
   )
r8   r  r  r  r  rS   vy1Ay2r)   r)   r*   test_against_numpy_convolve  s   z1TestConvolutionMatrix.test_against_numpy_convolveN)rG   rH   rI   __doc__r  r  r  r  r  r  markparametrizer  r)   r)   r)   r*   r    s    r  )Ar  numpyr   r   r   r   r   r   r   numpy.testingr   r	   r
   r   r   r~   	scipy.fftr   scipy.specialr   scipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   numpy.linalgr$   r+   r,   rK   rY   rZ   ru   rz   r{   r   r   r   r   r   r   r   rn  r  r  r  r  r  r)   r)   r)   r*   <module>   s>    \(/D )3