
    ЏkhB                         d dl Z d dlZd dlZd dlmc mZ d dlm	Z	m
Z
mZ d dlmZmZmZ d dlmZmZ ej&                  j(                  Zej&                  j*                  Zd Zd Z G d d      Zy)	    N)is_cupyxp_assert_closexp_default_dtype)symiirorder1_icsymiirorder2_ic_fwdsymiirorder2_ic_bwd)symiirorder1symiirorder2c                 J      j                  t         fd|D                    S )Nc              3   N   K   | ]  }t        j                  |d         yw)   )ndimxpN)xpx
atleast_nd).0xr   s     [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/signal/tests/test_splines.py	<genexpr>znpr.<locals>.<genexpr>   s!     J3>>!!;;Js   "%)concattuple)r   argss   ` r   nprr      s    99UJTJJKK    c                    ||z  }t        j                  |       } t        j                  || dz        }|d|z   z  d|z
  z  dd|z  t        j                  d|z        z  z
  ||z  z   z  }d|z
  d|z   z  t        j                  |      z  }||z  t        j                  || z        |t        j
                  || z        z  z   z  S )N       @      ?r      )npabspowercostansin)kcsrsqomegacssqrsupkc0gammas           r   _compute_symiirorder2_bwd_hsr-      s    7D
q	AHHS!c'"E
#)
c	
*q3wE	***S3Y68B3Y39%u5E:	*URVVEAI5F-FFGGr   c            	          e Zd Z edd      ej
                  j                  dg d      ej
                  j                  dg d      d                      Z edd      d	        Z edd
gd       e	d
d       edd      ej
                  j                  dg d      ej
                  j                  dg d      d                                    Z
 e	d
d       edd
gd      ej
                  j                  dddg      d                      Z edd      ej
                  j                  dddg      ej
                  j                  dg d      d                      Z edd      ej
                  j                  dddg      ej
                  j                  dg d      d                      Z edd       edd      ej
                  j                  dddg      ej
                  j                  dg d      d                             Z edd
gd      ej
                  j                  dddg      d               Z edd
gd       e	d
d      d               Z edd
gd       e	d
d      d                Zy!)"
TestSymIIRTz(_ic functions are private and numpy-only)np_onlyreasondtype)float32float64	complex64
complex128	precision)g      gffffff?      ?g      ?gQ~?c                    t        ||      }|}|dk  s|dkD  r||j                  |j                  hv rd}nd}d}t        t	        j
                  t	        j                  |      t	        j                  |      z              }|j                  d||z  z
  d|z
  z  gg|      }d||z  z   }|j                  |dz   |      }t        t        |||      |dd	
       |j                  ||      }	t        j                  dd|	z  |z  z
  dd|	z  z
  z  gg|      }d|	|z  z   }d|j                  |dz   |       z  }t        t        |||      |dd	
       y )N        r   ư>dy=333333?r   r2   >gH׊>atolrtolr8   r   )getattrr3   r5   intmathceillogasarrayonesr   r   r   arange)
selfr2   r7   r   c_precisionbn_expexpectedr   b_ds
             r   test_symiir1_iczTestSymIIR.test_symiir1_ic!   sl    E"y3R\\22"# DIIdhh{3dhhqkABC::Q%ZAE :;<E:Jq8|# GGEAIUG+1i8(!	. jj%j(::C#I%''AsO<=>eMsX~% "))EAIU)3331i8(!	.r   c                    d}|j                  d|j                        }dd|z
  z  }t        j                  t        t
        |||       t        j                  t        t
        |dd       t        j                  t        t
        |dd       y )Nr=   d   r>   r   r   r   )rI   r4   pytestraises
ValueErrorr   )rK   r   rM   r   r7   s        r   test_symiir1_ic_failsz TestSymIIR.test_symiir1_ic_failsT   sl     GGCrzzG* QK	j/1aC 	j/1c2>j/1c2>r   cupyzinternals are numpy-only)cpu_only
exceptionsr1   zsum did not converge)r1   z	jax.numpyzitem assignment in testsc                 t   t        ||      }|}|dk  s|dkD  r||j                  |j                  hv rd}nd}d}d}d}|j                  ||      }t	        t        j                  t        j                  |      t        j                  |      z              }	|j                  d	||	z  z
  d	|z
  z  |      }
d	||
z  z   }
|j                  |j                  |      |      }|
||z  z  }|j                  ||      }| d	|z
  z  ||d d
 z  z  |d	d  |j                  ||      }d	d	|z
  z  |d	d  ||z   |z   }| |dz
  z  |d
   z  }|j                  ||      }||d<   t        d	|      D ]  }|||d	z
  |z
     z  |||d	z
     z  z   ||<   ! |j                  |      }t        ||||      }t        ||dd       y )Nr:   r   r;   r<   g333333?r=      r>   r   rT   r   >v!>r@   )rC   r3   r5   rI   rD   rE   rF   rG   rH   astyperJ   zerosrangeflipr	   r   )rK   r2   r7   r   rL   r+   z1nsignalrN   initialposcomp1comp2comp3expected_fwdsym_condexp_outiouts                       r   test_symiir1zTestSymIIR.test_symiir1c   s    E"y3R\\22"# %( DIIdhh{3dhhrlBCD**a"+o!b&9*Gb7l" ii		!e,"c'! %(C1r6NRSb\1ab	 %(RLab	u}u, 3"s(#l2&66 ((1E(*
q! 	LAl1q51955WQU^8KKGAJ	L '''"62r95W4d;r   r3   r4   c                 |   t         j                  j                  d      }|j                  d      j	                  |      }t        ||      }|j                  |      }t        |dd      }|j                  g d|j                        }|j                  d|j                  d	i|   }t        |||
       |j                  d|j                  ||j                              }||z  }t        |dd      }||j                  k(  r|j                  |j                  k(  sJ |j                  sJ t        |||z  |
       y )N     sizer8   皙?)gzj?g|ꚁ?g7F?g$d"?gv)u?gx?gF4˯0?g/yR?gdOm6wP?g^ۂ?gnI:5?g(?giԴIM?g|
?gIq?g?r>   gV瞯<gHz>rA         ?      ?)r   randomRandomStateuniformr`   rC   rH   r	   r2   r4   r3   r   result_typer5   r6   )	rK   r2   r   rngsresexp_resrA   I1s	            r   test_symiir1_valueszTestSymIIR.test_symiir1_values   s#    ii##D)KKRK ''.E"JJqM1c3' **   #yy	  *
 

E2::t4U;W40ZZ"..BLL9  
 F1c3',1RZZ,?syyBLL(RRR]]RRR'\5r   z1_initial_fwd functions are private and numpy-onlyc                    t        ||      }|}|dk  s|dkD  r||j                  |j                  hv rd}nd}|j                  d|      }|j                  t        j
                  dz  |      }dd	|z  |j                  |      z  z
  |d	z  z   }|j                  |j                  ||j                  |      z        t        j                  |      z        }|j                  t        j
                  |z        d	z
  }	t        ||	      }
|d	|z  |j                  |      z  z   |d	z  z
  ||
d	z   z  |j                  ||
d
z   z        z  |j                  |      z  z
  ||
d
z   z  |j                  ||
d	z   z        z  |j                  |      z  z   }|j                  |j                  ||j                  |      z        t        j                  |      z        }|j                  |j
                  |z        d
z
  }	t        ||	      }
||d	z  |z  |j                  |      z  z   |d	z  |j                  d
|z        z  |d
z  |j                  d	|z        z  z
  ||
d
z   z  |j                  ||
dz   z        z  z
  ||
dz   z  |j                  ||
d
z   z        z  z   |j                  |      z  z   }t        |||      d d d f   }|j                  ||      }d}t	        j                  ||      }t        ||||      }t!        ||dd       y )Nr:   r   r;   r<   r8   r>         @r   r         rS   r^   r_   r@   )rC   r3   r5   rH   r   pir"   rF   rG   r$   rE   minr   r`   rI   r   r   )rK   r2   r7   r   rL   rr(   r&   ublbrN   fwd_initial_1fwd_initial_2rO   re   rf   rp   s                    r   test_symiir2_initial_fwdz#TestSymIIR.test_symiir2_initial_fwd   s    E"y3R\\22"# JJs%J(

2553;e
4Q&&A- WWRVVK"&&-78488K;PPQWWTWWu_%)B EBFF5M!"qD 	NRVVEUQY$788266%=HI 	NRVVEUQY$788266%=H	I 	 WWRVVK"&&-78488K;PPQWWRUUU]#a'B a!bffUm++TBFF1u9%%TBFF1u9%%&^bffUeai%899: ^bffUeai%899: >@VVE]KK 	 r=-8qA99Xu-%(!&!UI>XDt<r   z1_initial_bwd functions are private and numpy-onlyc                 r   t        ||      }|}|dk  s|dkD  r||j                  |j                  hv rd}nd}|j                  d|      }|j                  |j                  dz  |      }dd	|z  |j                  |      z  z
  ||z  z   }d	|z  |j                  |      z  }| |z  }	d
}
|j                  |
|      }t        ||||      }|j                  |
d	z   |      }|d   |d d	 t        d	|
d	z         D ](  }|||d	z
     z  |||dz
     z  z   |	||d	z
     z  z   ||<   * |j                  d	|      }|j                  |
      }t        ||||z  |      t        |dz   |||z  |      z   }t        j                  ||d dd   z        }|j                  |d	z  |k        d   }||d      |d<   t        |dz
  |||z  |      t        |d	z   |||z  |      z   }|j                  ||d dd   z        }|j                  |d	z  |k        d   }||d      |d<   t!        ||||      d   }t#        ||dd       y )Nr:   r   r;   r<   r8   r>   r   r   r   rS   r   rT   r^   r_   r@   )rC   r3   r5   rH   r   r"   rI   r   ra   rb   rJ   r-   r   cumsumnonzerocumulative_sumr   r   )rK   r2   r7   r   rL   r   r(   r&   a2a3re   rf   icrp   ro   ic2idxdiff	ic2_0_allrh   	ic2_1_allout_ics                         r   test_symiir2_initial_bwdz#TestSymIIR.test_symiir2_initial_bwd  s    E"y3R\\22"#JJs%J(

2553;e
4Q&&Q.URVVE]"R!V%( !E9=hhq1uEh*Q%BQ q!a% 	LA&Q-'"s1q5z/9BQUOKCF	L hhqh&iil,S"a!eUC,S1Wb!a%GHIIdS!BZ/0	jj[01!43q6"A,S1Wb!a%G,S1Wb!a%GH %%dS!BZ&78	jj[01!43q6"A$S!UI>qA$T:r   )rZ   r1   c                 |   t        ||      }d}t        j                  dz  }dd|z  t        j                  |      z  z
  ||z  z   }d|z  t        j                  |      z  }| |z  }d}	|j	                  |	|      }
t        j                  |
      }t        ||||      }|j                  |      }|j                  |	dz   |      }|dd d f   |d d t        d|	dz         D ](  }||
|dz
     z  |||dz
     z  z   |||dz
     z  z   ||<   * t        t        j                  |      |||      d   }|j                  |      }|j                  |	|      }|j                  |      |dd  t        |	d	z
  d
d
      D ]%  }|||   z  |||dz      z  z   |||dz      z  z   ||<   ' t        |
|||      }t        ||dd       y )Nr8   r   r   r   rS   r>   r   r   rT   r^   r_   r@   )rC   rE   r   r"   rI   r   rH   r   ra   rb   r   emptyrc   r
   r   )rK   r2   r7   r   r   r(   r&   r   r   re   rf   	signal_npr   out1ro   r   exprp   s                     r   test_symiir2zTestSymIIR.test_symiir2F  s    E"#Q%((1q50UTXXe_$R!V%( JJv&	 Aui@ZZ^xxAUx+ad8Ra q!a% 	OA6!a%=(2QU+;;b4A;>NNDG	O ""**T"2AuiHKjjo hhqh&773<BCq1ub"% 	FA$q'\BQUO3b3q1u:oECF	F 61eY7St$7r   zC internalsdtypc                 6   t         j                  j                  d      }|j                  d      j	                  |      }|j                  |      }t        |      r|j                  nt        ||      }t        |ddd      }|j                  g d|      }t        ||d	
       |j                  d|j                  ||j                              }||z  }t        j                  t        t         f      5  t        |dd      }d d d        y # 1 sw Y   y xY w)Nrs   rt   ru   rw   g|=)r7   )g윏 ?g_VQQ/?g|n4T?gAٌ?gJ8]<?gZ(Z?gTV?gRs?g?gd'Q?g*&?g$SЊ?g%֘?g4O?gM4?g!?r>   r?   rx   ry   r8   )r   rz   r{   r|   r`   rH   r   r4   rC   r
   r   r}   r5   rU   rV   	TypeErrorrW   )	rK   r   r   r~   r   r2   r   r   r   s	            r   test_symiir2_valueszTestSymIIR.test_symiir2_valuesq  s     ii##D)KKRK ''-JJqM &bk

wr4/@1c3%8 ** !&	  
 	W40ZZbnnQ&EZFF]]Iz23 	,q#s+C	, 	, 	,s   8DDz#cupy does not accept integer arraysc                 <   |j                  |j                  |j                  d      dz  |j                        |j	                  d      |j	                  d            }t        |j                  |t        |            dd      }t        |dd      }t        ||       y )NrS   r   rT   r   r8   )wherer`   rJ   boolrH   r	   r   r   rK   r   r   rO   rp   s        r   test_symiir1_integer_inputz%TestSymIIR.test_symiir1_integer_input  s     HHIIbiinq("''2JJrNJJqM

  		!-=b-A BCM1c3'X&r   c                 p   |j                  |j                  |j                  d      dz  |j                        |j	                  d      |j	                  d            }t        |j                  |t        |            d|j                  dz        }t        |d|j                  dz        }t        ||       y )NrS   r   rT   r   r8   r   )	r   r`   rJ   r   rH   r
   r   r   r   r   s        r   test_symiir2_integer_inputz%TestSymIIR.test_symiir2_integer_input  s     HHIIbiinq("''2JJrNJJqM

  		!-=b-A BCQTU1c2553;/X&r   N)__name__
__module____qualname__skip_xp_backendsrU   markparametrizerQ   rX   xfail_xp_backendsrq   r   r   r   r   r   r   r    r   r   r/   r/      s   d+UV[[BD[[[*HI-. JD W-.^ d+UV? W? 6(3M v&<=k*DE[[BD[[[*HIB< JD F >B<H v&<=6(3M [[Wy)&<=6 > >
60 dPR[[)Y')[[[*HI>= J)R
>=@ dPR[[)Y')[[[*HI.; J)R
.;` t,FGk*DE[[)Y')[[[*HI$8 J) F H
$8L tO[[Vi%;< , = P ,D tOv&KL' M P' tOv&KL' M P'r   r/   )rE   numpyr   rU   scipy._lib.array_api_extra_libarray_api_extrar   scipy._lib._array_apir   r   r   scipy.signal._spliner   r   r   scipy.signalr	   r
   r   r   r   r   r-   r/   r   r   r   <module>r      s_       ( ( L L? ? 3;;// KK11 LHL' L'r   