Ë
    âQ(h×0  ã                   óÆ   — 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!y)é    N)Úassert_equalÚassert_array_equal)Úassert_almost_equalÚassert_array_almost_equalÚxp_assert_close)Ú
convolve1d)Úsavgol_coeffsÚsavgol_filter)Ú_polyderc                 ó4   — t        | |«      }t        ||«       y )N)r   r   )ÚpÚmÚexpectedÚdps       úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/signal/tests/test_savitzky_golay.pyÚcheck_polyderr      s   € Ü	�!�Q‹€BÜ�r˜8Õ$ó    c                  óx  — 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 ]M  \  }}}t        t        j                  |«      j                  |t        j                  |«      j                  «       ŒO y )
Né   r   é   )é   é   r   é   r   r   )r   r   é   é
   )r   ÚnpÚarrayÚT)Úcasesr   r   r   s       r   Útest_polyderr       sï   € à
ˆˆa�!�ˆØ
ˆˆa�!�ˆÚ	�A’yÐ!Ú	�A˜˜1�vÐÚ	�A˜�sÐÚ	�A˜�sÐÚ
’YÐ	 ¢Y²	Ð$:Ð;Ú
’YÐ	  a¨ V¨b°!¨WÐ$5Ð6Ú
’YÐ	  a S¨2¨$ KÐ0Ú
’YÐ	  a S¨1¨# JÐ/ð€Eð  ò >‰ˆˆ1ˆhÜ”b—h‘h˜q“k—m‘m Q¬¯©°Ó(:×(<Ñ(<Õ=ñ>r   c                 óÄ   — |€| dz  }t        j                  | «      }||k(  j                  t        «      }t        j                  t        j
                  |||«      |«      }|S )züThis 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.

    r   )r   ÚarangeÚastypeÚintÚpolyvalÚpolyfit)Úwindow_lengthÚ	polyorderÚposÚtÚunitÚhs         r   Úalt_sg_coeffsr-   +   sW   € ð €{Ø˜qÑ ˆÜ
�	‰	�-Ó €AØ�‰H×ÑœSÓ!€DÜ
�
‰
”2—:‘:˜a  yÓ1°1Ó5€AØ€Hr   c                  ó   — 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¬«       y )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ä�a˜ Ô"€AÜ�AÒ(¨uÕ5ä�a˜  uÔ-€AÜ�AÒ(¨uÖ5r   c           
      ó¢   — d gt        t        | «      «      z   D ]4  }t        | ||d¬«      }t        | ||¬«      }t	        ||dd| ||fz  ¬«       Œ6 y )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   sb   € ð ˆvœœU =Ó1Ó2Ñ2ò ?ˆÜ˜=¨%°S¸eÔDˆÜ˜=¨%°SÔ9ˆÜ˜˜B UØ!KØ"/°¸Ð!<ñ"=ö	?ñ?r   c                  ó`   — t        ddd«      D ]  } t        | «      D ]  }t        | |«       Œ Œ  y )Nr   é   r   )r=   rA   )r'   r>   s     r   Útest_sg_coeffs_comparerD   [   s7   € ä˜q ! Q›ò 8ˆÜ˜=Ó)ò 	8ˆEÜ! -°Õ7ñ	8ñ8r   c                  ó¤  — 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	        |||  |
||  «       y )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   s  € Ø€IØ€MØ˜qÑ €Gä
�‰�A�r˜2Ó€AØˆa‰D�1�Q‘4‰K€Eð
 	ˆa�1‰f‰�qÑ€AÜ�m YÓ/€AÜ	�A�qÓ	€BÜ�B�w ˜xÐ(¨!¨G°W°HÐ*=Ô>ð 
ˆq�A‰v‰˜Ñ	€BÜ�m Y°a¸uÔE€AÜ	�A�qÓ	€BÜ�B�w ˜xÐ(¨"¨W°g°XÐ*>Ô?ð �‰'€CÜ�m Y°a¸uÔE€AÜ	�A�qÓ	€BÜ�B�w ˜xÐ(¨#¨g°w°hÐ*?Õ@r   c            	      óÐ  — t        j                  g d¢«      } | dz  dz  }| dz  }t        j                  | d«      }t        |j                  «      D ]”  }t        dd|dd¬	«      }t        |j                  |«      ||   d
¬«       t        dd|ddd¬«      }t        |j                  |«      ||   d
¬«       t        dd|ddd¬«      }t        |j                  |«      ||   d
¬«       Œ– y )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Ü�Q—V‘V‹}ò >ˆÜ  1¨#°S¸eÔDˆÜ˜Ÿ™ A›¨¨#©°UÕ;Ü  1¨#°S¸eÈ1ÔMˆÜ˜Ÿ™ A›¨¨3©°eÕ<Ü  1¨#°S¸eÈ1ÔMˆÜ˜Ÿ™ A›¨¨C©°uÖ=ñ>r   c                  ó¸   — t        ddd¬«      } t        | t        j                  d«      «       t        ddd¬«      } t        | t        j                  d«      «       y)	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   �   sD   € ô ˜1¨°Ô3€FÜ�vœrŸx™x¨›{Ô+Ü˜1¨°Ô3€FÜ�vœrŸx™x¨›{Õ+r   c                  ó‚   — t        dd«      } t        | | d d d…   «       t        ddd¬«      }t        ||d d d…    «       y )Né   rF   éÿÿÿÿr   )rJ   )r	   r   )r_   r`   s     r   Útest_sg_coeffs_largerj   œ   sD   € ô ˜B Ó"€GÜ˜g w©t°¨t¡}Ô5Ü˜B ¨Ô+€GÜ˜g¨±°"°© ~Õ6r   c                  ó0  — g d¢} | D ]1  }t        |dd«      }t        |t        j                  |«      |z  «       Œ3 d„ }d„ }| D ]Ç  }|dz  }t	        | dz   |dz   «      D �cg c]  } |||«      ‘Œ c}d d d…   }t        |dd«      }t        ||«       t        |dd«      }t        ||«       t	        | dz   |dz   «      D �cg c]  } |||«      ‘Œ c}d d d…   }t        |dd«      }t        ||«       t        |dd«      }t        ||«       ŒÉ y c c}w c c}w )	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‘'‰{˜Q˜q™S 1™W a™K¨¨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   € Ø�B�q˜!‘t‘G˜a‘K " a¨#¡g°¡\¡/Ñ1Ñ2ˆØ�1�Q‘3˜‘7‘˜Q ™UÑ# AÑ% q¨1¡uÑ-¨q°©s°Q©wÑ7ˆØ�U‰{Ðr   r   r   ri   r   )r	   r   r   Ú	ones_liker=   )	Úwindow_lengthsÚlengthÚh_p_drr   rx   r   rq   Úexpected_outputÚactual_outputs	            r   Ú!test_sg_coeffs_even_window_lengthr   ª   sF  € â.€NØ ò =ˆÜ˜f a¨Ó+ˆÜ˜œrŸ|™|¨EÓ2°VÑ;Õ<ð=ò3òð
 !ò 8ˆØ�A‰Iˆä$)¨1¨"¨q©&°!°a±%Ó$8ö:Ø ñ /¨q°!Õ4ò :Ù:>¸B¸$ñ@ˆä% f¨a°Ó3ˆÜ˜¨Ô7Ü% f¨a°Ó3ˆÜ˜¨Ô7ô %*¨1¨"¨q©&°!°a±%Ó$8ö:Ø ñ /¨q°!Õ4ò :Ù:>¸B¸$ñ@ˆä% f¨a°Ó3ˆÜ˜¨Ô7Ü% f¨a°Ó3ˆÜ˜¨Õ7ñ8ùò:ùò:s   Á DÃ D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¬	«       y)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Ü��S�EÔô
 	�‰�#�‹€AÜ�a˜˜A JÔ/€AÜ˜˜C˜5¨"Õ-ä
�‰�#�‹€AÜ�a˜˜A IÔ.€AÜ˜˜C˜5¨"Õ-ä
�‰�#�˜‘Ó€AÜ�a˜˜A FÔ+€AÜ˜š?°BÖ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
¢«       y )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�   ç   sa   € ä
�‰’Ó!€AÜ�a˜˜A JÔ/€AÜ�AÒ*Ô+ä�a˜˜A HÔ-€AÜ�AÒ2Ô3ä�a˜˜A FÔ+€AÜ�AÒ2Õ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                  «       y )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’   ô   sq   € Ü
�‰’/Ú!ð#ó 	$€Aä�x‰xÒ,Ú,ð.ó /€Hä�a˜˜A JÔ/€AÜ�A�xÔ ä�a—c‘c˜1˜a j°qÔ9€AÜ�A�x—z‘zÕ"r   c            	      óF  — 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¬«       y )Néûÿÿÿr   rG   r   r   r   r   r   r/   r   ri   Úinterp)r‘   rƒ   gê-�™—q=r2   ©r‘   rƒ   rJ   rK   )	r   rM   r   ry   Ú
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Øˆa‰D�1�Q‘4‰K€Eä
�‰�!Ø�a˜1‘f‘*Ø�q‘&˜1‘*ðó 	€Aô 
�‰”2—<‘< “?Ø�q‘5Ø�q˜A‘v‘: Ñ#ð%ó 
&€Bô �(‰(”B—M‘M !Ó$Ü—L‘L  AÓ&Ø˜‘Eðó €Cð €Mä�a˜¨°¸ÔB€AÜ�A�q˜uÕ%ä	�q˜-¨°¸(Ø eô
-€Bä�B˜ Õ'ä	�q˜-¨°¸(Ø eô
-€Bä�B˜ %Õ(ð 	
�‰€AØ	�‰€BØ
�%‰%€Cä�a˜¨°¸ÔA€AÜ�A�q˜uÕ%ä	�q˜-¨°¸Ø eô
-€Bä�B˜ Õ'ä	�q˜-¨°¸Ø eô
-€Bä�B˜ %Ö(r   c            	      óV  — 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¬«       |j                  dd«      j                  «       }|	j                  dd«      j                  «       }	t	        |d
ddd|¬«      }
t        |
|d¬«       t	        |d
dddd|¬«      }t        ||	d¬«       y )Nr”   r   rG   r   r   r   r   rI   r   r   ri   r•   )r‘   rƒ   rK   r1   r2   r–   )	r   rM   r   ry   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  sf  € ä
�‰�B˜˜2Ó€AØˆa‰D�1�Q‘4‰K€EÜ	�‰�1�q�b�'Ó	€BÜ	�‰�1˜‘6˜1˜q A™v™:¨™>Ð*Ó	+€BÜ	�‰�1˜‘6˜1˜q A™v™:¨¨Q©Ñ.°°q±Ñ8Ð9Ó	:€BÜ
�(‰(”B—L‘L “O¤b§l¡l°1£oÐ%5Ð6Ó
7€CÜ
�(‰(�A˜‘E˜1˜q™5�>Ó
"€CÜ
�(‰(�A˜˜Q™‘J  A¨¡F¡
¨Q°©UÑ 2°SÑ 8Ð9Ó
:€Cô 	�‰�"�b˜"�Ó€AÜ	�‰�3˜˜S�/Ó	"€Bä�a˜˜A B¨X¸UÔC€AÜ�A�q˜uÕ%ä	�q˜!˜Q R¨h¸aÀuÔ	M€BÜ�B˜ Õ'ô 	�‰�"—$‘$˜Ÿ™˜bŸd™dÐ#Ó$€AÜ	�‰�3—5‘5˜#Ÿ%™% §¡Ð'Ó	(€Bä�a˜˜A A¨H¸EÔB€AÜ�A�q˜uÕ%ä	�q˜!˜Q Q¨X¸QÀeÔ	L€BÜ�B˜ Õ'ð 	
�
‰
�1�aÓ×ÑÓ€AØ	�‰�Q˜Ó	×	Ñ	Ó	!€Bä�a˜˜A A¨H¸EÔB€AÜ�A�q˜uÕ%ä	�q˜!˜Q Q¨X¸QÀeÔ	L€BÜ�B˜ Ö'r   c                  ój  — t        j                  d«      } t        | ddd¬«       t        j                  t
        d¬«      5  t        | ddd¬«       d	d	d	«       t        | d
ddd¬«       t        j                  t
        d¬«      5  t        | dddd¬«       d	d	d	«       y	# 1 sw Y   ŒNxY w# 1 sw Y   y	xY w)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ä	�‰”zÐ)JÔ	Kñ Gä�a r°Q¸XÕF÷Gô �! 1°¸ÀÕIä	�‰”zÐ)JÔ	Kñ Oä�a r°Q¸QÀXÕN÷Oð O÷Gð Gú÷Oð Oús   Á BÂB)ÂB&Â)B2)"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Ý 1ò%ò
>ò*ò$6ò$	?ò8òAò:>ò 
,ò7ò 8òN8ò,
4ò	#ò.)òb'(óTOr   