
    biJ                        d dl Z d dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZ ej                  j                   Zej                  j"                  ZegZ G d d      Zej(                  ej*                  eej.                  ej*                  ej*                  eeej2                  ej2                  eeiZ ed       G d	 d
             Z eej:                        d        Z eej>                        d        Z y)    N)assert_almost_equalxp_assert_closexp_assert_equalmake_xp_test_casexp_default_dtypearray_namespace_xp_copy_to_numpy)raises)signalc                      e Zd ZdZ eej                        d        Z eej                        d        Z eej                        d        Z
 edd       eej                        d               Z eej                        d	        Z eej                        d
        Z edd       eej$                        d               Z edd       eej(                        d               Zy)TestBSplinesa  Test behaviors of B-splines. Some of the values tested against were
    returned as of SciPy 1.1.0 and are included for regression testing
    purposes. Others (at integer points) are compared to theoretical
    expressions (cf. Unser, Aldroubi, Eden, IEEE TSP 1993, Table 1).c                    t         j                  j                  d      }t        t        t
        j                  |j                  dg      d       |j                  dd      }ddd|z  z
  z  }|j                  |      }|j                  g dg dg d	g d
g dg dg dg dg dg dg dg dg|j                        }t        t        j                  |d      |       y )N0  r      
         )g7ݿgD @g5P?gB߸"@gyӼ®@gE5`@g&)#@gEf!g<@gSbυ.X gFgg$`#@)gI<M$k@gYvR@gd)B	g,#@gd?H#gk"`	@g)k	gi	V@gH-Q#@gn)Ҕ g3%0?g@	)gAZg9s@g /{Dg٩@gEC@g'UE@gآ?@gւ gzk@ga"@g򿽴~gKG#@)g$9gL|wglT@g?ss}aJ?g7iH^	gt,`?gh@glA1mg(T#g* #gDV#@g@)g'"@ga+ٓgE=a@g:"gIV@g5@gYd\gі1pg"2 g:i@gi^J @g`HQ!)g^!g#Mƽ!@g论H&@gfQq@g%gm̂r!@g
,@gY bgY#@g/-i@g Vqg")gH"@ggʜ6@ggeg&P@gY2#Cg
0@g|0g *!/@g(gqq?g)a)gF!Ígzǫg^geF?g
O0!gV<gtСg%9W@g^[H#@g3Fz?g.5 gsd?)g놎g,
@gA/u@g`9ogebgȀ@gMgZa@g<ˉ8g:ɘ%@gdH	g4g:Ns@)gg-ҿgE- g)in"@gd.xg2~wgďgYr4Q?gkM-:g,@g+ @gVu)g@+_$?gKGj?g[ C$}@g_gD/X@gHgJSʌ@g@ggN+gë	gk8gjZ@)gݵB`#@g+N?g	gg'g=!"F@gƱҟ"g'-:@g#g'gj \B@g~ge@g$q߼dtype)nprandomRandomStater
   	TypeErrorr   spline_filterasarrayrandfloat64r   )selfxprngdata_array_realresult_array_reals        [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/signal/tests/test_bsplines.pytest_spline_filterzTestBSplines.test_spline_filter   s    ii##E*y&..

A3C((2r*a/ 112**_5JJ@@?@@@@?@@A@C#AF IK

I ' $TJ 	,,_a@)	+    c           
      r   t         j                  j                  d      }|j                  dd      |j                  dd      dz  z   }ddd|z  z
  z  }|j	                  |      }|j	                  g dg dg d	g d
g dg dg dg|j
                        }t        t        j                  |d      |d       y )Nr      y              ?r   y      ?      ?r   )y$
ݿ%)y @;;R@yH?k៌"y?!@3⟥@yʱƯ@bȺ@ymտ5a@,y`#@A4p)yF! y韷@@_@yw.X /@ @y4 L &Q!yjٿ_#@!yߟk@a
 ƽ!@ySh?@ӿ&@)y?@	X@@yH:#@~%yXH#r!@y} "`	@)ƿ@y@k	ubyoU@I"$#@yA Q#@,i@)yb@r ߂KqyӔ?Ȥ"yr	"@y%`Zv.y$?s@*  7@yxebeyC@P@)y?M@k9FyθUE@4%@@y[y@#?0yN 5H /@ywk@y"a"@$?y~H)y}?\#@A?y	dy{_( y^p@;^F?yu?aJ?U 0!y\@^	Kyx_?+ߡ)yl.@@9UY@yNЪmxp[H#@yDT#bz?yh #F5 y#@^d?y<@V?y{?"@&@@r   r   gư>)rtol)	r   r   r   r   r   
complex128r   r   r   )r   r   r    data_array_complexresult_array_complexs        r#   test_spline_filter_complexz'TestBSplines.test_spline_filter_complexL   s    ii##E* XXa^chhq!nR.??a(:&:!:;ZZ(:;!zz&&&%+&%1&6 .0]]9  *  <@ 	,,-?C,4	9r%   c                     t        j                  t        j                  dd      d      sJ t	        t        j                  |j                  dg      d      |j                  dg      d       y )Nr   g<~?      ?r   g?g&.>atol)mathiscloser   gauss_spliner   r   )r   r   s     r#   test_gauss_splinezTestBSplines.test_gauss_splinew   sV    ||F//157HIII++BJJt,<a@

J<0t	
r%   Tz$deliberate: array-likes are acceptednp_onlyreasonc                 v    g d}t        t        j                  |d      t        j                  g d             y )N)              r9      )硫Y.?gye~?r<   )r   r   r3   r   r   )r   r   knotss      r#   test_gauss_spline_listz#TestBSplines.test_gauss_spline_list   s-     "F//q9JJ'JK	
r%   c                    t        t        j                  |j                  dg            |j                  dg|j                               |j                  g d|j                        }t        t        j                  |j                  g d      d      |       |j                  g d|j                        }t        t        j                  |j                  g d            |       y )Nr   r:   r   )g{߮]?gzU%?gz@g6fw@gven'@r.   r   r;         r   )g|-?g>!<m @g6L@glMO@g>}@)r   r   	cspline1dr   r   r   )r   r   c1dc1d0s       r#   test_cspline1dzTestBSplines.test_cspline1d   s    ((QC9

B4rzz
:	<jj &-/ZZ  9 	((4D)EqI3Ozz '.0jj  :((4D)EFMr%   c                    t        t        j                  |j                  dg            |j                  dg|j                               t        t        t        j                  |j                  g d      d       t        t        t        j                  |j                  g d      d       |j                  g d|j                        }t        t        j                  |j                  g d|j                              |       y )Nr   r:   r   r@   r.   r9   )g)`O?gAk2 @g@go@g5ڕ@)r   r   	qspline1dr   r   r
   
ValueErrorr   )r   r   q1d0s      r#   test_qspline1dzTestBSplines.test_qspline1d   s    ((QC9

B4rzz
:	< 	z6++RZZ8H-I2Nz6++RZZ8H-I3Ozz '.0jj  :RZZ(8

ZKLd	
r%   cupyz&https://github.com/cupy/cupy/pull/9484r7   c           	         t        j                  |j                  ddg|j                        |j                  dg|j                              }t	        ||j                  dg|j                               t        j                  |j                  g d|j                        |j                  g |j                              }t        ||j                  g |j                               t        j                  |j                  g d|j                        |j                  dg|j                              }t	        ||j                  dg|j                               g d}|d   |d   z
  }g d	}|j                  g d
      }|j                  t        j                  t        |                  }|j                  g d|j                        }t	        t        j                  ||j                  |      ||d         |       t        j                  t        d      5  t        j                  |j                  g |j                        |j                  dg|j                               d d d        y # 1 sw Y   y xY w)Nr:   r   r   r.   r   r   r9   gQUU?
r   r   r   r;   rA   rB      r   &g      g      g      g      g      g      g      g      g       g      r9   g      r:         ?r.   g      ?       @      @      @g      @      @g      @g      @      @      @g      @g      @g      @       @g      !@g      "@g      #@g      $@g      %@g      &@g      '@g      (@g      )@
gw/@~jt@&1@Zd;@K7	@Zd@"~@jt@tV?K7A`@)&ra   SW@r`   7.O@r_   00/@g)-3/@rj   r_   ri   r`   rh   ra   ^:@rb   4Ev@rc   c4~#.@rd   uyJ9@re   /~	@rf   Y@@rg   rp   rf   ro   re   rn   rd   rm   rc   rl   rb   rk   ra   rh   dxx0+Spline coefficients 'cj' must not be empty.match)r   cspline1d_evalr   r   r   r   rC   r	   pytestr
   rI   	r   r   rxrr   newxycjnewys	            r#   test_cspline1d_evalz TestBSplines.test_cspline1d_eval   s    !!"**b!WBJJ*"G!zz2$bjjzAC2::rd"**:=>!!"**Zrzz*"J!zz"BJJz?A2::b

:;< !!"**[

*"K"$**dV2::*"FH2::zl"**:EF-qTAaD[ JJ & 'ZZ(():1)=>?zz : BD  M 	!!"bjj&62!A$G	
 ]]:"OQ 	G!!"**Rrzz*"B"$**cU"***"EG	G 	G 	Gs   &AI==Jc                 f   t        t        j                  |j                  ddg      |j                  dg            |j                  dg             t	        t        j                  |j                  g d      |j                  g             |j                  g              t        j                  |j                  g d|j
                        |j                  dg|j
                              }t	        ||j                  dg|j
                               g d}|d   |d   z
  }g d	}|j                  g d
      }t        j                  |      }|j                  g d|j
                        }t        j                  ||j                  ||j
                        ||d         }t        ||       t        j                  t        d      5  t        j                  |j                  g |j
                        |j                  dg|j
                               d d d        y # 1 sw Y   y xY w)Nr:   r   rO   r   r9   g      ?rP   r   rU   r^   )&ra   TW
@r`   oR@r_   bP@geW/@r   r_   r   r`   r   ra    B@rb   HG(@rc   nfWΜ=@rd   %d	O@re   u#	@rf   )C@rg   r   rf   r   re   r   rd   r   rc   r   rb   r   ra   r   rq   rt   ru   )
r   r   qspline1d_evalr   r   r   rH   rx   r
   rI   ry   s	            r#   test_qspline1d_evalz TestBSplines.test_qspline1d_eval   s    	--bjj"a.A2::rdCST

B4(	
 	--bjj.DbjjQSnU

2	

 !!"**[

*"K"$**dV2::*"FH2::tfBJJ:?@-qTAaD[ JJ & 'a zz : BD  M !!

4rzz
2rad
 	4 ]]:!NP 	G!!"**Rrzz*"B"$**cU"***"EG	G 	G 	Gs   AH''H0N)__name__
__module____qualname____doc__r   r   r   r$   r,   r3   r4   skip_xp_backendsr>   rC   rF   rH   rK   xfail_xp_backendsrw   r   r   r    r%   r#   r   r      s<   H
 v++,/+ -/+b v++,(9 -(9T v**+
 ,
 d+QRv**+
 , S
 v''(	N )	N v''(

 )

 v&NOv,,-%G . P%GN v&NOv,,-%G . P%Gr%   r   T)r6   c                      e Zd Zd Zd Zej                  j                  dej                  e
ej                  eej                  eg      d        Z edd      ej                  j                  dej                  e
ej                  eej                  eg      d               Z edd      ej                  j%                  d	
      d               Z edd      ej                  j%                  d
      ej                  j(                  ej                  j                  dej                  e
ej                  eej                  eg      d                             Zy)TestSepfir2dc           	      D   |j                  g d      }t        j                  j                  dd      }|j                  |      }t	        j
                  |||dd         t        j                  t        d      5  t	        j
                  |||dd         d d d        t        j                  t        d      5  t	        j
                  ||dd  |       d d d        t        j                  t        d      5  t	        j
                  ||j                  |d	      |       d d d        t        j                  t        d      5  t	        j
                  |||j                  |d	             d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   y xY w)
Nr.   rW   rZ   rW   r.   r'   	   r   z
odd lengthru   r   object too deep)r   rS   )
r   r   r   r   r   sepfir2drx   r
   rI   reshaper   r   filtimages       r#   test_sepfir2d_invalid_filterz)TestSepfir2d.test_sepfir2d_invalid_filter   sK   zz34		q!$

5!tT!"X. ]]:\: 	3OOE4ab2	3]]:\: 	3OOE48T2	3 ]]:->? 	DOOE2::dG#<dC	D]]:->? 	DOOE4D')BC	D 	D	3 	3	3 	3	D 	D	D 	Ds0   :E28E>6(F
(F2E;>F
FFc                    |j                  g d      }t        j                  j                  dd      }|j                  |      }t	        j
                  t        d      5  t        j                  |j                  |d      ||       d d d        t	        j
                  t        d      5  t        j                  |dd d f   ||       d d d        y # 1 sw Y   LxY w# 1 sw Y   y xY w)Nr      r   ru   )rA   rA   rA   zobject of too small depthr   )
r   r   r   r   rx   r
   rI   r   r   r   r   s       r#   test_sepfir2d_invalid_imagez(TestSepfir2d.test_sepfir2d_invalid_image  s    zz34		q!$

5! ]]:->? 	FOOBJJui8$E	F ]]:-HI 	5OOE!Q$Kt4	5 	5	F 	F	5 	5s    (C+CCC(dtypc                    t        j                  g dg dg dg dg|      }g d}dg}t        j                  |||      }t        |   }t        j
                  g dg dg dg dg|      }t        ||d       t        j                  |||      }t        j
                  g dg dg dg dg|      }t        ||d       y )	N)r   r   r;   r;   r   r   r   rV   r   rV   r   )rX   rZ   r[   r[   rZ   rX   gؗҜ<r/   )rW   rZ   r\   r\   rZ   rW   )r   arrayr   r   sepfir_dtype_mapr   r   )	r   r   r   ah1h2resultdtexpecteds	            r#   test_simplezTestSepfir2d.test_simple  s    
 HH((((* 267 SB+d#::====? GIJ 	u5B+::77779 ACD 	u5r%   TzTODO: convert this testr5   c                 F   t        j                  g dg dg dg dg      }g ddg}}t        j                  |d d d d df   ||      }t        j                  |d d d d df   j	                         ||      }t        ||d       |j                  |j                  k(  sJ y )N)	r   r   r;   r;   r   r   r   r   r;   r   r   r   V瞯<r/   )r   r   r   r   copyr   r   )r   r   r   r   r   r   result_stridedresult_contigs           r#   test_stridedzTestSepfir2d.test_strided5  s    
 HH10002 3 B1cc6B;!SqS&	(8"bAEB##}':'::::r%   z#XXX: filt.size > image.shape: flakyrM   c           
         t        j                  g d      }t         j                  j                  dd      }t        j                  g dg dg dg dg      }t        t        j                  |||d d d         |       y )N)r.   rW   rZ   rW   r.   rY   rW   rA   )g!SB@g¿3=>@gs`[C@gsLhE@)gͨ*C@g5A@g;/K;E@g<f2E@)gE@g>#jD@gB`G@g]n0a#F@)gٕzH@g|FC@gǜgKE@gCF@r;   )r   r   r   r   r   r   r   r   )r   r   r   r   r   s        r#   test_sepfir2d_strided_2z$TestSepfir2d.test_sepfir2d_strided_2D  si    
 xx;<		q!$::K L L LN O 	tT#A#Y?Jr%   z*XXX: flaky. pointers OOB on some platformsc                 2   t        j                  g d|      }t        j                  g dg dg dg dg dg|      }g dg d	g d
g dg dg}t        j                  |      }t        j                  |||d d d         }t        ||d       |j                  t        |   k(  sJ g dg dg dg dg dg}t        j                  |      }t        j                  ||d d d   |d d d         }t        ||d       |j                  t        |   k(  sJ y )N)r   r   rA   r   r   r;   r   r   )r   r;   r   r   r   )r   r   r;   r;   r;   )r   r   r;   r   r;   )r   r;   r   r   r;   )r;   r;   r   r   r   )g     ^@g     @Y@g     V@      a@g     _@)     `@g     @_@g     _@      c@g      d@)r   g      a@g     b@g     @d@g      f@)r   g      _@g     `@g     b@g     `b@)g     e@g     c@r   g     d@g     a@r;   r   r/   )g      6@g     A@     D@g      ?@     G@)g      ;@     C@      H@r   g     K@)g     @@g      E@g     H@g     J@g     M@)r   g      F@r   g      B@r   )g     P@g      O@r   g      A@g      G@)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   s          r#   test_sepfir2d_strided_3z$TestSepfir2d.test_sepfir2d_strided_3R  s    xx-T:

O++++	- 59	: 32222	4
 ::h'd3Q3i8u5||/5555-----	/
 ::h'SqS	4!9=u5||/5555r%   N)r   r   r   r   r   rx   markparametrizer   uint8intfloat32float	complex64complexr   r   r   xfailr   	fail_asanr   r   r%   r#   r   r      s[   D&
5 [[V	3

E2<<A66. d+DE[[V	3

E2<<A	; F	; d+DE[[CD
K E F
K d+DE[[JK[[[[V	3

E2<<A6  L F6r%   r   c                     t         j                  j                  d      }|j                  dd      }| j	                  |t        |             }t        j                  |d      }t        |      | k(  sJ y )NiW
G   I   r   r]   )	r   r   r   r   r   r   r   	cspline2dr   r   r    r   r   s       r#   test_cspline2dr   x  sc    
))

	
*CHHREJJu$4R$8J9EeS)F6"b(((r%   c                     t         j                  j                  d      }|j                  dd      }| j	                  |t        |             }t        j                  |      }t        |      | k(  sJ y )NiW
r   r   r   )	r   r   r   r   r   r   r   	qspline2dr   r   s       r#   test_qspline2dr     sa    
))

	
*CHHREJJu$4R$8J9Ee$F6"b(((r%   )!r1   numpyr   scipy._lib._array_apir   r   r   r   r   r   r	   rx   r
   scipyr   r   r   r   lazy_xp_modulesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r#   <module>r      s          ;;// KK11 (]G ]GB HHbjj#rzzJJ

E5LL",,B 
 $z6 z6  z6z 6##$) %) 6##$) %)r%   