
    bi=B                         d dl Z d dlZd dlZd dlmZ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 G d d      Zy)    N)is_cupyxp_assert_closexp_default_dtype	concat_1d)symiirorder1_icsymiirorder2_ic_fwdsymiirorder2_ic_bwd)symiirorder1symiirorder2c                    ||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       @      ?      )npabspowercostansin)kcsrsqomegacssqrsupkc0gammas           Z/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/signal/tests/test_splines.py_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G    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   r&   >gH׊>atolrtolr,   r   )getattrr'   r)   intmathceillogasarrayonesr   r   r   arange)
selfr&   r+   xpc_precisionbn_expexpectedx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 )Nr1   d   r2   r   r   r   )r=   r(   pytestraises
ValueErrorr   )r?   r@   rB   rE   r+   s        r   test_symiir1_ic_failsz TestSymIIR.test_symiir1_ic_failsO   sl     GGCrzzG* QK	j/1aC 	j/1c2>j/1c2>r!   cupyzinternals are numpy-only)cpu_only
exceptionsr%   zsum did not converge)r%   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/   r0   g333333?r1      r2   r   rJ   r   >v!>r4   )r7   r'   r)   r=   r8   r9   r:   r;   r<   astyper>   zerosrangeflipr
   r   )r?   r&   r+   r@   rA   r   z1nsignalrC   initialposcomp1comp2comp3expected_fwdsym_condexp_outiouts                       r   test_symiir1zTestSymIIR.test_symiir1^   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!   r'   r(   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     sizer,   皙?)gzj?g|ꚁ?g7F?g$d"?gv)u?gx?gF4˯0?g/yR?gdOm6wP?g^ۂ?gnI:5?g(?giԴIM?g|
?gIq?g?r2   gV瞯<gHz>r5         ?      ?)r   randomRandomStateuniformrV   r7   r<   r
   r&   r(   r'   r   result_typer)   r*   )	r?   r&   r@   rngsresexp_resr5   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/   r0   r,   r2         @r   r         rI   rT   rU   r4   )r7   r'   r)   r<   r   pir   r:   r;   r   r9   minr   rV   r=   r   r   )r?   r&   r+   r@   rA   rr   r   ublbrC   fwd_initial_1fwd_initial_2rD   r[   r\   rf   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>tQwG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/   r0   r,   r2   r{   r   r   rI   r   rJ   rT   rU   r4   )r7   r'   r)   r<   r~   r   r=   r   rW   rX   r>   r    r   cumsumnonzerocumulative_sumr	   r   )r?   r&   r+   r@   rA   r   r   r   a2a3r[   r\   icrf   re   ic2idxdiff	ic2_0_allr^   	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!   )rP   r%   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 )Nr,   r{   r   r   rI   r2   r   r|   rJ   rT   rU   r4   )r7   r9   r~   r   r=   r   r<   r   rW   rX   r	   emptyrY   r   r   )r?   r&   r+   r@   r   r   r   r   r   r[   r\   	signal_npr   out1re   r   exprf   s                     r   test_symiir2zTestSymIIR.test_symiir2A  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)Nri   rj   rk   rm   g|=)r+   )g윏 ?g_VQQ/?g|n4T?gAٌ?gJ8]<?gZ(Z?gTV?gRs?g?gd'Q?g*&?g$SЊ?g%֘?g4O?gM4?g!?r2   r3   rn   ro   r,   )r   rp   rq   rr   rV   r<   r   r(   r7   r   r   rs   r)   rK   rL   	TypeErrorrM   )	r?   r   r@   rt   ru   r&   rv   rw   rx   s	            r   test_symiir2_valueszTestSymIIR.test_symiir2_valuesl  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 )NrI   r   rJ   r   r,   )whererV   r>   boolr<   r
   r   r   r?   r@   ru   rD   rf   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 )NrI   r   rJ   r   r,   r{   )	r   rV   r>   r   r<   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_backendsrK   markparametrizerG   rN   xfail_xp_backendsrg   ry   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#   )r9   numpyr   rK   scipy._lib._array_apir   r   r   r   scipy.signal._spliner   r   r	   scipy.signalr
   r   r   r   r   r    r#   r   r!   r   <module>r      sS       W W? ? 3;;// KK11 HL' L'r!   