a
    h,\                     @   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*Z8dS )+    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-   d/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/linalg/tests/test_special_matrices.py
test_basic   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   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+   r4   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+   cr4   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 r9   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 r9   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)r6   r$   r%   r#   r"   r:   )r+   rr4   r-   r-   r.   test_scalar_04;   s    
zTestToeplitz.test_scalar_04N)
__name__
__module____qualname__r/   r5   r8   r=   r>   r?   rA   r-   r-   r-   r.   r!      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"   r$   r%   r   )r%   r   r   r%   r'   r(   )r$   r%   r'   )r   r   r*   r-   r-   r.   r/   B   s    zTestHankel.test_basicNrB   rC   rD   r/   r-   r-   r-   r.   rE   A   s   rE   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"   )r#   r%   r$   )r$   r#   r%   r&   )r   r   r*   r-   r-   r.   r/   J   s    zTestCirculant.test_basicNrH   r-   r-   r-   r.   rI   I   s   rI   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 )Nr#   r$   dtyper0         r'   r#   r#   r#   r#   )r#   r#   rO   )r#   r#   rO   rO   )r#   rO   rO   r#   r   r(   )r   r   floatassert_raises
ValueErrorr*   r-   r-   r.   r/   Q   s    
zTestHadamard.test_basicNrH   r-   r-   r-   r.   rJ   O   s   rJ   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 )Nr#   r$   rG   )rQ   rR   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"         ?      ?)r0          @r1   )rV           rY   )rY   rW   rY   )r   r   r   )r+   aexpectedr-   r-   r.   r/   k   s    zTestLeslie.test_basicNrB   rC   rD   rU   r/   r-   r-   r-   r.   rS   c   s   rS   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 )Nr#   r$   )r   r'   r(   )rQ   rR   r   rT   r-   r-   r.   rU   u   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      r0   rY   )rX         @g      $      r_   )r   r   r   )r+   r<   r[   r-   r-   r.   r/   {   s    
zTestCompanion.test_basicNr\   r-   r-   r-   r.   r]   s   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 )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(   rb   r   r   r   )r   r   r   r   r#   r$   r%   )r   r   r   r+   r3   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   rL   rP   boolrc   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'   rF   )r   r   r'   )r   r   shaper   r+   rZ   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#   )rQ   rR   r   rT   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nbytesrl   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(   rb      r#   r   r   r   )r   r#   r   r   )r   r   r   r   )r   r   r$   r%   )r   r   r'   r(   )r   r   rb   rr   )r   r   rl   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(   rb   rr   Zint32rK   )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   rb   rr   r   r   )r   rg   Zzerosr   rl   r-   r-   r.   test_zerosized_matrix_arg   s    
z'TestBlockDiag.test_zerosized_matrix_argN)rB   rC   rD   r/   re   ri   rm   rn   rq   rt   ru   r-   r-   r-   r.   ra      s   	ra   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 )Nr#   r$   r%   r'   r#   r#   r#   )r#   r#   r#   r$   r$   r$   )r%   r%   r%   r'   r'   r'   r6      r7         (   !   ,   )r   r   r   )r+   rZ   m1m2r[   r-   r-   r.   r/      s    $
zTestKron.test_basicNrH   r-   r-   r-   r.   rv      s   rv   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 )Nr#   rr   Tfull-q=atol)ranger   rg   r   r
   dotT)r+   nHZIdr-   r-   r.   test_orthogonality   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 )Nr$   rr   Tr   r#   r   r   )r   r   r   rg   r   r   r
   r   )r+   r   ZH_fullZ	H_partialUCr-   r-   r.   test_subspace   s     zTestHelmert.test_subspaceN)rB   rC   rD   r   r   r-   r-   r-   r.   r      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)r0   rW   UUUUUU?)rW   r   rV   )r   rV   g?r%   r#   r0   r   )r   r   )r   r	   r   r   r   rk   )r+   Zh3Zh0r-   r-   r.   r/      s    zTestHilbert.test_basicNrH   r-   r-   r-   r.   r      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 )*Nr#   Texactr'   i   r$   )	   rz   )r      L)rz   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  r  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  r   r%  l   w2T.g]  %\n     PYHul ZR@
R   LwJ)r   r   r   r   r   r   r  r  r  r  r!  r&  r*  l    L#(S.,# 2F=EgJ    @}l`L\k)r   r   r   r   r   r   r  r  r  r  r"  r'  r+  r.  l   @i7Qt0" 8B3\f	   p1&S,)r   r   r   r   r   r   r  r  r  r  r#  r(  r,  r/  r1  l     @Y? }xl]R )r   r   r   r   r   r   r  r  r  r  r$  r)  r-  r0  r2  r3  l   /"}+
    r   )rtol)r   r   r   r	   r
   astyperP   )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#   r6   gV瞯<)r   r5  )r   r   r   r    r
   r   r   )r+   r   rZ   br<   r-   r-   r.   test_inverse  s
    zTestInvHilbert.test_inverseN)rB   rC   rD   r/   r8  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%   rw   r"   )r#   r%   rb   )r#   r   r   )r#   r#   r   )r#   r$   r#   r'   rN   )r#   r$   r%   r'   )r#   r%   rb   r6   )r#   r'   r6   r7   rs   )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   r;  )r   r   r   r	   r+   r   symlowr-   r-   r.   
check_case  s    zTestPascal.check_casec                 C   s$   | j D ]\}}}| ||| qd S N)casesr@  r=  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   )rO   rO   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$   rO   zn = 34err_msg#   rX   r0   zn = 35)r   r   itemrG  r-   r-   r.   test_threshold  s    "zTestPascal.test_thresholdN)	rB   rC   rD   r   rB  r@  rC  rI  rP  r-   r-   r-   r.   r9    sB   


r9  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)r;  r   zn=%d  kind=%r exact=%rrL  )r   r   r6  objectr   r   r   )r   r;  r   iprH  er-   r-   r.   check_invpascal  s    z'test_invpascal.<locals>.check_invpascal)Z	symmetricr:  r<  )r#   r$   r(      )TF)   rJ  rN  rD  Tr-   )rT  kindsnsr   r;  r   r-   r-   r.   test_invpascal  s    rY  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$   r0   rM   r   )scalerX   Zsqrtn)r   r#   r$   r%   r'   r(   r   r#      )r   r   r	   r   r   r   )mr[   r3   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     ^@rY   r#   rr   )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   rg   r   r   )fZdesr-   r-   r.   test_fiedler  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   r0   rX   r^   )r   rX   r1   )r   r#   r$   )r0   g      0g     U@g      fg     @Z@)g      @r_   r1   r0   )r   r   r^  r   rg   r   r	   r   rQ   rR   r   )fcr-   r-   r.   test_fiedler_companion  s    

*rb  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@rf   g      g@)rg   Zlinspace)r+   r   cpxr3   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 integermatchr"   r   pytestr   rR   r   rT   r-   r-   r.   
test_bad_n3  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-dimensionalrf  r#   r'   rh  rT   r-   r-   r.   test_bad_first_arg8  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\)rf  r'   rh  rT   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 ofrf  rj   r'   zinvalid argument)moderh  rT   r-   r-   r.   test_bad_modeB  s    z#TestConvolutionMatrix.test_bad_moderd  FTna)r#   r$   r   nvrm  )Nr   ZvalidZsamec           
      C   sh   |  ||}|  ||}|d u r8t||}t||}nt|||}t|||}|| }	t||	 d S rA  )re  rg   Zconvolver   r	   )
r+   rd  ro  rp  rm  rZ   vy1Ay2r-   r-   r.   test_against_numpy_convolveG  s    z1TestConvolutionMatrix.test_against_numpy_convolveN)rB   rC   rD   __doc__re  rj  rk  rl  rn  ri  markZparametrizeru  r-   r-   r-   r.   rc  '  s   rc  )9ri  numpyrg   r   r   r   r   r   Znumpy.testingr   r   r	   r
   r   rQ   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!   rE   rI   rJ   rS   r]   ra   rv   r   r   r   r9  rY  r]  r`  rb  rc  r-   r-   r-   r.   <module>   s4   P/D )3