o
    ia                     @   s  d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	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% d dl&m'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Z.G dd dZ/G dd dZ0G dd dZ1G dd dZ2G dd  d Z3d!d" Z4d#d$ Z5d%d& Z6d'd( Z7G d)d* d*Z8e j9j:e j9;d+e j9<d,ed-fed-fe%d.fe"d-fe#d-feed/ffeed/ffgd0d1 Z=dS )2    N)arange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kron
block_diaghelmerthilbert
invhilbertpascal	invpascalfiedlerfiedler_companioneigvalsconvolution_matrix)condc                   @   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$   r#   r$   r%   r$   r#   )r#         )r$   r#   r'   r   r   selfy r-   b/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/linalg/tests/test_special_matrices.py
test_basic       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   Zconj)r+   data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.
      Nr)   )r+   r5   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#   r$   r%   r   r   r   r+   cr5   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 r:   r;   r<   r-   r-   r.   test_scalar_021   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 r:   r;   r<   r-   r-   r.   test_scalar_036   s   zTestToeplitz.test_scalar_03c                 C   s*   t g d}td|}t|g dg d S )N)r7   r$   r%   r#   r"   r;   )r+   rr5   r-   r-   r.   test_scalar_04;   s   
zTestToeplitz.test_scalar_04N)
__name__
__module____qualname__r/   r6   r9   r>   r?   r@   rB   r-   r-   r-   r.   r!      s    r!   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"   r$   r%   r   )r%   r   r   r%   r'   r(   )r$   r%   r'   )r   r   r*   r-   r-   r.   r/   B   r0   zTestHankel.test_basicNrC   rD   rE   r/   r-   r-   r-   r.   rG   A       rG   c                   @   rF   )TestCirculantc                 C   s,   t g d}t|g dg dg dg d S )Nr"   )r#   r%   r$   )r$   r#   r%   r&   )r   r   r*   r-   r-   r.   r/   J   s    zTestCirculant.test_basicNrJ   r-   r-   r-   r.   rL   I   rK   rL   c                   @   rF   )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#   r$   dtyper1         r'   r#   r#   r#   r#   )r#   r#   rR   )r#   r#   rR   rR   )r#   rR   rR   r#   r   r(   )r   r   floatassert_raises
ValueErrorr*   r-   r-   r.   r/   Q   s   
zTestHadamard.test_basicNrJ   r-   r-   r-   r.   rM   O       rM   c                   @      e Zd Zdd Zdd ZdS )
TestLesliec                 C   sH   t ttddgddggg d t ttddgddg t ttdgg  d S )Nr#   r$   rI   )rT   rU   r   r+   r-   r-   r.   test_bad_shapese   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"         ?      ?r1          @r2   )r[           r_   )r_   r\   r_   )r   r   r   )r+   aexpectedr-   r-   r.   r/   j   s   zTestLeslie.test_basicNrC   rD   rE   rZ   r/   r-   r-   r-   r.   rX   c       rX   c                   @   rW   )TestCompanionc                 C   s.   t ttg d t ttdg t ttg  d S )N)r   r'   r(   r#   )rT   rU   r   rY   r-   r-   r.   rZ   t   s   zTestCompanion.test_bad_shapesc                 C   s   t g d}tddgddgg}t|| t g d}tddgddgg}t|| t d	d
g}tddgddgfddgddgfg}t|| d S )Nr"          g      r1   r_   )r^         @g      $      rf   r]   )g      @rf   g      @g            )r   r   r   )r+   r=   ra   r-   r-   r.   r/   y   s0   

zTestCompanion.test_basicNrb   r-   r-   r-   r.   rd   r   rc   rd   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 )Nr$   r#   r%   r'   r(      r"   )r#   r   r   r   r   r   r   )r   r#   r   r   r   r   r   )r   r   r#   r$   r   r   r   )r   r   r%   r'   r   r   r   )r   r   r(   rj   r   r   r   )r   r   r   r   r#   r$   r%   )r   r   r   r+   r4   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   rO   rS   boolrk   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   )r+   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 )Nr#   r#   r#   r$   r%   r'   rH   )r   r   r'   )r   r   shaper   r+   r`   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#   )rT   rU   r   rY   r-   r-   r.   test_bad_arg   s   zTestBlockDiag.test_bad_argc                 C   s"   t  }t|jd t|jd d S )Nr$   r   )r   r   ndimnbytesrt   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   r$   r%   r'   r(   rj      r#   r   r   r   )r   r#   r   r   )r   r   r   r   )r   r   r$   r%   )r   r   r'   r(   )r   r   rj   rz   )r   r   rt   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   r$   r%   r'   r(   rj   rz   Zint32rN   )r#   r   r   r   r   r   )r   r#   r   r   r   r   )r   r   r   r   r   r   )r   r   r$   r%   r   r   )r   r   r'   r(   r   r   )r   r   rj   rz   r   r   )r   ro   Zzerosr   rt   r-   r-   r.   test_zerosized_matrix_arg   s   

z'TestBlockDiag.test_zerosized_matrix_argN)rC   rD   rE   r/   rm   rq   ru   rv   ry   r|   r}   r-   r-   r-   r.   ri      s    	ri   c                   @   sD   e Zd Zejjdd Zejddd Zejddd Z	dS )	TestKronc                 C   sZ   t jdd ttddgddggtg dg W d    d S 1 s&w   Y  d S )Nz`kron`matchr#   r$   r%   r'   r#   r#   r#   )pytestZdeprecated_callr   ro   r   rY   r-   r-   r.   test_dep   s   *"zTestKron.test_depzignore::DeprecationWarningc                 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#   r$   r%   r'   r   )r#   r#   r#   r$   r$   r$   )r%   r%   r%   r'   r'   r'   r7      r8         (   !   ,   )r   r   r   )r+   r`   m1m2ra   r-   r-   r.   r/      s   $
zTestKron.test_basicc                 C   s2   t d}t d}t||}t|t d d S )N)r   r$   )r#   r%   )r   rj   )ro   emptyr   r
   )r+   r   r   r`   r-   r-   r.   
test_empty   s   


zTestKron.test_emptyN)
rC   rD   rE   r   markthread_unsafer   filterwarningsr/   r   r-   r-   r-   r.   r~      s    



r~   c                   @   rW   )TestHelmertc                 C   sV   t ddD ]#}t|dd}t|}t||j|dd t|j||dd qd S )Nr#   rz   Tfull-q=atol)ranger   ro   r   r
   dotT)r+   nHZ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 )Nr$   rz   Tr   r#   r   r   )r   r   r   ro   r   r   r
   r   )r+   r   ZH_fullZ	H_partialUCr-   r-   r.   test_subspace   s    "zTestHelmert.test_subspaceN)rC   rD   rE   r   r   r-   r-   r-   r.   r      s    r   c                   @   rF   )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)r1   r\   UUUUUU?)r\   r   r[   )r   r[   g?r%   r#   r1   r   )r   r   )r   r	   r   r   r   rs   )r+   Zh3Zh0r-   r-   r.   r/     s   zTestHilbert.test_basicNrJ   r-   r-   r-   r.   r     rV   r   c                   @   rW   )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   r$   )	   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  r(   )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  r  l   $9@t)4   07$$Tv0 l7>?   "`-:M= (^@b)   6a;:BMb-Kx?|#   Z$M~ll )r   r   r   r   r   r  r  r  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  r  r"  r)  l   @e4jT  GU
    `i
t,@  Y,ch8    E@3I3T X=&@E   ~Si)r   r   r   r   r   r  r  r  r#  r*  r0  l    p}v `Xfz~A`si     86Jpsbv  $JY'ip     tk(0u1@<f)r   r   r   r   r   r	  r  r  r$  r+  r1  r6  l   w2T.g]  %\n     PYHul ZR@
R   LwJ)r   r   r   r   r   r
  r  r  r%  r,  r2  r7  r;  l    L#(S.,# 2F=EgJ    @}l`L\k)r   r   r   r   r   r  r  r  r&  r-  r3  r8  r<  r?  l   @i7Qt0" 8B3\f	   p1&S,)r   r   r   r   r  r  r  r  r'  r.  r4  r9  r=  r@  rB  l     @Y? }xl]R )r   r   r   r   r  r  r  r   r(  r/  r5  r:  r>  rA  rC  rD  l   /"}+
    r   )rtol)r   r   r   r	   r
   astyperS   )r+   Zinvh1Zinvh2Zinvh3Zinvh4Zinvh5Zinvh17r-   r-   r.   r/     sd   zzTestInvHilbert.test_basicc                 C   sN   t ddD ]}t|}t|}t|}t||t|d| d| d qd S )Nr#   r7   gV瞯<)r   rF  )r   r   r   r    r
   r   r   )r+   r   r`   br=   r-   r-   r.   test_inverse  s   $zTestInvHilbert.test_inverseN)rC   rD   rE   r/   rI  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#   r$   r   r%   r   r"   )r#   r%   rj   )r#   r   r   )r#   r#   r   )r#   r$   r#   r'   rQ   )r#   r$   r%   r'   )r#   r%   rj   r7   )r#   r'   r7   r8   r{   )r#   r#   r   r   )r#   r$   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   rL  )r   r   r   r	   r+   r   Zsymlowr-   r-   r.   
check_case  s   zTestPascal.check_casec                 C   s$   | j D ]\}}}| ||| qd S N)casesrP  rN  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   )rR   rR   b   1   Tr   )r   r   r+   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"   r$   rR   zn = 34err_msg#   r^   r1   zn = 35)r   r   itemrW  r-   r-   r.   test_threshold  s   "*zTestPascal.test_thresholdN)	rC   rD   rE   r   rR  rP  rS  rY  r`  r-   r-   r-   r.   rJ    sD    


rJ  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)rL  r   zn=%d  kind=%r exact=%rr\  )r   r   rG  objectr   r   r   )r   rL  r   iprX  er-   r-   r.   check_invpascal  s   z'test_invpascal.<locals>.check_invpascal)Z	symmetricrK  rM  )r#   r$   r(      )TF)   rZ  r^  rT  Tr-   )rd  kindsnsr   rL  r   r-   r-   r.   test_invpascal  s   ri  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 )
Nr$   r1   rP   r   )scaler^   Zsqrtn)r   r#   r$   r%   r'   r(   r   r#      )r   r   r	   r   r   r   )mra   r4   ZmxZfxr-   r-   r.   test_dft  s   

rm  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#   rz   )r   r#   r$   r%   r'   r(   )r#   r   r#   r$   r%   r'   )r$   r#   r   r#   r$   r%   )r%   r$   r#   r   r#   r$   )r'   r%   r$   r#   r   r#   )r(   r'   r%   r$   r#   r   )r   r   sizer   ro   r   r   )fZdesr-   r-   r.   test_fiedler  s   

rp  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   r1   r^   re   )r   r^   r2   )r   r#   r$   )r1   g      0g     U@g      fg     @Z@)g      @rf   r2   r1   )r   r   rn  r   ro   r   r	   r   rT   rU   r   )fcr-   r-   r.   test_fiedler_companion+  s   

rr  c                   @   s   e Zd Z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.rg   g@rn   rh   g@)ro   Zlinspace)r+   r   cpxr4   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   r"   r   r   r   rU   r   rY   r-   r-   r.   
test_bad_nG     "z TestConvolutionMatrix.test_bad_nc                 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'   rv  rY   r-   r-   r.   test_empty_first_argL  s   "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   rr   r'   zinvalid argument)moderv  rY   r-   r-   r.   test_bad_modeQ  rx  z#TestConvolutionMatrix.test_bad_modert  FTna)r#   r$   r   nvrz  )Nr   validsamec           
      C   sh   |  ||}|  ||}|d u rt||}t||}nt|||}t|||}|| }	t||	 d S rQ  )ru  ro   Zconvolver   r	   )
r+   rt  r|  r}  rz  r`   vy1Ay2r-   r-   r.   test_against_numpy_convolveV  s   z1TestConvolutionMatrix.test_against_numpy_convolveN)rC   rD   rE   __doc__ru  rw  ry  r{  r   r   parametrizer  r-   r-   r-   r.   rs  ;  s    rs  r(   zf, argsr-   )r(   r  r   c           	         s   t jd}d}d}|||f }thv r;d}tjt|d |g R   W d    d S 1 s4w   Y  d S |g R  }t  fdd|d|D }||j	d d |j	d	d   }t
|| d S )
Nl   ! )r$   r%   r7   z:Beginning in SciPy 1.17, multidimensional input will be...r   c                    s   g | ]
}|g R  qS r-   r-   ).0r`   argsro  r-   r.   
<listcomp>~  s    ztest_batch.<locals>.<listcomp>rR   r[  )ro   randomZdefault_rngr   r   ZwarnsFutureWarningZasarrayZreshapers   r
   )	ro  r  rngZbatch_shaperl  r  messageresrefr-   r  r.   
test_batchg  s    

""r  )>r   numpyro   r   r   r   r   r   Znumpy.testingr   r   r	   r
   r   rT   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   Znumpy.linalgr    r!   rG   rL   rM   rX   rd   ri   r~   r   r   r   rJ  ri  rm  rp  rr  rs  r   r   Z	fail_slowr  r  r-   r-   r-   r.   <module>   sL    P/D )3,
