
    Џkhm                        d dl Z d dlZd dlmZmZmZ d dlmZ d dl	m
Z d dlmc mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlm Z  d dl!m"Z" e jF                  jH                  Z$ G d	 d
      Z% G d d      Z& G d d      Z' G d d      Z( G d d      Z)ddddddZ* G d d      Z+ G d d      Z,y)    N)assert_equalassert_almost_equalassert_allclose)given)	rombnewton_cotescumulative_trapezoid	trapezoidquadsimpson
fixed_quadqmc_quadcumulative_simpson)%_cumulative_simpson_unequal_intervals)statsspecial	integrate)skip_xp_invalid_arg)xp_assert_closec                       e Zd Zd Zd Zy)TestFixedQuadc                 `    dddz  z  }t        fddd      \  }}t        ||d       y )	N         c                     | dz  dz
  z  S )Nr   r    )xns    a/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/integrate/tests/test_quadrature.py<lambda>z+TestFixedQuad.test_scalar.<locals>.<lambda>   s    a!A#'l     r   r   -q=rtol)r   r   )selfexpectedgot_r   s       @r    test_scalarzTestFixedQuad.test_scalar   s6    ac72AqA>QXE2r"   c                     d}t        j                  dd|z        ddz   z  }t        fddd|      \  }}t        ||d       y )	Nr   r   r   c                     | d d d f   z  S Nr   )r   ps    r    r!   z+TestFixedQuad.test_vector.<locals>.<lambda>"   s    a1d7m r"   r   r#   r$   r%   )nparanger   r   )r'   r   r(   r)   r*   r/   s        @r    test_vectorzTestFixedQuad.test_vector   sJ    IIa1a!e93QQ?QXE2r"   N)__name__
__module____qualname__r+   r2   r   r"   r    r   r      s    33r"   r   c                   x    e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  ddd	g      d
        Zy)TestQuadraturec                     t         r.   )NotImplementedError)r'   r   abargss        r    r   zTestQuadrature.quad'   s    !!r"   c                 T    t        t        t        j                  d            d       y )N      )r   r   r0   r1   r'   s    r    	test_rombzTestQuadrature.test_romb*   s    T"))B-(#.r"   c                     t        j                  d      }t        j                  d|z        }t        |      }t	        d |j                         |j                               \  }}t        ||dd       y )Nr>   皙?c                 2    t        j                  d| z        S )NrC   )r0   cosr   s    r    r!   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>2   s    266#a%= r"   g:0yE>r   r&   atol)r0   r1   rE   r   r   minmaxr   )r'   r   yvalval2errs         r    test_romb_gh_3731z TestQuadrature.test_romb_gh_3731-   sW    IIfFF3q5M1g0!%%'1557C	cT15r"   c                 V   d}t        |d      \  }}t        ||t        j                  ddg      z         t	        ||dz   dz         d}t        |d      \  }}t	        ||t        j                  g d      z  dz         t	        ||dz   d	z         d}t        |d      \  }}t	        ||t        j                  g d
      z  dz         t	        ||dz   dz         d}t        |d      \  }}t	        ||t        j                  g d      z  dz         t	        ||dz   dz         y)z5Test the first few degrees, for evenly spaced points.r         ?         (@r   )      ?      @rT         @   g     @)rT         @rX   rT          @g     P@r   )      @      @@rS   r[   rZ   g     V@   g     =AN)r   r   r0   arrayr   )r'   r   wtserrcoffs       r    test_newton_cotesz TestQuadrature.test_newton_cotes5   s   #Aq)WS!BHHc3Z001GadU4Z0#Aq)WC288O#<!<S!@AGadU6\2#Aq)WC288,@#A!A#!EFGadU6\2#Aq)WC288,H#I!I$!NOGadU9_5r"   c                 <   t        j                  g d      }|dz  }t        |      \  }}d}t        j                  ||      }t	        ||       t        j                  g d      }|dz  }t        |      \  }}d}t        j                  ||      }t	        ||       y)z9Test newton_cotes with points that are not evenly spaced.)        g      ?       @r   gUUUUUU@)rb   gffffff?g @rX         "@N)r0   r]   r   dotr   )r'   r   rK   r^   r_   exact_integralnumeric_integrals          r    test_newton_cotes2z!TestQuadrature.test_newton_cotes2K   s     HH_%qD#AW66#q>,n=HH)*qD#AW66#q>,n=r"   c           
      	   t        j                  d      }t        t        |      d       t        t        |d      d       t        t        |t        j                  ddd            d	       t        j                  d
dd      }d }t        t         ||      |      d       t        j                  d
dd      }t        t         ||      d      d       t        j                  d      j                  dd      }t        j                  d      j                  ddd      } ||      }t        d      D ]  }t        |||      }t        j                  |dg      }|D ]z  }t        |j                        }	|	j                  |t        d              |t        |	         d   dz  dz  |t        |	         d   dz  dz  z
  }
t        ||j                     |
       |  t        j                  d      j                  dd      } ||      }t        ||d      }d|d d d
f   |d d df   z   z  |d d d
f   |d d df   z
  z  }
t        ||
       t        j                  d      j                  dd      }t        j                  d      j                  ddd      } ||      }t        d      D ]  }t        |||      }t        j                  |dg      }|D ]z  }t        |j                        }	|	j                  |t        d              |t        |	         d   dz  dz  |t        |	         d   dz  dz  z
  }
t        ||j                     |
       |  t        j                  dg      }t        j                  |d      }t        t        ||d      d       t        t        ||d      d       t        j                  g d      }t        j                  |d      }t        t        ||d      d       t        t        ||d      d       t        j                  g dg dg dg      }t        j                  |d      }g d}d gdz  }t        t        ||d      |       t        t        ||d      |       t        j                  g dg dg d!g      }t        j                  |d      }g d"}g d#}t        t        ||d      |       t        t        ||d      |       y )$Nr>   r?   rQ   dx@   r   r   rF       r   c                     | dz  S )Nr   r   rF   s    r    fz&TestQuadrature.test_simpson.<locals>.fd   s    a4Kr"         5@r\   rc   r            P@rR   r   axismulti_index)flags   r      rW   }   rb   )rR   rR   rR   rR   )r   r   r   ry   )rb   rb   rb   rb   竪Je@)r   ry   rr   rm   )rb   g      a@g      @g      @)r|   r|   g*U@)r0   r1   r   r   linspacer   reshaperangenditerlistrv   insertslicetupler]   power)r'   rK   r   ro   r:   iritr*   idxintegral	zero_axisdefault_axiss                r    test_simpsonzTestQuadrature.test_simpson\   s.   IIbMWQZ%WQ3',WQ"++aB"78"= KK1a 	 	!*D1 KK1a !-s3 IIbM!!!Q'IIcN""1a+aDq 	=AQQ'A1]O4B =2>>*

1eDk*U3Z=,a/!3ac
mA6F6IA6MM".. 18<	=	= IIbM!!!Q'aDA$!AqD'AadG+,!Q$!AqD'0AB8$ IIbM!!!Q'IIcN""1a+aDq 	=AQQ'A1]O4B =2>>*

1eDk*U3Z=,a/!3ac
mA6F6IA6MM".. 18<	=	= HHaSMHHQNQQ/5QR0#6HH\"HHQNQQ/5QR0#6HHlL,?@HHQN(	!{QQQ/;QR0,?HHlL.ABHHQN0	>QQ/;QR0,?r"   droplastFTc                     t        j                  g dg dg      }|r|d d d df   }t        |d      }t        t        j                  |t         j                        d      }t	        ||       y )N)r   r   r   r   ry   ry   rW   )r   r   r   r   
      r   rx   ru   dtype)r0   r]   r   float64r   )r'   r   rK   resultr(   s        r    test_simpson_2d_integer_no_xz+TestQuadrature.test_simpson_2d_integer_no_x   sb     HH/35 6!SbS&	A$288ARZZ8rBVX&r"   N)r3   r4   r5   r   rA   rO   r`   rh   r   pytestmarkparametrizer   r   r"   r    r7   r7   &   sL    "/66,>"K@\ [[Z%7	' 8	'r"   r7   c                   r    e Zd Zd Zd Zd Zd Zej                  j                  dddg      d        Z
d	 Zy
)TestCumulative_trapezoidc                     t        j                  ddd      }|}t        ||d      }g d}t        ||       t        ||d       }t        ||dd         y )	Nr   r   rW   numr   initial)rb                r   rb   r   r0   r}   r	   r   )r'   r   rK   y_int
y_expecteds        r    test_1dz TestCumulative_trapezoid.test_1d   sT    KKA1%$Q15.
z*$Q48z!"~.r"   c                    t        j                  d      j                  ddd      }|}t        ||d      }t        j                  g dg dgg d	g d
gg dg dgg      }t        ||       g d}t        g d|      D ]O  \  }}t        ||d|      }t        |j                  d       t        ||d |      }t        |j                  |       Q y )N   rR   r   r   r   r   )rb   rQ   rc         @)rb   r         $@     0@)rb         !@      2@g     <@)rb         )@g      :@     @D@)rb   r   g      A@g     @J@)rb        4@g      E@g      P@))r   r   r   )rR   r   r   )rR   r   rR   r   r   r   )r   ru   )rR   r   r   )	r0   r1   r~   r	   r]   r   zipr   shape)r'   r   rK   r   r   shapesru   r   s           r    test_y_nd_x_ndz'TestCumulative_trapezoid.test_y_nd_x_nd   s    IIi ((Aq1$Q15XX 2 4 6 4 5 7 5 5 7	8 9
 	z* 3y&1 	-KD%(AqtDEi0(At$GEe,		-r"   c           	         t        j                  d      j                  ddd      }t        j                  d      dz  }t        j                  g dg dgg dg dgg      t        j                  g d	gg d
gg dgg      t        j                  g dg dgg dg dgg dg dgg      f}t	        g d|      D ]0  \  }}t        ||d |j                  |    |d       }t        ||       2 y )Nr   rR   r   r   )rU         @rV   rZ   )rY   rd   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@rs   g      Q@)rc   rX   rU   r   )r   r   rS         *@)r   g      3@      4@rp   )rQ   r   g     1@)r   rp   g     J@)r   g     B@g     `V@)r   g     J@g     `_@)r   g     @Q@g     0d@)r   g     @U@g     h@r   )r   ru   r   )r0   r1   r~   r]   r   r	   r   r   )r'   rK   r   ys_expectedru   r   r   s          r    test_y_nd_x_1dz'TestCumulative_trapezoid.test_y_nd_x_1d   s   IIi ((Aq1IIaL!O HH')+++-. / HH'(+,+,. / HH')')+))+	, -. !$I{ ; 	/D*(a.?d157EE:.	/r"   c                    t        j                  ddd      }t        |      }g d}t        ||       t        |d      }g d}t        ||       t        |d	
      }g d}t        ||       t        |d	d      }g d}t        ||       y )Nr   r   rW   r   )r   r   r   rb   r   r   )r   r   r   r   rb   rR   rj   )            r   rb   )rk   r   )r   r   r   r   rb   r   )r'   rK   r   r   s       r    test_x_nonez$TestCumulative_trapezoid.test_x_none   s    KKA1%$Q'*
z*$Q2-
z*$Q1-*
z*$Q1a8-
z*r"   r   r   rQ   c                     t        j                  ddd      }t        j                  t        d      5  t        ||       ddd       y# 1 sw Y   yxY w)z4If initial is not None or 0, a ValueError is raised.r   r   r   z	`initial`matchr   N)r0   r}   r   raises
ValueErrorr	   )r'   r   rK   s      r    test_initial_errorz+TestCumulative_trapezoid.test_initial_error  sC    
 KK22&]]:[9 	5 G4	5 	5 	5s   AAc                 |    t        j                  t        d      5  t        g        d d d        y # 1 sw Y   y xY w)NAt least one point is requiredr   rK   )r   r   r   r	   r@   s    r    test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_y  s.    ]]:-MN 	' 2&	' 	' 	's   2;N)r3   r4   r5   r   r   r   r   r   r   r   r   r   r   r"   r    r   r      sG    /-*/0+& [[As855'r"   r   c                       e Zd Zd Z edd      d        Z edd      d        Zed        Z edd	
      d        Z	y)TestTrapezoidc           	          |j                  ddd      }t        |j                  d|dz  z        |j                  d|j	                  |j
                        z        z  d      }t        ||j	                  d             y )Nr   g?g      r   rj   rT   )r1   r
   expsqrtasarraypir   )r'   xpr   r   s       r    test_simplezTestTrapezoid.test_simple  sd    IIc2r"bffS16\*RWWQBEE9J5J-KKPST2::c?+r"   z	jax.numpyz)JAX arrays do not support item assignment)reasonc                    |j                  ddd      }|j                  ddd      }|j                  ddd      }|j                  |      |d   |d   z
  z  }|dxx   dz  cc<   |dxx   dz  cc<   |j                  |      |d   |d   z
  z  }|dxx   dz  cc<   |dxx   dz  cc<   |j                  |      |d   |d   z
  z  }|dxx   dz  cc<   |dxx   dz  cc<   |d d d d f   |d d d d f   z   |d d d d f   z   }|j                  ||d d d d f   z  d      }	|j                  ||d d d d f   z  d      }
|j                  ||d d d d f   z  d      }t        ||d d d d f   d	      }t	        ||	       t        ||d d d d f   d	      }t	        ||
       t        ||d d d d f   d	      }t	        ||       t        ||d	      }t	        ||	       t        ||d	      }t	        ||
       t        ||d	      }t	        ||       y )
Nr   r   rR   r   ry      rx   r   rt   )r}   	ones_likesumr
   r   )r'   r   r   rK   zwxwywzqqxqyqzr   s                r    	test_ndimzTestTrapezoid.test_ndim  s)    KK1a KK1a KK1b!\\!_!qt,
1

2!\\!_!qt,
1

2!\\!_!qt,
1

2!atmqa.4a<@VVA1dD=))V2VVA4D=))V2VVA4q=))V2 a1Qd]+!42a1T!T\?32a1T4\?32 a11%2a11%2a11%2r"   c           
         |j                  |j                  ddd      d      }|j                  |j                  ddd      d      }|j                  ddd      }t        t        ||d      |       t        t        ||j	                  g d	      d      |       t        t        ||j	                  g d	      d d d f   d      |       t        j                  t              5  t        ||j	                  g d	      d d d f   d       d d d        |j	                  g d
      }t        t        ||d      |       t        t        ||j                  ddd      d      |       y # 1 sw Y   ^xY w)Nr         )rR   r      i|  r   rt   )r   r   r   )r   g     P`@g     k@r   	   )r~   r}   r   r
   r   r   r   	Exception)r'   r   r   rK   out0out1s         r    test_gh21908zTestTrapezoid.test_gh21908>  s5    JJr{{1b"-w7JJr{{1b"-w7{{3R(	!qq148	!rzz-'@qI4Pa2::m4QW=AF	
 ]]9% 	Ga2::m4T1W=AF	G zz/0	!qq148a2;;q!R0q9	
	G 	Gs   $'E((E1c                    t        j                  d      }||z  }|dk(  }t         j                  j                  ||      }d}t	        t        ||      |       t         j                  j                  ||      }t	        t        ||      |       t         j                  j                  ||      }t	        t        ||      |       y )NrW   r   )maskr   )r0   r1   mar]   r   r
   )r'   r   r   rK   r   ymr   xms           r    test_maskedzTestTrapezoid.test_maskedX  s     IIaLEAvUU[[[&	"a(!,UU[[[&	"b)1-UU[[[&	!R(!,r"   Tz,array-likes only supported for NumPy backend)np_onlyr   c                    t        t        d            }|D cg c]  }||z  	 }}|j                  ||j                        }|j                  ||j                        }t	        ||      }t	        ||      }t        ||       y c c}w )NrW   r   )r   r   r   r   r
   r   )	r'   r   r   trK   xarryarrresresarrs	            r    test_array_likezTestTrapezoid.test_array_likei  sz     qNqQUzz!2::z.zz!2::z.1o4&V$ s   BN)
r3   r4   r5   r   skip_xp_backendsr   r   r   r   r   r   r"   r    r   r     s|    , kHJ#J#J kHJ
J
0 - -  dKM%M%r"   r   c                      e Zd Zej                  j
                  d        ZddZej                  j                  dddg      ej                  j                  ddd	g      d
               Z	ej                  j                  dddgddgddgddgg      d        Z
ej                  j
                  ej                  j                  dddg      d               Zd Zy)TestQMCQuadc           	         d}t        j                  t        |      5  t        dddgddg       d d d        d}t        j                  t        |      5  t        d ddgddg       d d d        d }d	}t        j
                  t        |      5  t        |ddgddg       d d d        d
}t        j                  t        |      5  t        d ddgddgd       d d d        d}t        j                  t        |      5  t        d ddgddgd       d d d        d}t        j                  t        |      5  t        d ddgddgd       d d d        d}t        j                  t        |      5  t        d ddgddgt        j                  j                  d             d d d        d}t        j                  t        |      5  t        d ddgddgd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   7xY w# 1 sw Y   
xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz`func` must be callable.r   za duckr   r   z/`func` must evaluate the integrand at points...c                       yNr   r   r   r"   r    r!   z3TestQMCQuad.test_input_validation.<locals>.<lambda>~      r"   c                 N    | j                   dk(  sJ t        j                  |       S r  )ndimr0   r   rF   s    r    funcz/TestQMCQuad.test_input_validation.<locals>.func  s     66Q;;66!9r"   z8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                      yr  r   rF   s    r    r!   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r"   g     @)n_pointsz!`n_estimates` must be an integer.c                      yr  r   rF   s    r    r!   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r"   r   )n_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                      yr  r   rF   s    r    r!   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r"   )qrngz8`qrng` must be initialized with dimensionality equal to c                      yr  r   rF   s    r    r!   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r"   z,`log` must be boolean \(`True` or `False`\).c                      yr  r   rF   s    r    r!   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r"   r   log)
r   r   	TypeErrorr   r   warnsUserWarningr   qmcSobol)r'   messager  s      r    test_input_validationz!TestQMCQuad.test_input_validationv  s&   ,]]9G4 	/X1v1v.	/ D]]:W5 	0YAA/	0	 M\\+W5 	+TAq6Aq6*	+ 3]]9G4 	C[1a&1a&6B	C 6]]9G4 	C[1a&1a&cB	C M]]9G4 	A[1a&1a&x@	A M]]:W5 	K[1a&1a&uyyq7IJ	K B]]9G4 	:[1a&1a&b9	: 	:?	/ 	/	0 	0	+ 	+	C 	C	C 	C	A 	A	K 	K	: 	:s_   G*G7HHH;H+52H7I*G47HHHH(+H47I I   ry   Nc           	         |t        j                  d      }d}t        j                  |      t        j                  |      fdt         j                  j                  d      }t        j                  j                  ||      }t        j                  |      }t        j                  |      |z  }t        |||||      }	t        j                  j                  ||      }
t        j                  |dz
  d      |	j                  z  }t        |	j                   |
|	       t        j"                  |      |	j                   z  d
kD  sJ t         j                  j                  d      }t        j                  j                  ||      }t        fd||||d|      }t        t        j$                  |j                         |	j                   d       t        j&                  |j                         t        j"                  |      d
k  rt         j(                  nd
k(  sJ t        t        j$                  |j                        |	j                  dd       y )Nr   c                 Z    t         j                  j                  | j                        S r.   )r   multivariate_normalpdfT)r   covmeans    r    r  z$TestQMCQuad.basic_test.<locals>.func  s"    ,,00dC@@r"   l   ^^@E9? )seed)r  r
  r  )lower_limitr   gףp=
?rH   r   c                  4    t        j                   |        S r.   )r0   r  )r<   r  s    r    r!   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(; r"   T)r  r
  r  r  +=r%   缉ؗҜ<rG   )r0   oneszeroseyerandomdefault_rngr   r  r  r   r  cdfr   stdtritstandard_errorr   r   prodr   imagr   )r'   r  r
  signsr  rngr  r:   r;   r   refrH   logresr  r  r  s                @@@r    
basic_testzTestQMCQuad.basic_test  s   =GGAJExx~ffTl	A ii##$78yyt#.HHTNGGDME!tQH#.T;''++AtSa+H{1}e4s7I7IIc5wwu~cll*Q...ii##$78yyt#.;Q#+"/ 	v/EJwwv'RWWU^a5GBEEQOOOv445**U	Dr"   r  i   r
  rr   c                 (    | j                  ||       y r.   r4  )r'   r  r
  s      r    
test_basiczTestQMCQuad.test_basic  s     	+.r"   r0  r   rx   c                 (    | j                  |       y )N)r0  r6  )r'   r0  s     r    	test_signzTestQMCQuad.test_sign  s    e$r"   r  FTc                     d}t        j                  t        |      5  t        d ddgddg|      }d d d        j                  |rt
        j                   ndk(  sJ |j                  dk(  sJ y # 1 sw Y   ?xY w)Nz-A lower limit was equal to an upper limit, sor   c                      yr  r   rF   s    r    r!   z'TestQMCQuad.test_zero.<locals>.<lambda>  r  r"   r   r   r  )r   r  r  r   r   r0   infr-  )r'   r  r  r   s       r    	test_zerozTestQMCQuad.test_zero  sy     B\\+W5 	A;AAC@C	A||3A666!!Q&&&	A 	As   A11A:c                     d }t        |dd      }t        j                  j                  dd      t        j                  j                  dd      z
  }t	        |j
                  |d       y )Nc                 D    t         j                  j                  | d      S )Nr   scale)r   normr  rF   s    r    r  z-TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r"   r   r   r   r@  g{Gz?)r   r   rB  r+  r   r   )r'   r  r   r2  s       r    test_flexible_inputzTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r"   )r  ry   N)r3   r4   r5   r   r   thread_unsafer  r4  r   r7  r9  r=  rC  r   r"   r    r   r   u  s    [[": ":HD> [[Z$7[[]QG4/ 5 8/ [[W1vBx"a1b'&JK% L% [[[[UUDM2' 3 '1r"   r   rx   r   rk   r   ru   c                t  	 | j                   |   dk  r%|t        | |||d       S |t        | |||d      z   S t        j                  | |d      } t        j                  |      dkD  rt        j                  ||d      n|}t        j                  |      dkD  rt        j                  ||d      n|}t        j                  |      dkD  rt        j                  ||d      n|}| j                   d   	||t        j
                  	      z  n|}|d u }|rdn|}t        j                  || j                         }t        j                  || j                   d d dz         }t        j                  | ||fd      }	fd}t        j                  |d|      }|r	|d	dd f   n|}t        j                  |d|      }|S )
NrR   )r   rk   ru   r   r   rx   r   )r   r   c                 >    t        | d  | dz   | dz  d        S )Nr   )r   r   )r   )r   r   s    r    ro   z*cumulative_simpson_nd_reference.<locals>.f  s,    !!BQ%1Qqs8QqstWEEr"   .)	r   r	   r0   moveaxisr  r1   broadcast_toconcatenateapply_along_axis)
rK   r   rk   r   ru   initial_was_noner   ro   r   r   s
            @r    cumulative_simpson_nd_referencerM    s   wwt}q?'Q2D$OO1!qRdTUVVV 	AtR A$&GGAJNAtR A&(ggbkAoRr	"2B020@10Dbkk'4,'G 	
A^RYYq\A$#aG 	177#Aoogqwws|d':;G
1gR0AF


aQ
'C +#c12g,C
++c2t
$CJr"   c                   X   e Zd Z ej                  d      Zedz  Zej                  j                  dd      ej                  j                  dd      d               Z
ej                  j                  d ej                  dd	            ej                  j                  d
d      ej                  j                  dd      ej                  j                  dd      ej                  j                  dd      d                                    Zej                  j                  dd eg d      fd eeg dgeeg      fd eeeegeeegd      fd eg g       fd ed      fd e ej                  d            fd  e ej                  d      !      fd" ed# ej                  d      $      fg      d%        Zd& Zd' Zej                  j!                  d(      ej                  j"                  ej                  j$                   e ej*                  ej,                   ej.                  dd	d()       ej2                  d*d(d+,      j5                  d-       .      /      d0                             Zej                  j!                  d(      ej                  j"                  ej                  j$                   e ej*                  ej,                   ej.                  dd	d()       ej2                  d*d(d+,      j5                  d1       .      /      d2                             Zy#)3TestCumulativeSimpsonr   r   use_dx)FTuse_initialc                 *   t         j                  j                  d      }d}|rdnd}|j                         }|dk(  r$t        j                  |j                  |            n(t        j                  |      |z  |j                         z   }t        j                  |dz         d d t         j
                  f   }|j                  |dz         d d t         j
                  f   }	t        j                  |	||z  z  d      }
t        j                  |	||dz   z  z  |dz   z  d      }|r|n
||d   z
  dd  }|r|d   nd }|rd|ind	|i}t        |
fi |d
|i}|st        ||d       y |rdnd}t        ||d       t        ||d d   ||d d   d       y )N   F*BG r   rR   r   r   r   r   rk   r   r   gV瞯<r%   g{Gzd?)	r0   r)  r*  sortr1   newaxisr   r   r   )r'   rP  rQ  r1  r   orderrk   r   r   crK   Yr2  r   kwargr   i0s                    r    r   zTestCumulativeSimpson.test_1d   sy   
 ii##$89 ZZ\',zRWWSZZ]#))A,r/CJJL0 	
IIeai BJJ/JJuqy!!RZZ-0FF1QT6"FF1QQZ<Q'a0aQqtVQRL &!A$4$r
3( =e=W= C51!qBC62CAJBEE
?r"   ru   rR   x_ndim)r   rR   x_len)r   r   r\   i_ndim)Nr   rR   rk   )NTc                    t         j                  j                  d      }dd|g}|d   ||   c||<   |d<   |j                         }d||<   |dk(  r|nd}	|j                  |      }
d	\  }}|r(|dkD  r|j                  |      n|j                         }nT|dkD  r't        j                  |j                  |      |
      n't        j                  |j                  ||               }|d n|j                  |	      }t        |
||||      }t        |
||||      }t         j                  j                  ||d       y )NrS  rW      rx   r   rR   r   size)NNr   rE  V瞯<r%   )	r0   r)  r*  copyrT  r   rM  testingr   )r'   ru   r\  r]  r^  rk   r1  r   shape_len_1i_shaperK   r   r   r   r2  s                  r    test_ndzTestCumulativeSimpson.test_nd#  s5    ii##$89 Au!&rE$KdU2YjjlD!'1+" JJEJ"217!-B?Ez/d;ggcjjeDkj:;  .$cjjgj.F !aBdK-a1WSWX


""3%"8r"   )r  kwarg_updatezx must be strictly increasing)r   r   rR   r   rF   )r   r   r   ry   )r   rK   r   )r   rK   ru   r   z-`axis=4` is not valid for `y` with `y.ndim=1`r   z+shape of `x` must be the same as `y` or 1-DrW   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r   rk   c           
          t        | j                  | j                  d d d      }t        j                  t
        |      5  t        di t        |fi | d d d        y # 1 sw Y   y xY w)Nrx   )rK   r   rk   r   ru   r   r   )dicty0x0r   r   r   r   )r'   r  ri  kwargs0s       r    test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsB  sZ     DGGdL]]:W5 	@?g!>!>?	@ 	@ 	@s    AA(c                     t         j                  j                  d      }|j                  d      }t        |d      }t	        |d       y )NrS  r   ra  r   rj   )r0   r)  r*  r   r   )r'   r1  rK   r   s       r    test_special_casesz(TestCumulativeSimpson.test_special_casesQ  s=    ii##$89JJBJ q)S!r"   c                 r   t        j                  |d      }t        ||      }t        |ddddf   |ddddf         ddddf   }g |j                  dd d}t        j                  t        j
                  |      |dddf   |dddf   z
  t        j
                  |      gd      }d|ddddf<   |S )aj  `cumulative_simpson` and `simpson` can be tested against other to verify
        they give consistent results. `simpson` will iteratively be called with
        successively higher upper limits of integration. This function calculates
        the theoretical correction required to `simpson` at even intervals to match
        with `cumulative_simpson`.
        rx   r   .Nr   rb   r   )r0   diffr   r   rJ  r'  )r'   rK   r   dsub_integrals_h1sub_integrals_h2zeros_shapetheoretical_differences           r    1_get_theoretical_diff_between_simps_and_cum_simpszGTestCumulativeSimpson._get_theoretical_diff_between_simps_and_cum_simps\  s     GGAB@AF@c4R4iL!C2I,

tt)
 )(a(!#%!#qr'*-=c3B3h-GG%
 "
 -0sADqDy) &%r"   r   )max_dimsmin_sidemax_sider   F)	allow_nanc                     t        |       dkD  S NgHz>absrF   s    r    r!   zTestCumulativeSimpson.<lambda>      #a&SW- r"   )elementsr   c                    d }t        |d      } ||      }| j                  |t        j                  |j                  d               }t        j
                  j                  |dddf   |dddf   |dddf   z   d	
       y)e  Theoretically, the output of `cumulative_simpson` will be identical
        to `simpson` at all even indices and in the last index. The first index
        will not match as `simpson` uses the trapezoidal rule when there are only two
        data points. Odd indices after the first index are shown to match with
        a mathematically-derived correction.c                     t        j                  t        d| j                  d   dz         D cg c]  }t	        | dd |f   d       c}d      S c c}w )Nr   rx   r   .rT   rj   r   r0   stackr   r   r   )rK   r   s     r    simpson_referencezhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference  sM    886;Aqwwr{1}6MN37,NUW Ns   ArT   rj   rx   rF   .r   Nr%  r"  )r   ry  r0   r1   r   re  r   )r'   rK   r  r   r2  rx  s         r    7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dxz  s    $	
 !s+"!%!W!W1772;' "X "
 	

""QRL#c12g,)?QR)HHu 	# 	
r"   c                     t        |       dkD  S r  r  rF   s    r    r!   zTestCumulativeSimpson.<lambda>  r  r"   c           	         d|j                   d   dz
  z  }t        j                  dd|j                   d         }|dd d|z  t        j                  j	                  ddt        |      dz
        z  z   |dd d }t        ||	      } |||      }| j                  ||      }t        j                  j                  |d
ddf   |d
ddf   |d
ddf   z          y)r  r   rx   r   r   r   NrC   c                     t        j                  t        d| j                  d   dz         D cg c]  }t	        | dd |f   |dd |f          c}d      S c c}w )Nr   rx   r   .rF   r   r  )rK   r   r   s      r    r  zXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference  sZ    88<A!QWWR[QR]<STq37qbqbz2T Ts   "ArF   .)
r   r0   r}   r)  uniformlenr   ry  re  r   )r'   rK   intervalr   r  r   r2  rx  s           r    'test_cumulative_simpson_against_simpsonz=TestCumulativeSimpson.test_cumulative_simpson_against_simpson  s    $ qwwr{Q'KK21772;/!"HRYY%6%6r1c!fqj%III!"	 !a(1%!%!W!Wq"
 	

""QRL#c12g,)?QR)HH	
r"   )r3   r4   r5   r0   r1   rm  rl  r   r   r   r   rh  rk  ro  rq  ry  	fail_slowrD  slowr   hyp_numarraysr   array_shapesstfloatsfilterr  r  r   r"   r    rO  rO    s   	1B	QB[[X}5[[]M:@ ; 6@B [[VYRYYr1%56[[Xv.[[Wi0[[X}5[[T<09 1 6 1 / 7
94 [[8	($*>?	($"l1CBx*PQ	($"b""b"TU*VW	)4"+;<	8$A,G	6yryy|8LM	2D14NO	-tdyryy|/LM	; 	@	@
&< [[2[[[[

'..JJ G  !a"ERYYsB%8??@WX

   
, [[2[[[[

'..JJ G  !a"ERYYsB%8??@WX

   
r"   rO  c                       e Zd Zd Zd Zej                  j                  d e e	ddd             e e	ddd	            z         d
        Z
y)TestLebedevc                     d}t        j                  t        |      5  t        j                  d       d d d        y # 1 sw Y   y xY w)NzOrder n=-1 not available...r   rx   )r   r   r9   r   lebedev_rule)r'   r  s     r    r  z!TestLebedev.test_input_validation  s9    /]].g> 	'""2&	' 	' 	's	   =Ac                     d }t        j                  d      \  }}| ||      z  }d}t        ||d       t        t        j                  |      dt        j
                  z         y )Nc                 2    t        j                  | d         S )Nr   )r0   r   rF   s    r    ro   z&TestLebedev.test_quadrature.<locals>.f  s    66!A$<r"      g9-@r$  r%   r   )r   r  r   r0   r   r   )r'   ro   r   wr   r2  s         r    test_quadraturezTestLebedev.test_quadrature  sU    	  %%b)1!A$hSu-q	1ruu9-r"   rV  rR   rm   r   #      r`  c                 ^   t        j                  |      \  }}t        j                  dd      5  t	        j
                  |j                  d      }t        |j                  dd       d d d        t        t        j                  |      dt        j                  z         y # 1 sw Y   :xY w)Nignore)divideinvalidr   r   rc  r"  r   )r   r  r0   errstater   directional_statsr  r   mean_resultant_lengthr   r   )r'   rV  r   r  r   s        r    test_propertieszTestLebedev.test_properties  s    %%e,1[[(; 	F))!##A6CC55quE	F 	q	1RUU7+		F 	Fs   :B##B,N)r3   r4   r5   r  r  r   r   r   r   r   r  r   r"   r    r  r    sS    '
. [[Wd5B?&;d5SRSCT>U&UV, W,r"   r  )-r   numpyr0   numpy.testingr   r   r   
hypothesisr   hypothesis.strategies
strategiesr  hypothesis.extra.numpyextrar  scipy.integrater   r   r	   r
   r   r   r   r   r   scipy.integrate._quadraturer   scipyr   r   r   scipy.conftestr   scipy._lib._array_api_no_0dr   r   r   r   r7   r   r   r   rM  rO  r  r   r"   r    <module>r     s      L L  " ( (; ; ; N + + . 7;;// 3 3 N' N'bV' V'rb% b%J_1 _1D -1T4b "JA
 A
F, ,r"   