
    _Mh0                         d dl Z d dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!dS )    N)assert_equalassert_array_equal)assert_almost_equalassert_array_almost_equalxp_assert_close)
convolve1d)savgol_coeffssavgol_filter)_polyderc                 F    t          | |          }t          ||           d S )N)r   r   )pmexpecteddps       f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/signal/tests/test_savitzky_golay.pycheck_polyderr      s%    	!QBr8$$$$$    c                  f   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 ]E\  }}}t          t          j        |          j        |t          j        |          j                   Fd S )
N   r      )      r      r   r   )r   r      
   )r   nparrayT)casesr   r   r   s       r   test_polyderr       s:   
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bhqkkmQ(:(:(<====> >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   )r   arangeastypeintpolyvalpolyfit)window_length	polyorderpostuniths         r   alt_sg_coeffsr-   +   s]     {q 
	-  AHS!!D

2:ay11155AHr   c                  r   t          dd          } t          | dg           t          dd          } t          | g dd           t          d	d
          } t          | g dd           t          d	d
d          } t          | g dd           t          d	d
dd          } t          | g dd           d S )Nr   r         ?r   r   )        r   r   绽|=atolr      )r0   r   r   r   r   r)   )r0   r   r   r   r   dotr)   use)r0   r   r   r   r   )r	   r   )r,   s    r   test_sg_coeffs_trivialr9   =   s    aAAuaAA{{{////aAA(((u5555a"""AA(((u5555au---AA(((u555555r   c           
          d gt          t          |                     z   D ]@}t          | ||d          }t          | ||          }t	          ||dd| ||fz             Ad S )Nr6   r7   r5   r1   z(window_length = %d, order = %d, pos = %s)r3   err_msg)listranger	   r-   r   )r'   orderr)   h1h2s        r   compare_coeffs_to_altrA   O   s     vU=11222 ? ?=%SeDDD=%S999BU!K"/!<"=	? 	? 	? 	? 	?? ?r   c                  r    t          ddd          D ]$} t          |           D ]}t          | |           %d S )Nr      r   )r=   rA   )r'   r>   s     r   test_sg_coeffs_comparerD   [   sT    q!Q 8 8=)) 	8 	8E!-7777	88 8r   c                  4   d} d}|dz  }t          j        ddd          }|d         |d         z
  }d|d	z  z  |z
  }t          ||           }t          ||          }t	          |||          |||                     d
|dz  z  dz
  }t          || d|          }t          ||          }	t	          |	||          |||                     d|z  }
t          || d|          }t          ||          }t	          |||          |
||                     d S )Nr4   	   r   r      +   r         ?r   g      ?)derivdelta      @)r   linspacer	   r   r   )r(   r'   halflenxrK   yr,   y0dyy1d2yy2s               r   test_sg_coeffs_exactrV   b   sS   IMq G
Ar2AaD1Q4KE
 	a1fqAmY//A	Aq		BBwx'(!GWH,<*=>>> 
qAv	BmYauEEEA	Aq		BBwx'("WgX-=*>??? 'CmYauEEEA	Aq		BBwx'(#gwh.>*?@@@@@r   c            	      "   t          j        g d          } | dz  dz  }| dz  }t          j        | d          }t          |j                  D ]}t          dd|dd	          }t          |                    |          ||         d
           t          dd|ddd          }t          |                    |          ||         d
           t          dd|ddd          }t          |                    |          ||         d
           d S )N)g       r0          @      @g      @r   r4   rI   r   r   rX   r6   )r)   rK   r8   r1   r2   r   )r)   rK   r8   rJ   )r   r   	full_liker=   sizer	   r   r6   )irO   dxd2xr)   coeffs0coeffs1coeffs2s           r   test_sg_coeffs_derivrb      s    	+++,,A	Q
A	
QB
,q#

CQV}} > >1#SeDDDA#U;;;;1#Se1MMMA3e<<<<1#Se1MMMACu=====> >r   c                      t          ddd          } t          | t          j        d                     t          ddd          } t          | t          j        d                     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(   rJ   r   r4   r   N)r	   r   r   zeros)coeffss    r   !test_sg_coeffs_deriv_gt_polyorderrf      sb     1333Fvrx{{+++1333Fvrx{{+++++r   c                      t          dd          } t          | | d d d                    t          ddd          }t          ||d d d                     d S )N   rF   r   )rJ   )r	   r   )r_   r`   s     r   test_sg_coeffs_largerj      sc     B""Ggwttt}555B+++Gg"~66666r   c                  f   g d} | D ]8}t          |dd          }t          |t          j        |          |z             9d d | D ]}|dz  fdt	           dz   dz             D             d d d         }t          |dd          }t          ||           t          |dd          }t          ||           fd	t	           dz   dz             D             d d d         }t          |dd          }t          ||           t          |d
d          }t          ||           d S )N)r4   r   rC   r            r   c                 <    d| dz
  z  d|z  dz   |z  d|z  dz
  z  z  S )Nr   rI   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   rl   rI   r4   rp   )rq   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 rp   rp   ).0rq   rr   r   s     r   
<listcomp>z5test_sg_coeffs_even_window_length.<locals>.<listcomp>   6     : : :  /.q!44 : : :r   r   ri   c                 (    g | ]} |          S rp   rp   )rz   rq   rx   r   s     r   r{   z5test_sg_coeffs_even_window_length.<locals>.<listcomp>   r|   r   r   )r	   r   r   	ones_liker=   )window_lengthslengthh_p_dexpected_outputactual_outputrr   rx   r   s        @@@r   !test_sg_coeffs_even_window_lengthr      s   ...N  = =fa++r|E22V;<<<<3 3 3  
 ! 8 8AI: : : : :$)1"q&!a%$8$8: : ::>$B$@%fa33777%fa33777: : : : :$)1"q&!a%$8$8: : ::>$B$@%fa33777%fa3377778 8r   c                     t          j        dg          } t          | dd          }t          |dg           t          j        dg          } t          | ddd          }t	          |dgd	           t          j        dg          } t          | ddd
          }t	          |dgd	           t          j        dgdz            } t          | ddd          }t	          |g dd	           dS )z2 Test some trivial edge cases for savgol_filter().r/   r   r   rL   r   constantmodert   )decimalnearestwrap)r/   r/   r/   N)r   r   r
   r   r   rO   rP   s     r   test_sg_filter_trivialr      s    
#AaAASE
 	#AaAJ///AC5"----
#AaAI...AC5"----
#AaAF+++A???B777777r   c                     t          j        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r/   rX   r/   r   r   r   r   r/   UUUUUU?r/   mirror)竪?r   r   r   )r   r   r   )r   r   r
   r   r   s     r   test_sg_filter_basicr      s    
!!AaAJ///AA***+++aAH---AA222333aAF+++AA22233333r   c                     t          j        g dg dg          } t          j        g dg dg          }t          | ddd          }t          ||           t          | j        dddd	
          }t          ||j                   d S )Nr   )rX   rY   rX   r   )rX   gUUUUUU@rX   r   r   r   r   r   )r   axis)r   r   r
   r   r   )rO   r   rP   s      r   test_sg_filter_2dr      s    
///!//# 	$ 	$Ax,,,,,,. / /HaAJ///AAx   ac1ajq999AAxz"""""r   c            	         t          j        ddd          } | d         | d         z
  }t          j        | d| dz  z  | dz  | z
  g          }t          j        t          j        |           d| z  d| dz  z  d	z
  g          }t          j        t          j        |           t          j        | 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   rG   r   r   r   r   r   r/   r   ri   interp)r   r   g-q=r2   r   r   rJ   rK   )	r   rM   r   r~   
zeros_likerZ   r
   r   r   )	r*   rK   rO   r]   r^   r'   rP   rS   rU   s	            r   test_sg_filter_interp_edgesr      s'   
 	B2AaD1Q4KE
!a1f*q&1* 	 	A 
2<??q5qAv:#% 
& 
&B (BM!$$L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            	         t          j        ddd          } | d         | d         z
  }t          j        | |  g          }t          j        | dz  d| dz  z  dz   g          }t          j        | dz  d| dz  z  | dz  z   d| z  z
  g          }t          j        t          j        |           t          j        |            g          }t          j        d| z  d	| z  g          }t          j        d| dz  z  d	| dz  z  d| z  z   dz
  g          }t          j        |||g          }t          j        |||g          }	t	          |d
ddd|          }
t          |
|d           t	          |d
dddd|          }t          ||	d           t          j        |j        |j        |j        g          }t          j        |j        |j        |j        g          }	t	          |d
ddd|          }
t          |
|d           t	          |d
dddd|          }t          ||	d           |                    dd                                          }|	                    dd                                          }	t	          |d
ddd|          }
t          |
|d           t	          |d
dddd|          }t          ||	d           d S )Nr   r   rG   r   r   r   r   rI   r   r   ri   r   )r   r   rK   r1   r2   r   )	r   rM   r   r~   r
   r   r   swapaxescopy)r*   rK   x1x2x3dx1dx2dx3zdzrP   rR   s               r   test_sg_filter_interp_edges_3dr   1  s   
B2AaD1Q4KE	1qb'		B	161qAv:>*	+	+B	161qAv:Q.q89	:	:B
(BLOObl1oo%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'''' 	


1aA	Q					!	!BaAAHEBBBAAqu%%%%	q!QQXQe	L	L	LBB''''''r   c                     t          j        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)matchrh   NrF   r   )r'   r(   r   r      )r   onesr
   pytestraises
ValueError)rO   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'B??CC)"r   numpyr   numpy.testingr   r   scipy._lib._array_apir   r   r   scipy.ndimager   scipy.signalr	   r
   scipy.signal._savitzky_golayr   r   r    r-   r9   rA   rD   rV   rb   rf   rj   r   r   r   r   r   r   r   rp   r   r   <module>r      s                        % $ $ $ $ $ 5 5 5 5 5 5 5 5 1 1 1 1 1 1% % %
> > >*  $6 6 6$	? 	? 	?8 8 8A A A:> > > 
, 
, 
,7 7 7 8  8  8N8 8 8,
4 
4 
4	# 	# 	#.) .) .)b'( '( '(TO O O O Or   