
    Pi7                        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 d dlmZmZ d dlmZ e j        j        Ze j        j        Ze j                            dd          Zd	 Zd
 Zd Z ee          d             Zd Z ee          d             Z ee          d             Z ee          d             Z ee          d             Z edd           ee          d                         Z ee          d             Z ee          d             Z  ee          d             Z! ee          d             Z" ee          d             Z# ee          d             Z$ ee          d             Z%dS )    N)xp_assert_closexp_assert_equalxp_swapaxesis_torchmake_xp_test_case_xp_copy_to_numpy)
convolve1d)savgol_coeffssavgol_filter)_polyderz
dask.arrayzlinalg.lstsq is missing rcond)reasonc                 J    t          | ||          }t          ||           d S )Nxp)r   r   )pmexpectedr   dps        z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/scipy/signal/tests/test_savitzky_golay.pycheck_polyderr      s,    	!Q2			BB!!!!!    c                    dgddgfdgddgfg ddg dfg ddddgfg dddgfg dddgfg dg dgdg dg dgfg dg dgdddgd	dggfg dg dgddgd	ggfg dg dgddgdggfg
}|D ]f\  }}}|                      |          }|                      |          }t          |j        dk    r|j        n|||j        dk    r|j        n||            gd S )
N   r      )      r      r   r   )r   r      
   )asarrayr   ndimT)r   casesr   r   r   ppees          r   test_polyderr&      sq   
a!
a!	Ayyy!	A1v	As	As
))YYY	YYY			$:;
))YYY	aVb!W$56
))YYY	aS2$K0
))YYY	aS1#J/E   
 
1hZZ]]ZZ!!GqLLBDDbGaKKBDDR		
 	
 	
 	

 
r   c                     || dz  }t          j        |           }||k                        t                    }t          j        t          j        |||          |          }|                    |          S )zThis is an alternative implementation of the SG coefficients.

    It uses numpy.polyfit and numpy.polyval. The results should be
    equivalent to those of savgol_coeffs(), but this implementation
    is slower.

    window_length should be odd.

    Nr   )nparangeastypeintpolyvalpolyfitr    )window_length	polyorderposr   tuniths          r   alt_sg_coeffsr4   7   sh     {q 
	-  AHS!!D

2:ay11155A::a==r   c                    t          dd|           }t          ||                     dg| j                             t          dd|           }t          ||                     g d| j                  d	
           t          dd|           }t          ||                     g d| j                  d	
           t          ddd|           }t          ||                     g d| j                  d	
           t          dddd|           }t          ||                     g d| j                  d	
           d S )Nr   r   r         ?dtyper   r   )        r   r   绽|=atolr      )r9   r   r   r   r   r0   r   )r9   r   r   r   r   dotr0   user   )r9   r   r   r   r   )r
   r   r    float64)r   r3   s     r   test_sg_coeffs_trivialrC   I   sM    	ar"""AArzz3%rzz::;;;ar"""AArzz+++RZz@@uMMMMar"""AArzz"3"3"32:zFFUSSSSab)))AArzz"3"3"32:zFFUSSSSau444AArzz"3"3"32:zFFUSSSSSSr   c                     d gt          t          |                     z   D ]E}t          | ||d|          }t          | |||          }t	          ||dd|  d| d|            Fd S )	Nr?   r@   r>   g|=zwindow_length = z
, order = z, pos = )r<   err_msg)listranger
   r4   r   )r.   orderr   r0   h1h2s         r   compare_coeffs_to_altrK   \   s     vU=11222 
 
=%SeKKK=%SR@@@T}TTTTsTT	
 	
 	
 	
 	

 
r   c                 v    t          ddd          D ]&}t          |          D ]}t          |||            'd S )Nr      r   r   )rG   rK   )r   r.   rH   s      r   test_sg_coeffs_comparerN   i   s[     q!Q ? ?=)) 	? 	?E!-2>>>>>	?? ?r   c                 L   d}d}|dz  }|                      ddd          }|d         |d         z
  }d|d	z  z  |z
  }t          ||| 
          }|                     t          t	          |          t	          |                              }t          |||          |||                     d|dz  z  dz
  }	t          ||d||           }|                     t          t	          |          t	          |                              }
t          |
||          |	||                     d|z  }t          ||d||           }|                     t          t	          |          t	          |                              }t          |||          |||                     d S )Nr=   	   r   r      +   r         ?r   r   g      ?)derivdeltar         @)linspacer
   r    r	   r   r   )r   r/   r.   halflenxrU   yr3   y0dyy1d2yy2s                r   test_sg_coeffs_exactr`   q   s   IMq G
Ar2AaD1Q4KE
 	a1fqAmY2666A	J0335Fq5I5IJJ	K	KBBwx'(!GWH,<*=>>> 
qAv	BmYauLLLA	J0335Fq5I5IJJ	K	KBBwx'("WgX-=*>??? 'CmYauLLLA	J0335Fq5I5IJJ	K	KBBwx'(#gwh.>*?@@@@@r   c           
         |                      g d| j                  }|dz  dz  }|dz  }|                     |d          }t          |j        d                   D ]}t          dd|d	d
|           }t          ||z  ||         d           t          dd|d	d
d|           }t          ||z  ||         d           t          dd|d	d
d|           }t          ||z  ||         d           d S )N)g       r9          @      @g      @r7   r   r=   rS   r   r   r   rb   r?   )r0   rU   rA   r   r:   r;   r   )r0   rU   rA   rT   r   )r    rB   	full_likerG   shaper
   r   )	r   irY   dxd2xr0   coeffs0coeffs1coeffs2s	            r   test_sg_coeffs_derivrl      s     	

---RZ
@@A	Q
A	
QB
,,q#

CQWQZ   < <1#SeKKK!QsV%88881#Se1QSTTT!RW599991#Se1QSTTT!c#hU;;;;;< <r   c                     t          ddd|           }t          ||                     d| j                             t          ddd|           }t          ||                     d| j                             d	S )
z
    If deriv > polyorder, the coefficients should be all 0.
    This is a regression test for a bug where, e.g.,
        savgol_coeffs(5, polyorder=1, deriv=2)
    raised an error.
    r   r   r   )r/   rT   r   r7   r   r=   r   N)r
   r   zerosrB   )r   coeffss     r   !test_sg_coeffs_deriv_gt_polyorderrp      sz     1r:::FFBHHQbjH99:::1r:::FFBHHQbjH99:::::r   torchz4torch loses precision (worse with f32 default dtype)c                 *   t          dd|           }t          ||                     |          t          |           rdnd           t          ddd|           }t          ||                     |           t          |           rd	nd           d S )
N   rP   r   gMb@?gTqs*>r;   r   )rT   r   g~jt?)r
   r   flipr   )r   ri   rj   s      r   test_sg_coeffs_largeru      s     Bb)))G!!(H&    Br222G"'''"""8B<<)KV     r   c                    g d}|D ];}t          |dd|           }t          ||                     |          |z             <d d |D ]&}|dz  fdt           dz   dz             D             d d d	         }|                     || j        
          }t          |dd|           }t          ||           t          |dd|           }t          ||           fdt           dz   dz             D             d d d	         }|                     || j        
          }t          |dd|           }t          ||           t          |dd|           }t          ||           (d S )N)r=   r   rM   r            r   r   c                 <    d| dz
  z  d|z  dz   |z  d|z  dz
  z  z  S )Nr   rS   r   r    )kr   s     r   h_p_d_closed_form_1z>test_sg_coeffs_even_window_length.<locals>.h_p_d_closed_form_1   s.    !c'{QqS1WaK1q122r   c                     dd|dz  z  dz   d| dz
  dz  z  z   z  }dd|z  dz   z  |dz   z  |z  |dz
  z  d|z  dz
  z  }||z  S )N   r   r   rw   rS   r=   r{   )r|   r   numerdenoms       r   h_p_d_closed_form_2z>test_sg_coeffs_even_window_length.<locals>.h_p_d_closed_form_2   sh    Bq!tGaK"a#g\/121Q37QU#A%q1u-qsQw7U{r   r   c                 (    g | ]} |          S r{   r{   ).0r|   r}   r   s     r   
<listcomp>z5test_sg_coeffs_even_window_length.<locals>.<listcomp>   6     : : :  /.q!44 : : :r   r   r7   c                 (    g | ]} |          S r{   r{   )r   r|   r   r   s     r   r   z5test_sg_coeffs_even_window_length.<locals>.<listcomp>   r   r   r   )r
   r   	ones_likerG   r    rB   )	r   window_lengthslengthh_p_dexpected_outputactual_outputr}   r   r   s	         @@@r   !test_sg_coeffs_even_window_lengthr      s    /..N  = =far222r||E22V;<<<<3 3 3  
 ! 8 8AI: : : : :$)1"q&!a%$8$8: : ::>$B$@**_BJ*GG%far:::777%far:::777: : : : :$)1"q&!a%$8$8: : ::>$B$@**_BJ*GG%far:::777%far:::7777!8 8r   c                 ~   |                      dg          }t          |dd          }t          ||                      dg                     |                      dg          }t          |ddd          }t          ||                      dg          d	           |                      dg          }t          |ddd
          }t          ||                      dg          d	           |                      dgdz            }t          |ddd          }t          ||                      g d          d	           dS )z2 Test some trivial edge cases for savgol_filter().r6   r   r   rV   r   constantmodeg [n<r;   nearestwrap)r6   r6   r6   N)r    r   r   r   r   rY   rZ   s      r   test_sg_filter_trivialr      s8    	

C5AaAAArzz3%(()))
 	

C5AaAJ///AArzz3%((w7777


C5AaAI...AArzz3%((w7777


C519AaAF+++AArzz///22AAAAAAr   c                    |                      g d          }t          |ddd          }t          ||                      g d                     t          |ddd          }t          ||                      g d                     t          |ddd	          }t          ||                      g d
                     d S )Nr6   rb   r6   r   r   r   r   r6   UUUUUU?r6   mirror)竪?r   r   r   )r   r   r   )r    r   r   r   s      r   test_sg_filter_basicr     s     	

???##AaAJ///AArzz"5"5"566777aAH---AArzz"="="=>>???aAF+++AArzz"="="=>>?????r   c                    |                      g dg dg          }|                      g dg dg          }t          |ddd          }t          ||           t          |j        dddd	
          }t          ||j                   d S )Nr   )rb   rc   rb   r   )rb   gUUUUUU@rb   r   r   r   r   r   )r   axis)r    r   r   r"   )r   rY   r   rZ   s       r   test_sg_filter_2dr     s    


OOO#OO% 	& 	&Azz......0 1 1HaAJ///AAx   ac1ajq999AAxz"""""r   c           	         |                      ddd| j                  }|d         |d         z
  }|                     |d|dz  z  |dz  |z
  g          }|                     |                     |          d	|z  d|dz  z  d
z
  g          }|                     |                     |          |                     |d	          d	|z  g          }d}t          ||ddd          }t          ||d           t          ||dddd|          }t          ||d           t          ||dddd|          }	t          |	|d           |j        }|j        }|j        }t          ||ddd          }t          ||d           t          ||dddd|          }t          ||d           t          ||dddd|          }	t          |	|d           d S )Nr   rQ   r7   r   r   r   r   r   r6   r   r   interp)r   r   g-q=r;   r   r   rT   rU   )	rW   rB   stackr   
zeros_likerd   r   r   r"   )
r   r1   rU   rY   rg   rh   r.   rZ   r]   r_   s
             r   test_sg_filter_interp_edgesr     s;    	B2RZ00AaD1Q4KE
!a1f*q&1* 	 	A 
2<<??q5qAv:#% 
& 
&B ((BMM!$$LLA&&E  C MaBBBAAqu%%%%	q-(e
- 
- 
-BB''''	q-(e
- 
- 
-BB%(((( 	
A	B
%CaAAAAAqu%%%%	q-e
- 
- 
-BB''''	q-e
- 
- 
-BB%((((((r   c           	         |                      ddd          }|d         |d         z
  }|                     || g          }|                     |dz  d|dz  z  dz   g          }|                     |dz  d|dz  z  |dz  z   d|z  z
  g          }|                     |                     |          |                     |           g          }|                     d|z  d	|z  g          }|                     d|dz  z  d	|dz  z  d|z  z   dz
  g          }|                     |||g          }	|                     |||g          }
t          |	d
ddd|          }t	          ||	d           t          |	d
dddd|          }t	          ||
d           |                     |j        |j        |j        g          }	|                     |j        |j        |j        g          }
t          |	d
ddd|          }t	          ||	d           t          |	d
dddd|          }t	          ||
d           |                     t          |	dd|           d          }	|                     t          |
dd|           d          }
t          |	d
ddd|          }t	          ||	d           t          |	d
dddd|          }t	          ||
d           d S )Nr   r   rQ   r   r   r   r   rS   r   r   r   r   )r   r   rU   r:   r;   r   r   T)copy)rW   r   r   r   r   r"   r    r   )r   r1   rU   x1x2x3dx1dx2dx3zdzrZ   r\   s                r   test_sg_filter_interp_edges_3dr   Q  s    	B2AaD1Q4KE	1qb'		B	161qAv:>*	+	+B	161qAv:Q.q89	:	:B
((BLLOObll1oo%56
7
7C
((AE1q5>
"
"C
((AQJAF
QU 2S 89
:
:C 	"b"A	3S/	"	"BaABXUCCCAAqu%%%%	q!QRhau	M	M	MBB'''' 	"$bd#$$A	35#%'	(	(BaAAHEBBBAAqu%%%%	q!QQXQe	L	L	LBB'''' 	

;q!Q2...T
::A	KAqR000t	<	<BaAAHEBBBAAqu%%%%	q!QQXQe	L	L	LBB''''''r   c                    |                      d          }t          |ddd           t          j        t          d          5  t          |ddd           d	d	d	           n# 1 swxY w Y   t          |d
ddd           t          j        t          d          5  t          |dddd           d	d	d	           d	S # 1 swxY w Y   d	S )z=Tests that the window_length check is using the correct axis.)r            r   r   )r.   r/   r   zwindow_length must be less than)matchrs   NrP   r   )r.   r/   r   r      )onesr   pytestraises
ValueError)r   rY   s     r   %test_sg_filter_valid_window_length_3dr   |  s    	A!2BBBB	z)J	K	K	K G GarQXFFFFG G G G G G G G G G G G G G G !1IIII	z)J	K	K	K O OarQQXNNNNO O O O O O O O O O O O O O O O O Os$   A$$A(+A(C  CC)&r   numpyr(   scipy._lib._array_apir   r   r   r   r   r   scipy.ndimager	   scipy.signalr
   r   scipy.signal._savitzky_golayr   markskip_xp_backendsxfail_xp_backends
pytestmarkr   r&   r4   rC   rK   rN   r`   rl   rp   ru   r   r   r   r   r   r   r   r{   r   r   <module>r      s\                      
 % $ $ $ $ $ 5 5 5 5 5 5 5 5 1 1 1 1 1 1;/ K1 [))8 *  

" " "

 
 
8  $ =!!T T "!T$

 

 

 =!!? ? "!? =!!A A "!A: =!!< < "!<  =!!
; 
; "!
; J   =!!  "! $ =!!"8 "8 "!"8P =!!B B "!B, =!!
@ 
@ "!
@ =!!	# 	# "!	# =!!.) .) "!.)b =!!'( '( "!'(T =!!O O "!O O Or   