+
    /i7                        ^ RI t ^ RIt^ RIHtHtHtHtHtH	t	 ^ RI
Ht ^ RIHtHt ^ RIHt ] P"                  P$                  t] P"                  P&                  t] P"                  P%                  RRR7      tR	 tR
 tR t]! ]4      R 4       tR t]! ]4      R 4       t]! ]4      R 4       t]! ]4      R 4       t]! ]4      R 4       t]! RRR7      ]! ]4      R 4       4       t]! ]4      R 4       t]! ]4      R 4       t ]! ]4      R 4       t!]! ]4      R 4       t"]! ]4      R 4       t#]! ]4      R 4       t$]! ]4      R 4       t%R# )    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                 6    \        WVR 7      p\        WB4       R# )xpN)r   r   )pmexpectedr   dps   &&&& d/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/signal/tests/test_savitzky_golay.pycheck_polyderr      s    	!2	BB!    c                    ^.^ ^.3^.^^ .3. RO^ . RO3. RO^^^.3. RO^^.3. RO^^ .3. RO. RO.^ . RO. RO.3. RO. RO.^^^.^
^..3. RO. RO.^^.^
..3. RO. RO.^^ .^ ..3.
pV Fp  w  r#pV P                  V4      pV P                  V4      p\        VP                  ^8X  d   VP                  MTTVP                  ^8X  d   VP                  MTV 4       Kr  	  R# )   N)         )r         )asarrayr   ndimT)r   casesr   r   r   ppees   &      r   test_polyderr%      s   
a!
a!	Ay!	A1v	As	As
Y	Y	$:;
Y	aVb!W$56
Y	aS2$K0
Y	aS1#J/E  hZZ]ZZ!GGqLBDDbGGaKBDDR		
  r   c                    Vf
   V ^,          p\         P                  ! V 4      pWB8H  P                  \        4      p\         P                  ! \         P
                  ! WEV4      V4      pVP                  V4      # )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.

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


2::ay115A::a=r   c                 6   \        ^^ V R7      p\        WP                  R.V P                  R7      4       \        ^^V R7      p\        WP                  . R
OV P                  R7      RR7       \        ^^V R7      p\        WP                  . ROV P                  R7      RR7       \        ^^^V R7      p\        WP                  . ROV P                  R7      RR7       \        ^^^RV R7      p\        WP                  . ROV P                  R7      RR7       R	# )r   r         ?dtype绽|=atolr/   r   dotr/   user   N)        r   r   )r?   r   r   r   r   )r?   r   r   r   r   )r?   r   r   r   r   )r
   r   r   float64)r   r2   s   & r   test_sg_coeffs_trivialrA   I   s     	ar"AAzz3%rzzz:;ar"AAzz+RZZz@uMar"AAzz"32::zFUSab)AAzz"32::zFUSau4AAzz"32::zFUSr   c                     R .\        \        V 4      4      ,            F6  p\        WVRVR7      p\        WW2R7      p\	        WERRV  RV RV 2R7       K8  	  R # )	Nr<   r=   r;   g|=zwindow_length = z
, order = z, pos = )r:   err_msg)listranger
   r3   r   )r-   orderr   r/   h1h2s   &&&   r   compare_coeffs_to_altrI   \   sa     vU=1222=SeK=S@&}oZwhseT	
 3r   c                 l    \        ^^^4       F"  p\        V4       F  p\        WV R7       K  	  K$  	  R# )r   r   N)rE   rI   )r   r-   rF   s   &  r   test_sg_coeffs_comparerK   i   s/     q!Q=)E!-2> * (r   c                    ^p^	pV^,          pV P                  ^ ^^+4      pV^,          V^ ,          ,
          pRV^,          ,          V,
          p\        W!V R7      pV P                  \        \	        V4      \	        V4      4      4      p\        WV)  WcV)  4       RV^,          ,          ^,
          p	\        W!^WPR7      pV P                  \        \	        V4      \	        V4      4      4      p
\        WV)  WV)  4       RV,          p\        W!^WPR7      pV P                  \        \	        V4      \	        V4      4      4      p\        WV)  WV)  4       R# )         ?r   g      ?)derivdeltar         @N)linspacer
   r   r	   r   r   )r   r.   r-   halflenxrP   yr2   y0dyy1d2yy2s   &            r   test_sg_coeffs_exactr[   q   s?   IMq G
Ar2AaD1Q4KE
 	a1fqAm26A	J035Fq5IJ	KBBx(!WH*=> 
qAv	BmauLA	J035Fq5IJ	KBBx("gX*>? 'CmauLA	J035Fq5IJ	KBBx(#wh*?@r   c                    V P                  . R	OV P                  R7      pV^,          ^,          pV^,          pV P                  VR4      p\        VP                  ^ ,          4       F  p\        ^^VR RV R7      p\        Wb,          W%,          RR7       \        ^^VR R^V R7      p\        Wr,          W5,          RR7       \        ^^VR R^V R7      p\        W,          WE,          RR7       K  	  R# )
       @r6   rN   r<   )r/   rP   r>   r   r8   r9   )r/   rP   r>   rO   r   N)g       r?   r]         @g      @)r   r@   	full_likerE   shaper
   r   )	r   irT   dxd2xr/   coeffs0coeffs1coeffs2s	   &        r   test_sg_coeffs_derivrg      s     	

-RZZ
@A	Q
A	
QB
,,q#
CQWWQZ 1#SeKQV%81#Se1QSTRW591#Se1QSTchU; !r   c                    \        ^^^V R7      p\        WP                  ^V P                  R7      4       \        ^^^V R7      p\        WP                  ^V P                  R7      4       R# )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.   rO   r   r6   N)r
   r   zerosr@   )r   coeffss   & r   !test_sg_coeffs_deriv_gt_polyorderrk      sV     1r:FFHHQbjjH9:1r:FFHHQbjjH9:r   torchz4torch loses precision (worse with f32 default dtype)c                     \        ^^	V R7      p\        YP                  V4      \        V 4      '       d   RMRR7       \        ^^	^V R7      p\        Y P                  V4      ) \        V 4      '       d   RMRR7       R# )   r   gMb@?gTqs*>r9   )rO   r   g~jt?N)r
   r   flipr   )r   rd   re   s   &  r   test_sg_coeffs_largerp      sg     Bb)G!& Br2G'''""8B<<Vr   c                    . ROpV F3  p\        V^ ^ V R7      p\        W0P                  V4      V,          4       K5  	  R pR pV EF#  pV^,          p\        V) ^,           V^,           4       Uu. uF  pV! Wv4      NK  	  upRRR1,          pV P	                  WP
                  R7      p\        V^^V R7      p	\        W4       \        V^^V R7      p	\        W4       \        V) ^,           V^,           4       Uu. uF  pV! Wv4      NK  	  upRRR1,          pV P	                  WP
                  R7      p\        V^^V R7      p	\        W4       \        V^^V R7      p	\        W4       EK&  	  R# u upi u upi )rM   r   c                     ^V R,
          ,          ^V,          ^,           V,          ^V,          ^,
          ,          ,          # )r   rN    )kr   s   &&r   h_p_d_closed_form_1>test_sg_coeffs_even_window_length.<locals>.h_p_d_closed_form_1   s.    !c'{QqS1WaK1q122r   c                 $   ^RV^,          ,          ^,           ^V R,
          ^,          ,          ,           ,          p^^V,          ^,           ,          V^,           ,          V,          V^,
          ,          ^V,          ^,
          ,          pW#,          # )   rN   rs   )rt   r   numerdenoms   &&  r   h_p_d_closed_form_2>test_sg_coeffs_even_window_length.<locals>.h_p_d_closed_form_2   sf    Bq!tGaK"a#g\/121Q37QU#A%q1u-qsQw7{r   Nr6   )rM   r      
            )r
   r   	ones_likerE   r   r@   )
r   window_lengthslengthh_p_dru   r|   r   rt   expected_outputactual_outputs
   &         r   !test_sg_coeffs_even_window_lengthr      sl    /N far2||E2V;< !3
 !AI$)1"q&!a%$8:$8q /q4$8::>B$@**_JJ*G%far:7%far:7 %*1"q&!a%$8:$8q /q4$8::>B$@**_JJ*G%far:7%far:7! !::s   0E0;E5c                   V P                  R.4      p\        V^^ 4      p\        W P                  R.4      4       V P                  R.4      p\        V^^RR7      p\        W P                  R.4      RR7       V P                  R.4      p\        V^^RR7      p\        W P                  R.4      RR7       V P                  R.^,          4      p\        V^^RR7      p\        W P                  . R
O4      RR7       R	# )z1Test some trivial edge cases for savgol_filter().r5   rQ   constantmodeg [n<r9   nearestwrapN)r5   r5   r5   )r   r   r   r   r   rT   rU   s   &  r   test_sg_filter_trivialr      s     	

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

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


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


C519AaAF+AAzz/2Ar   c                 .   V P                  . RO4      p\        V^^RR7      p\        W P                  . RO4      4       \        V^^RR7      p\        W P                  . RO4      4       \        V^^RR7      p\        W P                  . R	O4      4       R# )
r5   r   r   mirrorr   Nr5   r]   r5   r5   UUUUUU?r5   )竪?r   r   )r   r   r   )r   r   r   r   s   &  r   test_sg_filter_basicr     sx     	

?#AaAJ/AAzz"567aAH-AAzz"=>?aAF+AAzz"=>?r   c                     V P                  . RO. RO.4      pV P                  . RO. RO.4      p\        V^^RR7      p\        W24       \        VP                  ^^R^ R7      p\        W2P                  4       R# )	r5   r   r   )r   axisNr   )r]   r^   r]   r   )r]   gUUUUUU@r]   )r   r   r   r!   )r   rT   r   rU   s   &   r   test_sg_filter_2dr     sm    


O#% 	&Azz..0 1HaAJ/AA acc1ajq9AAzz"r   c           
      p   V P                  R	^^V P                  R7      pV^,          V^ ,          ,
          pV P                  V^V^,          ,          V^,          V,
          .4      pV P                  V P                  V4      ^V,          ^V^,          ,          R,
          .4      pV P                  V P	                  V4      V P                  V^4      ^V,          .4      p^p\        W6^R
RR7      p\        WsRR7       \        W6^R
R^VR7      p\        WRR7       \        W6^R
R^VR7      p	\        WRR7       VP                  pVP                  pVP                  p\        W6^^ RR7      p\        WsRR7       \        W6^^ R^VR7      p\        WRR7       \        W6^^ R^VR7      p	\        WRR7       R# )r   r6   r5   interp)r   r   g-q=r9   r   r   rO   rP   Nr   )	rR   r@   stackr   
zeros_liker_   r   r   r!   )
r   r0   rP   rT   rb   rc   r-   rU   rX   rZ   s
   &         r   test_sg_filter_interp_edgesr     s    	B2RZZ0AaD1Q4KE
!a1f*q&1* 	A 
2<<?q5qAv:#% 
&B ((BMM!$LLA&E C MaBAAu%	q(e
-BB'	q(e
-BB%( 	
A	B
%%CaAAAu%	qe
-BB'	qe
-BB%(r   c           
         V P                  R^^4      pV^,          V^ ,          ,
          pV P                  W) .4      pV P                  V^,          ^V^,          ,          ^,           .4      pV P                  V^,          ^V^,          ,          V^,          ,           RV,          ,
          .4      pV P                  V P                  V4      V P                  V4      ) .4      pV P                  ^V,          ^V,          .4      pV P                  ^V^,          ,          ^V^,          ,          ^V,          ,           R,
          .4      pV P                  W4V.4      p	V P                  WgV.4      p
\        V	^^RRVR7      p\	        WRR7       \        V	^^RR^VR7      p\	        WRR7       V P                  VP
                  VP
                  VP
                  .4      p	V P                  VP
                  VP
                  VP
                  .4      p
\        V	^^^RVR7      p\	        WRR7       \        V	^^^R^VR7      p\	        WRR7       V P                  \        V	^ ^V R7      RR	7      p	V P                  \        V
^ ^V R7      RR	7      p
\        V	^^^ RVR7      p\	        WRR7       \        V	^^^ R^VR7      p\	        WRR7       R
# )r   rN   r   )r   r   rP   r8   r9   r   r   T)copyNr   r   )rR   r   r   r   r   r!   r   r   )r   r0   rP   x1x2x3dx1dx2dx3zdzrU   rW   s   &            r   test_sg_filter_interp_edges_3dr   Q  s^    	B2AaD1Q4KE	1b'	B	161qAv:>*	+B	161qAv:Q.q89	:B
((BLLObll1o%56
7C
((AE1q5>
"C
((AQJAF
QU 2S 89
:C 	""A	3S/	"BaABXUCAAu%	q!QRhau	MBB' 	"$$bdd#$A	355#%%'	(BaAAHEBAAu%	q!QQXQe	LBB' 	

;q!Q2.T
:A	KAqR0t	<BaAAHEBAAu%	q!QQXQe	LBB'r   c           
        V P                  R4      p\        V^^RR7       \        P                  ! \        RR7      ;_uu_ 4        \        V^^RR7       RRR4       \        V^	^^ RR7       \        P                  ! \        RR7      ;_uu_ 4        \        V^^^ RR7       RRR4       R#   + '       g   i     L_; i  + '       g   i     R# ; i)z=Tests that the window_length check is using the correct axis.r   )r-   r.   r   zwindow_length must be less than)matchN)r-   r.   r   r   )r         )onesr   pytestraises
ValueError)r   rT   s   & r   %test_sg_filter_valid_window_length_3dr   |  s     	A!2B	z)J	K	KarQXF 
L !1I	z)J	K	KarQQXN 
L	K 
L	K 
L	K	Ks   B,B?,B<	?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%   r3   rA   rI   rK   r[   rg   rk   rp   r   r   r   r   r   r   r   rs   r   r   <module>r      s     
 % 5 1;;// KK11 [[))8 * 

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