§
    µ³Ùg;,  ã                   óÊ   — d dl Zd dlmZ d dl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)Úxp_assert_close)Ú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        úU/granary/edev/quantum/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|j
        t           j        k    sJ ‚n°t           j        |v r&t           j        |v r|j
        t           j        k    sJ ‚n|t          d„ |D ¦   «         ¦  «        r|j
        t           j        k    sJ ‚nKt           j        |v st           j        |v r|j
        t           j        k    sJ ‚n|j
        t           j        k    sJ ‚t!          |                     |j
        ¦  «        |¦  «         d S )Nr,   c              3   ó6   K  — | ]}|t           j        k    V — Œd S ©N)r   r2   ©Ú.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   r@   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   Úallr2   rB   r3   Úfloat64r   r1   )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ð 		)Ø”7�bœlÒ*Ð*Ð*Ð*Ð*ÝŒ\˜VÐ#Ð#­¬
°fÐ(<Ð(<Ø”7�bœlÒ*Ð*Ð*Ð*Ð*ÝÐ1Ð1¨&Ð1Ñ1Ô1Ñ1Ô1ð 	)Ø”7�bœjÒ(Ð(Ð(Ð(Ð(ÝŒ]˜fÐ$Ð$­¬¸Ð(>Ð(>Ø”7�bœmÒ+Ð+Ð+Ð+Ð+à”7�bœjÒ(Ð(Ð(Ð(Ý˜Ÿ	š	 !¤'Ñ*Ô*¨AÑ.Ô.Ð.Ð.Ð.r   N)r9   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r8   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   r/   r   Úpadr   )r$   rV   rX   r   r   rI   Ú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          |t          j        ddg¦  «        ¦  «         t          ddgddgdd¦  «        }t          |t          j        g d¢¦  «        ¦  «         d S )Nr   rZ   ç        )r`   rZ   rZ   )r   r   r   r   )r$   rI   s     r   Útest_shift_xzTestUpfirdn.test_shift_x†   sx   € å�Q˜�F˜R˜D ! QÑ'Ô'ˆÝ˜�2œ: s¨C jÑ1Ô1Ñ2Ô2Ð2Ý�Q˜�F˜R ˜H a¨Ñ+Ô+ˆÝ˜�2œ: o o oÑ6Ô6Ñ7Ô7Ð7Ð7Ð7r   z len_h, len_x, up, down, expectedr)   r+   )r   r   r   r   r*   é   )r   r   r   r   r   rW   )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          j        |t           j        ¬¦  «        }t          ||¦  «         d S )NrZ   r   ©r   )r   r   r/   r   r   rF   r   )	r$   rV   rX   r   r   Úexpectedr   r   rI   s	            r   Útest_length_factorszTestUpfirdn.test_length_factors�   sf   € õ ŒH�U‰OŒOˆØˆˆ!‰ÝŒG�E‰NŒNˆÝ�A�q˜"˜dÑ#Ô#ˆÝ”:˜h­b¬jÐ9Ñ9Ô9ˆÝ˜˜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(   é   rZ   Úhamming)Úwindowr   )r   r   r   gH¯¼šò×z>©ÚatolÚrtol)r   r!   r"   ÚintrB   r2   ÚfloatÚcomplexr0   r1   r3   r   r   r   rD   r   )r$   r   rH   Úrandom_stateÚ	try_typesr7   r   r   r   ÚylrI   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   )rZ   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    r{   Ú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           	      ó6  — d}d}t           j                             d¦  «        }g }t          |¦  «        D ]ã}	||k    r|nd}
||k    r|nd}|                     |¦  «        |
z   }|                     |¦  «        |z   }|                     |¦  «        dz   }t          j        |                     |¦  «        ¦  «        }|                     |¦  «        }|t          u r|d|                     |¦  «        z  z  }|                     t          ||||¦  «        ¦  «         Œä|S )Nr*   é   r   r   r(   )
r   r!   r"   r5   Úrandintr   r1   rs   Úappendr   )r$   r   r€   r{   r    Ún_repÚ	longest_hrt   r�   Ú_Úp_addÚq_addÚpÚqrV   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   re   )rb   rb   ©ÚnpreÚnpostr�   Úantisymmetric)g      @r   r9   éýÿÿÿéþÿÿÿr9   r   r)   r*   r   r9   r•   r–   r9   r   r)   Úantireflect)rZ   r)   r*   r   r9   r   r   r)   r*   r   r9   r   r   r)   r*   r   Úsmooth)g      Àéüÿÿÿr•   r–   r9   r   r   r)   r*   r   r9   r•   éûÿÿÿiùÿÿÿi÷ÿÿÿiõÿÿÿÚliner9   r   r   ©r�   N)
r   Úarrayrr   r
   r   r   r4   Úconcatenater\   r   )
r$   r�   r   r’   r“   rI   Ú
y_expectedÚ	lin_slopeÚleftÚrights
             r   Útest_extensionszTestUpfirdn.test_extensionsÞ   sm  € õ ŒH�\�\�\­Ð/Ñ/Ô/ˆØ‰ˆˆeÝ�a˜d¨%°dÐ;Ñ;Ô;ˆØ�?Ò"Ð"ÝœØJÐJÐJñLô LˆJˆJà�]Ò"Ð"ÝœØDÐDÐDñFô FˆJˆJà�XÒÐÝœØNÐNÐNñPô Pˆ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é   )rW   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   re   )r   r   r�   )r”   r—   r˜   r›   r‘   rœ   r[   g      Y@rn   )r   r!   r"   r0   r1   r2   r3   r4   Úrealr   r   r
   r\   ÚfinfoÚepsr   )r$   r7   Úh_lenr�   r   rt   r   r   rI   ÚnpadÚxpadÚypadrŸ   ro   rp   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)rK   rL   rM   rU   ÚpytestÚmarkÚparametrizer^   ra   rg   rw   Ú_UPFIRDN_TYPESrz   Úlistr   rƒ   r~   r	   r£   r   rB   rF   r2   r3   r®   rO   r   r   rQ   rQ   t   sø  € € € € € ð=ð =ð =ð
 „[×Ò˜W o o oÑ6Ô6Ø„[×Ò˜W o o oÑ6Ô6ð!ð !ñ 7Ô6ñ 7Ô6ð!ð8ð 8ð 8ð „[×ÒÐ?Ø	
ˆ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   rQ   c                  óJ   — d} d}d}d}t          | |||¦  «        }|dk    sJ ‚d S )Nié  i áõi@  i¹  i¸6S)r   )rV   Úin_lenr   r   Úout_lens        r   Útest_output_len_long_inputr·     sD   € ð €EØ€FØ	€BØ€DÝ˜% ¨¨TÑ2Ô2€Gð �hÒÐÐÐÐÐr   rx   )Únumpyr   Ú	itertoolsr   Úscipy._lib._array_apir   r¯   r   rS   Úscipy.signalr   r   Úscipy.signal._upfirdnr   r	   Úscipy.signal._upfirdn_applyr
   r   r   rq   rB   r2   rr   rs   r²   rQ   r·   rO   r   r   ú<module>r¾      s2  ððF Ð Ð Ð Ø Ð Ð Ð Ð Ð à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø *Ð *Ð *Ð *Ð *Ð *Ø €€€à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ð	ð 	ð 	ð 	ð3/ð 3/ð 3/ð 3/ð 3/ñ 3/ô 3/ð 3/ðl �r”z 2¤<°¸Ð@€ð^=ð ^=ð ^=ð ^=ð ^=ñ ^=ô ^=ð ^=ðBð ð ð ð r   