Ë
    çÿæiÓ2  ã                   ó  — d dl Zd dlmZ d dlmZ d dlZd dlmZ	 d dl
mZmZmZmZmZ d dlm Z d dlmZmZ d dlmZmZ d d	lmZ ej4                  j6                  Zdd
„Z G d„ d«      ZdZ ee«       G d„ d«      «       Z ee«      d„ «       Z y)é    N)Úproduct)Úraises)Úarray_api_extra)Úxp_assert_closeÚarray_namespaceÚ_xp_copy_to_numpyÚis_cupyÚmake_xp_test_case)Únumpy)ÚupfirdnÚfirwin)Ú_output_lenÚ_upfirdn_modes)Ú	_pad_testc                 ó<  — t        j                  | «      } 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        út/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/scipy/signal/tests/test_upfirdn.pyÚupfirdn_naiver   7   s€   € ô
 	�
‰
�1‹€AÜ
�
‰
�1‹€AÜ
�(‰(”3�q“6˜B‘; §¡Ó
(€CØ€C‰ˆ"ˆ�IÜ
�+‰+�a˜Ó
™f ˜fÑ
%Ð&L¤{´3°q³6¼3¸q»6À2ÀtÓ'LÐ
M€CØ€Jó    c                   ó*   — e Zd ZdZddœd„Zd„ Zdd„Zy)ÚUpFIRDnCasezTest _UpFIRDn objectN©Úxpc                óÈ   — |€t         }|| _        || _        t        j                  |«      | _        || _        t        j                  j                  d«      | _	        || _
        y )Né   )Ú	np_compatr   r   r   Ú
atleast_1dr   Úx_dtypeÚrandomÚRandomStateÚrngr#   )Úselfr   r   r   r(   r#   s         r   Ú__init__zUpFIRDnCase.__init__F   sN   € Øˆ:ÜˆBØˆŒØˆŒ	Ü—‘˜qÓ!ˆŒØˆŒÜ—9‘9×(Ñ(¨Ó,ˆŒØˆ�r   c                 ól  — | j                  t        j                  d| j                  «      «       | j                  t        j                  d| j                  «      «       | j                  j                  d«      j                  | j                  «      }| j                  t        j                  t        j                  fv r!|d| j                  j                  d«      z  z  }| j                  |«       | j                  t        j                  d«      j                  | j                  «      «       t        | j                  «      ry d} | j                  j
                  |Ž j                  | j                  «      }| j                  t        j                  t        j                  fv r|d | j                  j
                  |Ž z  z  }t        t        |«      «      D ]  }| j                  ||¬«       Œ |d d …d d d…dd d…f   j                  }t        t        |«      «      D ]  }| j                  ||¬«       Œ y )Né   é
   ù              ð?)é   é   é   ©Úaxisr2   r3   )Úscrubr   Úonesr(   r+   ÚrandnÚastypeÚ	complex64Ú
complex128Úaranger	   r#   Úranger   ÚT)r,   r   Úsizer6   s       r   Ú__call__zUpFIRDnCase.__call__P   s�  € à�
‰
”2—7‘7˜1˜dŸl™lÓ+Ô,à�
‰
”2—7‘7˜2˜tŸ|™|Ó,Ô-à�H‰H�N‰N˜2Ó×%Ñ% d§l¡lÓ3ˆØ�<‰<œBŸL™L¬"¯-©-Ð8Ñ8Ø��d—h‘h—n‘n RÓ(Ñ(Ñ(ˆAØ�
‰
�1Œà�
‰
”2—9‘9˜R“=×'Ñ'¨¯©Ó5Ô6ä�4—7‘7ÔàØˆØˆD�H‰H�N‰N˜DÐ!×(Ñ(¨¯©Ó6ˆØ�<‰<œBŸL™L¬"¯-©-Ð8Ñ8Ø��n�d—h‘h—n‘n dÐ+Ñ+Ñ+ˆAÜœ#˜d›)Ö$ˆDØ�J‰J�q˜tˆJÕ$ð %àŠa‘�1��a�d˜�dˆl‰O×ÑˆÜœ#˜d›)Ö$ˆDØ�J‰J�q˜tˆJÕ$ñ %r   c                 ó²  — | j                   }t        j                  t        ||| j                  | j
                  | j                  «      }t        t        | j                  «      |j                  |   | j
                  | j                  «      }|j                  |   |k(  sJ ‚t        |j                  | j                  «      |j                  |«      | j
                  | j                  |¬«      }|j                  |   |k(  sJ ‚|j                  |j                  k(  sJ ‚| j                  j                  |j                  f}t        d„ |D «       «      r|j                  |j                  k(  sÈJ ‚t        j                  |v r-t        j                  |v r|j                  |j                  k(  s‰J ‚t        d„ |D «       «      r|j                  |j                  k(  s\J ‚t        j                   |v st        j                  |v r|j                  |j                   k(  sJ ‚|j                  |j"                  k(  sJ ‚|j                  ||j                  ¬«      }t%        ||«       y )Nr5   c              3   óB   K  — | ]  }|t         j                  k(  –— Œ y ­w©N)r   r;   ©Ú.0Úds     r   Ú	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>u   s   è ø€ Ð1©& Qˆq”B—L‘LÕ ©&ùó   ‚c              3   óB   K  — | ]  }|t         j                  k(  –— Œ y ­wrD   )r   Úfloat32rE   s     r   rH   z$UpFIRDnCase.scrub.<locals>.<genexpr>y   s   è ø€ Ð1©& Q�”b—j‘j•©&ùrI   ©r   )r#   r   Úapply_along_axisr   r   r   r   r   r   Úshaper   r   r   Úallr;   rK   r<   Úfloat64r   )r,   r   r6   r#   ÚyrÚwant_lenÚyÚdtypess           r   r7   zUpFIRDnCase.scrubj   s¾  € Ø�W‰WˆÜ× Ñ ¤°°aØ!%§¡¨¯©°$·)±)ó=ˆäœs 4§6¡6›{¨A¯G©G°D©M¸4¿7¹7ÀDÇIÁIÓNˆØ�x‰x˜‰~ Ò)Ð)Ð)Ü�B—J‘J˜tŸv™vÓ&¨¯
©
°1«°t·w±wÀÇ	Á	Øôˆà�w‰w�t‰} Ò(Ð(Ð(Ø�w‰w˜"Ÿ(™(Ò"Ð"Ð"Ø—&‘&—,‘, §¡Ð(ˆÜÑ1©&Ó1Ô1Ø—7‘7˜bŸl™lÒ*Ð*Ð*Ü�\‰\˜VÑ#¬¯
©
°fÑ(<Ø—7‘7˜bŸl™lÒ*Ð*Ð*ÜÑ1©&Ó1Ô1Ø—7‘7˜bŸj™jÒ(Ð(Ð(Ü�]‰]˜fÑ$¬¯©¸Ñ(>Ø—7‘7˜bŸm™mÒ+Ð+Ð+à—7‘7˜bŸj™jÒ(Ð(Ð(Ø�Z‰Z˜ !§'¡'ˆZÓ*ˆÜ˜˜AÕr   )éÿÿÿÿ)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   rA   r7   © r   r   r!   r!   D   s   „ ÙØ37ô ò%ô4r   r!   ©Úint64rK   r;   rP   r<   c                   ó"  — e Zd Z edd¬«      d„ «       Zej                  j                  dg d¢«      ej                  j                  dg d¢«      d„ «       «       Zd	„ Z	ej                  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                  j                  dg d¢«      ej                  j                  dg d¢«      d„ «       «       Zej                  j                  de«      ej                  j                  dd«      ej                  j                  dg d ¢«      d!„ «       «       «       Zej                  j                  de«      ej                  j                  d"e«      ej                  j                  d# e ed$d$«      «      «      d%„ «       «       «       Zd&„ Zej                  j                  d'e«      d(„ «       Zej                  j                  d) ed*gg d+¢eg d,¢«      «      d-„ «       Zy.)/ÚTestUpfirdnTzenough to only test on numpy)Únp_onlyÚreasonc                 ó    — 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«       y )Nr/   r   )Úassert_raisesÚ
ValueErrorr   )r,   r#   s     r   Útest_valid_inputzTestUpfirdn.test_valid_input‰   sD   € ä”j¤'¨A¨3°°°Q¸Ô:Ü”j¤'¨2°¨s°A°qÔ9Ü”j¤'¨Q¨C¨5°1°#°q¸!Õ<r   Úlen_h)r/   r2   r3   é   r4   Úlen_xc                 ó  — |j                  |«      }t        j                  |«      |dz     j                  d«      }|j	                  |«      }t        ||dd«      }t        j                  ||dz  |dz
  dz  fd|¬«      }t        ||«       y )Nr2   ç      ð?r/   Úconstantr"   )r   ÚxpxÚatÚsetr8   r   Úpadr   )r,   re   rg   r#   r   r   rS   Úwants           r   Útest_singletonzTestUpfirdn.test_singleton�   s   € ð �H‰H�U‹OˆÜ�F‰F�1‹I�e˜q‘jÑ!×%Ñ% bÓ)ˆØ�G‰G�E‹NˆÜ�A�q˜!˜QÓˆÜ�w‰w�q˜5 A™:¨°©	°aÑ'7Ð8¸*ÈÔLˆÜ˜˜4Õ r   c                 óf  — t        |j                  ddg«      |j                  dg«      dd«      }t        ||j                  ddg|j                  ¬«      «       t        |j                  ddg«      |j                  ddg«      dd«      }t        ||j                  g d¢|j                  ¬«      «       y )Nr/   ri   rL   ç        )rr   ri   ri   )r   r   r   rP   )r,   r#   rS   s      r   Útest_shift_xzTestUpfirdn.test_shift_xš   s“   € ä�B—J‘J  1˜vÓ&¨¯
©
°B°4Ó(8¸!¸QÓ?ˆÜØˆr�z‰z˜3 ˜*¨B¯J©JˆzÓ7ô	
ô �B—J‘J  1˜vÓ&¨¯
©
°B¸°8Ó(<¸aÀÓCˆÜ˜˜2Ÿ:™:¢o¸R¿Z¹Z˜:ÓHÕIr   z len_h, len_x, up, down, expectedr2   r4   )r/   r   r   r   r3   é   )r/   r   r/   r   r/   rf   )r/   r   r   r   r/   )r/   r   r   r/   r   é   )r/   r   r   r/   r   r   r/   c                 ó  — |j                  |«      }t        j                  |«      d   j                  d«      }|j	                  ||j
                  ¬«      }t        ||||«      }	|j                  ||j
                  ¬«      }t        |	|«       y )Nr   ri   rL   )	r   rk   rl   rm   r8   rP   r   r   r   )
r,   re   rg   r   r   Úexpectedr#   r   r   rS   s
             r   Útest_length_factorszTestUpfirdn.test_length_factors¦   ss   € ð �H‰H�U‹OˆÜ�F‰F�1‹I�a‰L×Ñ˜RÓ ˆØ�G‰G�E §¡ˆGÓ,ˆÜ�A�q˜"˜dÓ#ˆØ—:‘:˜h¨b¯j©j�:Ó9ˆÜ˜˜8Õ$r   r   r[   zdown, want_len))r2   i—  )ru   i�  )éO   é   c                 ó–  — t         j                  j                  d«      }d}t        t         |«      }|j	                  |«      j                  |«      }|t         j                  t         j                  fv r|d|j	                  |«      z  z  }t        ||«      }|j                  ||¬«      }|j                  t        dd|z  d¬«      «      }	|j                  t        t        |«      t        |	«      d	|«      «      }
t        |	|d	|¬
«      }|j                  |fk(  sJ ‚|
j                  d   |j                  d   k(  sJ ‚t        |
|dd¬«       y )Nr%   i'  r1   rL   é   ri   Úhamming)Úwindowr/   )r   r   r   gH¯¼šò×z>©ÚatolÚrtol)r   r)   r*   Úgetattrr9   r:   r;   r<   r   r   r   r   r   rN   r   )r,   r   rR   r   r#   Úrandom_stater@   Únp_dtyper   r   ÚylrS   s               r   Útest_vs_convolvezTestUpfirdn.test_vs_convolve¶   s&  € ô —y‘y×,Ñ,¨RÓ0ˆØˆäœ2˜uÓ%ˆØ×Ñ˜tÓ$×+Ñ+¨HÓ5ˆØœŸ™¤b§m¡mÐ4Ñ4Ø��l×(Ñ(¨Ó.Ñ.Ñ.ˆAä˜˜EÓ"ˆØ�J‰J�q ˆJÓ&ˆà�J‰J”v˜b " t¡)°IÔ>Ó?ˆØ�Z‰ZÜÔ+¨AÓ.Ô0AÀ!Ó0DÀaÈÓNó
ˆô �A�q˜Q TÔ*ˆØ�w‰w˜8˜+Ò%Ð%Ð%Ø�x‰x˜‰{˜aŸg™g a™jÒ(Ð(Ð(Ü˜˜A D¨tÖ4r   r(   r   )ri   r1   zup, down)©r/   r/   )r2   r2   )r3   r2   )r2   r3   c                 ó.   —  t        |||||¬«      «        y ©Nr"   )r!   )r,   r(   r   r   r   r#   s         r   Útest_vs_naive_deltazTestUpfirdn.test_vs_naive_deltaÔ   s   € ð 	1Œ�B˜˜a ¨RÔ0Õ2r   Úh_dtypezp_max, q_max)r0   éd   c                 óL   — | j                  |||||¬«      }|D ]	  } |«        Œ y r‰   )Ú_random_factors)r,   r(   r‹   Úp_maxÚq_maxr#   ÚtestsÚtests           r   Útest_vs_naivezTestUpfirdn.test_vs_naiveÚ   s.   € ð
 ×$Ñ$ U¨E°7¸GÈÐ$ÓKˆÛˆDÙ�Fñ r   c          
      óò  — d}d}t         j                  j                  d«      }g }	t        |«      D ]Ã  }
||kD  r|nd}||kD  r|nd}|j	                  |«      |z   }|j	                  |«      |z   }|j	                  |«      dz   }t        j
                  |j	                  |«      «      }|j                  |«      }|t        u r|d|j	                  |«      z  z  }|	j                  t        |||||¬«      «       ŒÅ |	S )Nr3   é   r%   r/   r1   r"   )
r   r)   r*   r>   Úrandintr'   r:   ÚcomplexÚappendr!   )r,   r�   r�   r‹   r(   r#   Ún_repÚ	longest_hrƒ   r‘   Ú_Úp_addÚq_addÚpÚqre   r   s                    r   rŽ   zTestUpfirdn._random_factorsã   s÷   € ØˆØˆ	Ü—y‘y×,Ñ,¨RÓ0ˆØˆä�u–ˆAà" Uš]‘E°ˆEØ" Uš]‘E°ˆEØ×$Ñ$ UÓ+¨eÑ3ˆAØ×$Ñ$ UÓ+¨eÑ3ˆAð !×(Ñ(¨Ó3°aÑ7ˆEÜ—‘˜l×2Ñ2°5Ó9Ó:ˆAØ—‘˜Ó!ˆAØœ'Ñ!Ø�R˜,×.Ñ.¨uÓ5Ñ5Ñ5�à�L‰Lœ Q¨¨1¨g¸"Ô=Õ>ð ð  ˆr   Úmodec                 ó<  — t        j                  g d¢t         j                  ¬«      }d\  }}t        ||||¬«      }|j                  |«      }|j                  |«      }|dk(  r|j                  g d¢«      }ný|dk(  r|j                  g d¢«      }nä|d	k(  r|j                  g d
¢«      }nË|dk(  r’|d   |d   z
  |j                  d   dz
  z  }|d   |j                  | dd|j                  ¬«      |z  z   }	|d   |j                  d|dz   |j                  ¬«      |z  z   }
t        |	«      j                  } ||	||
f«      }n4t        j                  t        |«      ||f|¬«      }|j                  |«      }|j                  ||j                  ¬«      }t        ||«       y)z@Test vs. manually computed results for modes not in numpy's pad.)r/   r2   r3   r/   rL   )rt   rt   ©ÚnpreÚnpostr    Úantisymmetric)g      @r/   rU   éýÿÿÿéþÿÿÿrU   r/   r2   r3   r/   rU   r¦   r§   rU   r/   r2   Úantireflect)ri   r2   r3   r/   rU   r   r/   r2   r3   r/   rU   r   r/   r2   r3   r/   Úsmooth)g      Àéüÿÿÿr¦   r§   rU   r   r/   r2   r3   r/   rU   r¦   éûÿÿÿiùÿÿÿi÷ÿÿÿiõÿÿÿÚlinerU   r   r/   ©r    N)r   r   rP   r   rN   r=   r   Úconcatrn   r   r   )r,   r    r#   r   r£   r¤   rS   Ú
y_expectedÚ	lin_slopeÚleftÚrightr®   s               r   Útest_extensionszTestUpfirdn.test_extensionsû   s�  € ô �J‰J’|¬2¯:©:Ô6ˆØ‰ˆˆeÜ�a˜d¨%°dÔ;ˆà�J‰J�q‹MˆØ�J‰J�q‹MˆØ�?Ò"ØŸ™ÚJóL‰Jà�]Ò"ØŸ™ÚDóF‰Jà�XÒØŸ™ÚNóP‰Jà�VŠ^Ø˜2™  1¡™¨!¯'©'°!©*°q©.Ñ9ˆIØ�Q‘4˜"Ÿ)™) T E¨1¨a°r·z±z˜)ÓBÀYÑNÑNˆDØ�b‘E˜BŸI™I a¨°©¸"¿*¹*˜IÓEÈ	ÑQÑQˆEÜ$ TÓ*×1Ñ1ˆFÙ  q¨%Ð 0Ó1‰JäŸ™Ô 1°!Ó 4°t¸U°mÈ$ÔOˆJØŸ™ JÓ/ˆJà—Z‘Z 
°"·*±*�ZÓ=ˆ
Ü˜˜:Õ&r   zsize, h_len, mode, dtypeé   )rf   r4   é   )rK   rP   r;   r<   c                 ó4  — t        |«      r|dk7  rt        j                  d¬«       t        t        |«      }t        ||«      }t        j
                  j                  d«      }|j                  |«      j                  |«      }	|dv r|	d|j                  |«      z  z  }	t	        j                  dd|z   |	j                  j                  ¬«      }
|j                  |	|¬«      }	|j                  |
«      }
t        |
|	dd|¬	«      }|dz
  }|d
v rt        t        |	«      |||¬«      }n!t	        j                   t        |	«      ||¬«      }|j                  |«      }t        |
|ddd¬	«      }|||  }|j#                  |«      j$                  dz  x}}t'        ||||¬«       y )Nrj   z&only mode='constant' supported by CuPy)r`   r4   )r;   r<   r1   r/   rL   )r   r   r    )r¥   r¨   r©   r¬   r¢   r­   g      Y@r   )r	   ÚpytestÚskipr‚   r   r)   r*   r9   r:   r=   Úrealr   r   r   r   r   rn   ÚfinfoÚepsr   )r,   r@   Úh_lenr    r   r#   Údtype_npÚdtype_xprƒ   r   r   rS   ÚnpadÚxpadÚypadr¯   r€   r�   s                     r   Ú
test_modeszTestUpfirdn.test_modes  sr  € ô �2Œ;˜4 :Ò-Ü�K‰KÐGÕHÜœ2˜uÓ%ˆÜ˜2˜uÓ%ˆä—y‘y×,Ñ,¨QÓ/ˆØ×Ñ˜tÓ$×+Ñ+¨HÓ5ˆØÐ/Ñ/Ø��l×(Ñ(¨Ó.Ñ.Ñ.ˆAÜ�I‰I�a˜˜U™¨!¯&©&¯,©,Ô7ˆà�J‰J�q ˆJÓ)ˆØ�J‰J�q‹Mˆä�A�q˜Q Q¨TÔ2ˆà�q‰yˆØÐEÑEäÔ.¨qÓ1¸ÀDÈtÔT‰Dä—6‘6Ô+¨AÓ.°¸4Ô@ˆDà�z‰z˜$ÓˆÜ�q˜$ 1¨1°:Ô>ˆØ˜$ ˜uÐ%ˆ
à—h‘h˜xÓ(×,Ñ,¨sÑ2Ð2ˆˆtÜ˜˜:¨D°tÖ<r   N)rV   rW   rX   Úskip_xp_backendsrd   r·   ÚmarkÚparametrizerp   rs   rx   r†   Ú_UPFIRDN_TYPESrŠ   Úlistr   r“   rŽ   r   r³   rÂ   rZ   r   r   r^   r^   †   sG  „ ñ ˜dÐ+IÔJñ=ó Kð=ð
 ‡[�[×Ñ˜W¢oÓ6Ø‡[�[×Ñ˜W¢oÓ6ñ!ó 7ó 7ð!òJð ‡[�[×ÑÐ?Ø	
ˆAˆq�!’\Ð"Ø	
ˆAˆq�!’_Ð%Ø	
ˆAˆq�!’_Ð%Ø	
ˆAˆq�!’_Ð%Ø	
ˆB��1Ò+Ð,ðBó ñ%óð%ð ‡[�[×ÑØÒKóð ‡[�[×ÑÐ-ò 0ó ñ
5óóð5ð, ‡[�[×Ñ˜Y¨Ó7Ø‡[�[×Ñ˜S (Ó+Ø‡[�[×Ñ˜ZÒ)IÓJñ3ó Kó ,ó 8ð3ð ‡[�[×Ñ˜Y¨Ó7Ø‡[�[×Ñ˜Y¨Ó7Ø‡[�[×Ñ˜^Ù!¡'¨)°YÓ"?Ó@óBñóBó 8ó 8ðò
ð0 ‡[�[×Ñ˜V ^Ó4ñ'ó 5ð'ð< ‡[�[×ÑØ"ÙØˆCÚØÚ=ó		
óñ=óñ=r   r^   c                 ó>   — d}d}d}d}t        ||||«      }|dk(  sJ ‚y )Nié  i áõi@  i¹  i¸6S)r   )r#   re   Úin_lenr   r   Úout_lens         r   Útest_output_len_long_inputrË   C  s8   € ð
 €EØ€FØ	€BØ€DÜ˜% ¨¨TÓ2€Gð �hÒÐÑr   r‡   )!r   r   Ú	itertoolsr   r·   r   rb   Ú
scipy._libr   rk   Úscipy._lib._array_apir   r   r   r	   r
   Úscipy._lib.array_api_compatr&   Úscipy.signalr   r   Úscipy.signal._upfirdnr   r   Úscipy.signal._upfirdn_applyr   rÄ   rÃ   r   r!   rÆ   r^   rË   rZ   r   r   Ú<module>rÓ      s’   ðóF Ý å *Û å -÷õ õ ;ß (ß =Ý 1à—;‘;×/Ñ/Ð ó
÷<ñ <ð~ L€ñ �7Ó÷y=ð y=ó ðy=ñx �7Óñó ñr   