§
    ¢éUgè+  ã                   óÎ   — d dl Zd dlmZ d dlmZmZ d dlmZ	 d dlZd dl
mZmZ d dlmZmZ d dlmZ dd	„Z G d
„ d¦  «        Zeej        ej        eefZ G d„ d¦  «        Zd„ ZdS )é    N)Úproduct)Úassert_equalÚassert_allclose)Úraises)ÚupfirdnÚfirwin)Ú_output_lenÚ_upfirdn_modes)Ú	_pad_testé   c                 ó2  — t          j        |¦  «        }t          j        t          | ¦  «        |z  | j        ¦  «        }| |dd|…<   t          j        ||¦  «        dd|…         dt          t          |¦  «        t          | ¦  «        ||¦  «        …         }|S )zpNaive upfirdn processing in Python.

    Note: arg order (x, h) differs to facilitate apply_along_axis use.
    N)ÚnpÚasarrayÚzerosÚlenÚdtypeÚconvolver	   )ÚxÚhÚupÚdownÚouts        ú^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/signal/tests/test_upfirdn.pyÚupfirdn_naiver   /   sƒ   € õ
 	Œ
�1‰Œ€AÝ
Œ(•3�q‘6”6˜B‘; ¤Ñ
(Ô
(€CØ€Cˆˆˆ"ˆ�IÝ
Œ+�a˜Ñ
Ô
˜f˜f ˜fÔ
%Ð&L¥{µ3°q±6´6½3¸q¹6¼6À2ÀtÑ'LÔ'LÐ&LÔ
M€CØ€Jó    c                   ó&   — e Zd ZdZd„ Zd„ Zdd„ZdS )ÚUpFIRDnCasezTest _UpFIRDn objectc                 óª   — || _         || _        t          j        |¦  «        | _        || _        t          j                             d¦  «        | _        d S )Né   )	r   r   r   Ú
atleast_1dr   Úx_dtypeÚrandomÚRandomStateÚrng)Úselfr   r   r   r!   s        r   Ú__init__zUpFIRDnCase.__init__=   sC   € ØˆŒØˆŒ	Ý”˜qÑ!Ô!ˆŒØˆŒÝ”9×(Ò(¨Ñ,Ô,ˆŒˆˆr   c                 ó  — |                       t          j        d| j        ¦  «        ¦  «         |                       t          j        d| j        ¦  «        ¦  «         | j                             d¦  «                             | j        ¦  «        }| j        t          j        t          j        fv r |d| j                             d¦  «        z  z  }|                       |¦  «         |                       t          j	        d¦  «                             | j        ¦  «        ¦  «         d} | j        j        |Ž                      | j        ¦  «        }| j        t          j        t          j        fv r|d | j        j        |Ž z  z  }t          t          |¦  «        ¦  «        D ]}|                       ||¬¦  «         Œ|d d …d d d…dd d…f         j        }t          t          |¦  «        ¦  «        D ]}|                       ||¬¦  «         Œd S )Nr   é
   ù              ð?)é   é   é   ©Úaxisr*   r+   )Úscrubr   Úonesr!   r$   ÚrandnÚastypeÚ	complex64Ú
complex128ÚarangeÚranger   ÚT)r%   r   Úsizer.   s       r   Ú__call__zUpFIRDnCase.__call__D   s¾  € à�
Š
•2”7˜1˜dœlÑ+Ô+Ñ,Ô,Ð,à�
Š
•2”7˜2˜tœ|Ñ,Ô,Ñ-Ô-Ð-àŒH�NŠN˜2ÑÔ×%Ò% d¤lÑ3Ô3ˆØŒ<�BœL­"¬-Ð8Ð8Ð8Ø��d”h—n’n RÑ(Ô(Ñ(Ñ(ˆAØ�
Š
�1‰Œˆà�
Š
•2”9˜R‘=”=×'Ò'¨¬Ñ5Ô5Ñ6Ô6Ð6àˆØˆDŒHŒN˜DÐ!×(Ò(¨¬Ñ6Ô6ˆØŒ<�BœL­"¬-Ð8Ð8Ð8Ø��n�d”h”n dÐ+Ñ+Ñ+ˆAÝ�#˜d™)œ)Ñ$Ô$ð 	%ð 	%ˆDØ�JŠJ�q˜tˆJÑ$Ô$Ð$Ð$Øˆaˆaˆa���1��a�d˜�dˆlŒOÔˆÝ�#˜d™)œ)Ñ$Ô$ð 	%ð 	%ˆDØ�JŠJ�q˜tˆJÑ$Ô$Ð$Ð$ð	%ð 	%r   éÿÿÿÿc                 óà  — t          j        t          ||| j        | j        | j        ¦  «        }t          t          | j        ¦  «        |j        |         | j        | j        ¦  «        }|j        |         |k    sJ ‚t          | j        || j        | j        |¬¦  «        }|j        |         |k    sJ ‚|j        |j        k    sJ ‚| j        j
        |j
        f}t          d„ |D ¦   «         ¦  «        r t          |j
        t           j        ¦  «         nÐt           j        |v r.t           j        |v r t          |j
        t           j        ¦  «         n”t          d„ |D ¦   «         ¦  «        r t          |j
        t           j        ¦  «         n[t           j        |v st           j        |v r t          |j
        t           j        ¦  «         nt          |j
        t           j        ¦  «         t#          ||¦  «         d S )Nr-   c              3   ó6   K  — | ]}|t           j        k    V — Œd S ©N)r   r3   ©Ú.0Úds     r   ú	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>d   s)   è è € Ð1Ð1 Qˆq•B”LÒ Ð1Ð1Ð1Ð1Ð1Ð1r   c              3   ó6   K  — | ]}|t           j        k    V — Œd S r=   )r   Úfloat32r>   s     r   rA   z$UpFIRDnCase.scrub.<locals>.<genexpr>h   s(   è è € Ð1Ð1 Q�•b”j’Ð1Ð1Ð1Ð1Ð1Ð1r   )r   Úapply_along_axisr   r   r   r   r	   r   Úshaper   r   Úallr   r3   rC   r4   Úfloat64r   )r%   r   r.   ÚyrÚwant_lenÚyÚdtypess          r   r/   zUpFIRDnCase.scrub[   s³  € ÝÔ ¥°°aØ!%¤¨¬°$´)ñ=ô =ˆå�s 4¤6™{œ{¨A¬G°D¬M¸4¼7ÀDÄIÑNÔNˆØŒx˜Œ~ Ò)Ð)Ð)Ð)Ý�D”F˜A˜tœw¨¬	¸Ð=Ñ=Ô=ˆØŒw�tŒ} Ò(Ð(Ð(Ð(ØŒw˜"œ(Ò"Ð"Ð"Ð"Ø”&”, ¤Ð(ˆÝÐ1Ð1¨&Ð1Ñ1Ô1Ñ1Ô1ð 		.Ý˜œ¥"¤,Ñ/Ô/Ð/Ð/ÝŒ\˜VÐ#Ð#­¬
°fÐ(<Ð(<Ý˜œ¥"¤,Ñ/Ô/Ð/Ð/ÝÐ1Ð1¨&Ð1Ñ1Ô1Ñ1Ô1ð 	.Ý˜œ¥"¤*Ñ-Ô-Ð-Ð-ÝŒ]˜fÐ$Ð$­¬¸Ð(>Ð(>Ý˜œ¥"¤-Ñ0Ô0Ð0Ð0å˜œ¥"¤*Ñ-Ô-Ð-Ý˜˜AÑÔÐÐÐr   N)r:   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r9   r/   © r   r   r   r   ;   sL   € € € € € ØÐð-ð -ð -ð%ð %ð %ð.ð ð ð ð ð r   r   c                   ó6  — e Zd Zd„ Zej                             dg d¢¦  «        ej                             dg d¢¦  «        d„ ¦   «         ¦   «         Zd„ Zej                             dddd	dg d
¢fddddg d¢fddddg d¢fddddg d¢fdddd	g d¢fg¦  «        d„ ¦   «         Z	ej                             dg d¢¦  «        d„ ¦   «         Z
ej                             de¦  «        ej                             dd¦  «        ej                             dg d¢¦  «        d„ ¦   «         ¦   «         ¦   «         Zej                             de¦  «        ej                             de¦  «        ej                             d e edd¦  «        ¦  «        ¦  «        d „ ¦   «         ¦   «         ¦   «         Zd!„ Zej                             d"e¦  «        d#„ ¦   «         Zej                             d$ ed%gg d&¢eej        ej        ej        ej        g¦  «        ¦  «        d'„ ¦   «         Zd(S ))ÚTestUpfirdnc                 óÆ   — t          t          t          dgdgdd¦  «         t          t          t          g dgdd¦  «         t          t          t          dggdgdd¦  «         d S )Nr   r   )Úassert_raisesÚ
ValueErrorr   )r%   s    r   Útest_valid_inputzTestUpfirdn.test_valid_inputv   s\   € Ý•j¥'¨A¨3°°°Q¸Ñ:Ô:Ð:Ý•j¥'¨2°¨s°A°qÑ9Ô9Ð9Ý•j¥'¨Q¨C¨5°1°#°q¸!Ñ<Ô<Ð<Ð<Ð<r   Úlen_h)r   r*   r+   é   r,   Úlen_xc                 óì   — t          j        |¦  «        }d||dz  <   t          j        |¦  «        }t          ||dd¦  «        }t          j        ||dz  |dz
  dz  fd¦  «        }t          ||¦  «         d S )Nç      ð?r*   r   Úconstant)r   r   r0   r   Úpadr   )r%   rW   rY   r   r   rJ   Úwants          r   Útest_singletonzTestUpfirdn.test_singleton{   sy   € õ ŒH�U‰OŒOˆØˆˆ%�1‰*‰ÝŒG�E‰NŒNˆÝ�A�q˜!˜QÑÔˆÝŒv�a˜% 1™* u¨q¡y°QÑ&6Ð7¸ÑDÔDˆÝ˜˜4Ñ Ô Ð Ð Ð r   c                 ó¤   — t          ddgdgdd¦  «        }t          |ddg¦  «         t          ddgddgdd¦  «        }t          |g d¢¦  «         d S )Nr   r[   g        )r   r   r   )r   r   )r%   rJ   s     r   Útest_shift_xzTestUpfirdn.test_shift_x†   sd   € å�Q˜�F˜R˜D ! QÑ'Ô'ˆÝ˜˜A˜q˜6Ñ"Ô"Ð"Ý�Q˜�F˜R ˜H a¨Ñ+Ô+ˆÝ˜˜9˜9˜9Ñ%Ô%Ð%Ð%Ð%r   z len_h, len_x, up, down, expectedr*   r,   )r   r   r   r   r+   é   )r   r   r   r   r   rX   )r   r   r   r   r   )r   r   r   r   r   é   )r   r   r   r   r   r   r   c                 ó¤   — t          j        |¦  «        }d|d<   t          j        |¦  «        }t          ||||¦  «        }t	          ||¦  «         d S )Nr[   r   )r   r   r0   r   r   )	r%   rW   rY   r   r   Úexpectedr   r   rJ   s	            r   Útest_length_factorszTestUpfirdn.test_length_factors�   sP   € õ ŒH�U‰OŒOˆØˆˆ!‰ÝŒG�E‰NŒNˆÝ�A�q˜"˜dÑ#Ô#ˆÝ˜˜8Ñ$Ô$Ð$Ð$Ð$r   zdown, want_len))r*   i—  )rc   i�  )éO   é   c                 óR  — t           j                             d¦  «        }t          t           j        t           j        t          t          f}d}|D ]Ø}|                     |¦  «         	                    |¦  «        }|t           j        t           j
        fv r|d|                     |¦  «        z  z  }t          dd|z  d¬¦  «        }t          ||d|¦  «        }	t          ||d|¬	¦  «        }
|
j        |fk    sJ ‚|	j        d
         |
j        d
         k    sJ ‚t          |	|
dd¬¦  «         ŒÙd S )Nr   i'  r)   é   r[   Úhamming)Úwindowr   )r   r   r   gH¯¼šò×z>©ÚatolÚrtol)r   r"   r#   ÚintrC   r3   ÚfloatÚcomplexr1   r2   r4   r   r   r   rE   r   )r%   r   rI   Úrandom_stateÚ	try_typesr8   r   r   r   ÚylrJ   s              r   Útest_vs_convolvezTestUpfirdn.test_vs_convolveŸ   s*  € õ ”y×,Ò,¨RÑ0Ô0ˆÝ�"œ*¥b¤lµE½7ÐCˆ	Øˆàð 
	9ð 
	9ˆEØ×"Ò" 4Ñ(Ô(×/Ò/°Ñ6Ô6ˆAØ�œ¥r¤}Ð5Ð5Ð5Ø�R˜,×,Ò,¨TÑ2Ô2Ñ2Ñ2�å�r˜2 ™9¨YÐ7Ñ7Ô7ˆAÝ˜q ! Q¨Ñ-Ô-ˆBÝ˜˜1 ¨Ð.Ñ.Ô.ˆAØ”7˜x˜kÒ)Ð)Ð)Ð)Ø”8˜A”; !¤'¨!¤*Ò,Ð,Ð,Ð,Ý˜B ¨°4Ð8Ñ8Ô8Ð8Ð8ð
	9ð 
	9r   r!   r   )r[   r)   zup, down)©r   r   )r*   r*   )r+   r*   )r*   r+   c                 ó:   —  t          ||||¦  «        ¦   «          d S r=   )r   )r%   r!   r   r   r   s        r   Útest_vs_naive_deltazTestUpfirdn.test_vs_naive_delta¶   s&   € ð 	*��B˜˜a Ñ)Ô)Ñ+Ô+Ð+Ð+Ð+r   Úh_dtypezp_max, q_max)r(   éd   c                 óT   — |                       ||||¦  «        }|D ]} |¦   «          Œd S r=   )Ú_random_factors)r%   r!   rz   Úp_maxÚq_maxÚtestsÚtests          r   Útest_vs_naivezTestUpfirdn.test_vs_naive¼   sC   € ð
 ×$Ò$ U¨E°7¸GÑDÔDˆØð 	ð 	ˆDØˆD‰FŒFˆFˆFð	ð 	r   c           	      ó:  — d}d}t           j                             d¦  «        }g }t          |¦  «        D ]å}	||k    r|nd}
||k    r|nd}|                     |¦  «        |
z   }|                     |¦  «        |z   }|                     |¦  «        dz   }t          j        |                     |¦  «        ¦  «        }|                     |¦  «        }|t          k    r|d|                     |¦  «        z  z  }|                     t          ||||¦  «        ¦  «         Œæ|S )Nr+   é   r   r   r)   )
r   r"   r#   r6   Úrandintr    r2   rr   Úappendr   )r%   r~   r   rz   r!   Ún_repÚ	longest_hrs   r€   Ú_Úp_addÚq_addÚpÚqrW   r   s                   r   r}   zTestUpfirdn._random_factorsÅ   s%  € ØˆØˆ	Ý”y×,Ò,¨RÑ0Ô0ˆØˆå�u‘”ð 	8ð 	8ˆAà" Uš]˜]�E�E°ˆEØ" Uš]˜]�E�E°ˆEØ×$Ò$ UÑ+Ô+¨eÑ3ˆAØ×$Ò$ UÑ+Ô+¨eÑ3ˆAð !×(Ò(¨Ñ3Ô3°aÑ7ˆEÝ”˜l×2Ò2°5Ñ9Ô9Ñ:Ô:ˆAØ—’˜Ñ!Ô!ˆAØ�'Ò!Ð!Ø�R˜,×.Ò.¨uÑ5Ô5Ñ5Ñ5�à�LŠL� Q¨¨1¨gÑ6Ô6Ñ7Ô7Ð7Ð7àˆr   Úmodec                 ó‚  — t          j        g d¢t          ¬¦  «        }d\  }}t          ||||¬¦  «        }|dk    rt          j        g d¢¦  «        }nÜ|dk    rt          j        g d¢¦  «        }n¿|d	k    rt          j        g d
¢¦  «        }n¢|dk    rƒ|d         |d         z
  t          |¦  «        dz
  z  }|d         t          j        | dd¦  «        |z  z   }|d         t          j        d|dz   ¦  «        |z  z   }	t          j        |||	f¦  «        }nt          j        |||f|¬¦  «        }t          ||¦  «         dS )z@Test vs. manually computed results for modes not in numpy's pad.)r   r*   r+   r   ©r   )rb   rb   ©ÚnpreÚnpostrŽ   Úantisymmetric)r+   r   r:   éýÿÿÿéþÿÿÿr:   r   r*   r+   r   r:   r•   r–   r:   r   r*   Úantireflect)r   r*   r+   r   r:   r   r   r*   r+   r   r:   r   r   r*   r+   r   Úsmooth)éûÿÿÿéüÿÿÿr•   r–   r:   r   r   r*   r+   r   r:   r•   r™   iùÿÿÿi÷ÿÿÿiõÿÿÿÚliner:   r   r   ©rŽ   N)
r   Úarrayrq   r   r   r   r5   Úconcatenater]   r   )
r%   rŽ   r   r’   r“   rJ   Ú
y_expectedÚ	lin_slopeÚleftÚrights
             r   Útest_extensionszTestUpfirdn.test_extensionsÝ   sm  € õ ŒH�\�\�\­Ð/Ñ/Ô/ˆØ‰ˆˆeÝ�a˜d¨%°dÐ;Ñ;Ô;ˆØ�?Ò"Ð"ÝœØHÐHÐHñJô JˆJˆJà�]Ò"Ð"ÝœØBÐBÐBñDô DˆJˆJà�XÒÐÝœØLÐLÐLñNô NˆJˆJà�VŠ^ˆ^Ø˜2œ  1¤™­#¨a©&¬&°1©*Ñ5ˆIØ�Q”4�"œ) T E¨1¨aÑ0Ô0°9Ñ<Ñ<ˆDØ�b”E�BœI a¨°©Ñ3Ô3°iÑ?Ñ?ˆEÝœ¨¨q°%Ð(8Ñ9Ô9ˆJˆJåœ  D¨% =°tÐ<Ñ<Ô<ˆJÝ˜˜:Ñ&Ô&Ð&Ð&Ð&r   zsize, h_len, mode, dtypeé   )rX   r,   é   c                 óv  — t           j                             d¦  «        }|                     |¦  «                             |¦  «        }|t           j        t           j        fv r|d|                     |¦  «        z  z  }t          j        dd|z   |j        j	        ¬¦  «        }t          ||dd|¬¦  «        }|dz
  }	|dv rt          ||	|	|¬¦  «        }
nt          j        ||	|¬¦  «        }
t          ||
ddd	¬¦  «        }||	|	 …         }t          j        |¦  «        j        d
z  x}}t          ||||¬¦  «         d S )Nr,   r)   r   r�   )r   r   rŽ   )r”   r—   r˜   r›   r‘   rœ   r\   g      Y@rm   )r   r"   r#   r1   r2   r3   r4   r5   Úrealr   r   r   r]   ÚfinfoÚepsr   )r%   r8   Úh_lenrŽ   r   rs   r   r   rJ   ÚnpadÚxpadÚypadrŸ   rn   ro   s                  r   Ú
test_modeszTestUpfirdn.test_modesõ   sC  € õ ”y×,Ò,¨QÑ/Ô/ˆØ×Ò˜tÑ$Ô$×+Ò+¨EÑ2Ô2ˆØ•R”\¥2¤=Ð1Ð1Ð1Ø��l×(Ò(¨Ñ.Ô.Ñ.Ñ.ˆAÝŒI�a˜˜U™¨!¬&¬,Ð7Ñ7Ô7ˆå�A�q˜Q Q¨TÐ2Ñ2Ô2ˆà�q‰yˆØÐEÐEÐEå˜Q T°¸DÐAÑAÔAˆDˆDå”6˜!˜T¨Ð-Ñ-Ô-ˆDÝ�q˜$ 1¨1°:Ð>Ñ>Ô>ˆØ˜$ ˜u˜*Ô%ˆ
å”h˜u‘o”oÔ)¨CÑ/Ð/ˆˆtÝ˜˜:¨D°tÐ<Ñ<Ô<Ð<Ð<Ð<r   N)rL   rM   rN   rV   ÚpytestÚmarkÚparametrizer_   ra   rf   rv   Ú_UPFIRDN_TYPESry   Úlistr   r‚   r}   r
   r£   r   rC   rG   r3   r4   r®   rP   r   r   rR   rR   t   sø  € € € € € ð=ð =ð =ð
 „[×Ò˜W o o oÑ6Ô6Ø„[×Ò˜W o o oÑ6Ô6ð!ð !ñ 7Ô6ñ 7Ô6ð!ð&ð &ð &ð „[×ÒÐ?Ø	
ˆAˆq�!�\�\�\Ð"Ø	
ˆAˆq�!�_�_�_Ð%Ø	
ˆAˆq�!�_�_�_Ð%Ø	
ˆAˆq�!�_�_�_Ð%Ø	
ˆB��1Ð+Ð+Ð+Ð,ðBñ ô ð%ð %ñô ð%ð „[×ÒÐ-ð 0ð 0ð 0ñ ô ð
9ð 9ñô ð
9ð$ „[×Ò˜Y¨Ñ7Ô7Ø„[×Ò˜S (Ñ+Ô+Ø„[×Ò˜ZÐ)IÐ)IÐ)IÑJÔJð,ð ,ñ KÔJñ ,Ô+ñ 8Ô7ð,ð „[×Ò˜Y¨Ñ7Ô7Ø„[×Ò˜Y¨Ñ7Ô7Ø„[×Ò˜^Ø!˜T ' '¨)°YÑ"?Ô"?Ñ@Ô@ñBô Bðð ñBô Bñ 8Ô7ñ 8Ô7ðð
ð ð ð0 „[×Ò˜V ^Ñ4Ô4ð'ð 'ñ 5Ô4ð'ð. „[×ÒØ"ØˆØˆCØˆJˆJØØŒZ˜œ R¤\°2´=ÐAñ		
ô 	
ñô ð=ð =ñô ð=ð =ð =r   rR   c                  óJ   — d} d}d}d}t          | |||¦  «        }|dk    sJ ‚d S )Nié  i áõi@  i¹  i¸6S)r	   )rW   Úin_lenr   r   Úout_lens        r   Útest_output_len_long_inputr·     sD   € ð €EØ€FØ	€BØ€DÝ˜% ¨¨TÑ2Ô2€Gð �hÒÐÐÐÐÐr   rw   )Únumpyr   Ú	itertoolsr   Únumpy.testingr   r   r¯   r   rT   Úscipy.signalr   r   Úscipy.signal._upfirdnr	   r
   Úscipy.signal._upfirdn_applyr   r   r   rp   rC   r3   rq   rr   r²   rR   r·   rP   r   r   ú<module>r¾      s8  ððF Ð Ð Ð Ø Ð Ð Ð Ð Ð à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø *Ð *Ð *Ð *Ð *Ð *Ø €€€à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ð	ð 	ð 	ð 	ð3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ðl �r”z 2¤<°¸Ð@€ð]=ð ]=ð ]=ð ]=ð ]=ñ ]=ô ]=ð ]=ð@ð ð ð ð r   