
    bis                        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"m#Z#m$Z$ d d	l%m&Z&m'Z' e jP                  jR                  Z) e"e       G d
 d             Z* e"e       G d d             Z+ e"e       G d d             Z, e"e       G d d             Z- e"e       G d d             Z. e"e       G d d             Z/ e"e       G d d             Z0ddddddZ1 e"e       G d d             Z2 e"ejf                         G d d             Z4y)    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)make_xp_test_casexp_default_dtypeis_numpy)xp_assert_closexp_assert_equalc                       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    `/home/cdr/jupyterlab/.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.   r3   s        @r$   test_vectorzTestFixedQuad.test_vector   sJ    IIa1a!e93QQ?QXE2r&   N)__name__
__module____qualname__r/   r6   r!   r&   r$   r   r      s    33r&   r   c                       e Zd Zd Zd Zy)TestRombc                     t        t        |j                  d            |j                  d|j                               y )Ng      1@g      `@dtype)r   r   r5   asarrayfloat64r+   xps     r$   	test_rombzTestRomb.test_romb)   s*    RYYt_-rzz%rzzz/RSr&   c                 T   t        j                  d      }t        j                  d|z        }t        |j	                  |            }t        d t        j                  |      t        j                  |            \  }}t        ||j	                  ||j                        dd       y )N   皙?c                 X    t        j                  t        j                  d| z              S )NrF   )r4   cosarrayr"   s    r$   r%   z,TestRomb.test_romb_gh_3731.<locals>.<lambda>1   s    RVVBHHSUO%< r&   r=   g:0yE>r   r*   atol)
r4   r5   rH   r   r?   r   minmaxr   r@   )r+   rB   r"   yvalr,   r.   s          r$   test_romb_gh_3731zTestRomb.test_romb_gh_3731,   sw    IIfFF3q5M2::a=!<bffQiPQS!RZZ

ZC$UVWr&   N)r7   r8   r9   rC   rQ   r!   r&   r$   r;   r;   '   s    TXr&   r;   c                       e Zd Zd Zd Zy)TestNewtonCotesc                 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   )      ?      @rX         @   g     @)rX         @r\   rX          @g     P@r   )      @      @@rW   r_   r^   g     V@   g     =AN)r   r   r4   rI   r   )r+   r#   wtserrcoffs       r$   test_newton_cotesz!TestNewtonCotes.test_newton_cotes7   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@)re   gffffff?g @r\         "@N)r4   rI   r   dotr   )r+   r"   rO   ra   rb   exact_integralnumeric_integrals          r$   test_newton_cotes2z"TestNewtonCotes.test_newton_cotes2M   s     HH_%qD#AW66#q>,n=HH)*qD#AW66#q>,n=r&   N)r7   r8   r9   rc   rk   r!   r&   r$   rS   rS   5   s    6,>r&   rS   c                   Z    e Zd Zd Zej
                  j                  dddg      d        Zy)TestSimpsonc           
      	   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 )$NrE      rU   dx@   r   r   rJ       r   c                     | dz  S )Nr   r!   rJ   s    r$   fz#TestSimpson.test_simpson.<locals>.fi   s    a4Kr&         5@r`   rf   r            P@rV   r"   axismulti_index)flags   r      r[   }   re   )rV   rV   rV   rV   )r   r   r   r   )re   re   re   re   竪Je@)r   r   rx   rs   )re   g      a@g      @g      @)r   r   g*U@)r4   r5   r   r   linspacer   reshaperangenditerlistr|   insertslicetuplerI   power)r+   rO   r"   ru   airitr.   idxintegral	zero_axisdefault_axiss                r$   test_simpsonzTestSimpson.test_simpsona   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   r   r   r[   )r   r   r   r   
      r   r~   r{   r=   )r4   rI   r   r@   r   )r+   r   rO   resultr,   s        r$   test_simpson_2d_integer_no_xz(TestSimpson.test_simpson_2d_integer_no_x   sb     HH/35 6!SbS&	A$288ARZZ8rBVX&r&   N)r7   r8   r9   r   pytestmarkparametrizer   r!   r&   r$   rm   rm   _   s3    K@\ [[Z%7	' 8	'r&   rm   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                     |j                  ddd      }|}t        ||d      }|j                  g d      }t        ||       t        ||d       }t        ||dd         y )	Nr   r   r[   numr   initial)re                r   re   r   r   r	   r?   r   )r+   rB   r"   rO   y_int
y_expecteds         r$   test_1dz TestCumulative_trapezoid.test_1d   s`    KKA1K%$Q15ZZ 9:
z*$Q48z!"~.r&   c                    |j                  |j                  dt        |            d      }|}t        ||d      }|j	                  g dg dgg dg d	gg d
g dgg      }t        ||       g d}t        g d|      D ]E  \  }}t        ||d|      }|j                  dk(  sJ t        ||d |      }|j                  |k(  rEJ  y )N   r=   rV   r   r   r   r   )re   rU   rf         @)re   r         $@     0@)re         !@      2@g     <@)re         )@g      :@     @D@)re   r   g      A@g     @J@)re        4@g      E@g      P@))r   r   r   )rV   r   r   )rV   r   rV   r   r   r   )r   r{   )r   r5   r   r	   r?   r   zipshape)	r+   rB   r"   rO   r   r   shapesr{   r   s	            r$   test_y_nd_x_ndz'TestCumulative_trapezoid.test_y_nd_x_nd   s    JJryy2B22FyGS$Q15ZZ"4"6"8"6"7"9"7"7"9	!: ;
 	z* 3y&1 	(KD%(AqtDE;;)+++(At$GE;;%'''		(r&   c           	         |j                  |j                  dt        |            d      }|j                  dt        |            dz  }|j                  g dg dgg dg d	gg      |j                  g d
gg dgg dgg      |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   r=   r   r   r   )rY         @rZ   r^   )r]   rg   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@ry   g      Q@)rf   r\   rY   r   )r   r   rW         *@)r   g      3@      4@rv   )rU   r   g     1@)r   rv   g     J@)r   g     B@g     `V@)r   g     J@g     `_@)r   g     @Q@g     0d@)r   g     @U@g     h@r   )r"   r{   r   )r   r5   r   r?   r   r	   r   r   )r+   rB   rO   r"   ys_expectedr{   r   r   s           r$   test_y_nd_x_1dz'TestCumulative_trapezoid.test_y_nd_x_1d   s   JJryy2B22FyGSIIa/3I4a7 JJ)+---/0 1 JJ)*-.-.0 1 JJ)+)+-++-	. /0 !$I{ ; 	/D*(a.?d157EE:.	/r&   c                    |j                  ddd      }t        |      }|j                  g d      }t        ||       t        |d      }|j                  g d      }t        ||       t        |d	
      }|j                  g d      }t        ||       t        |d	d      }|j                  g d      }t        ||       y )Nr   r   r[   r   )r   r   r   re   r   r   )r   r   r   r   re   rV   rp   )            r   re   )rq   r   )r   r   r   r   re   r   )r+   rB   rO   r   r   s        r$   test_x_nonez$TestCumulative_trapezoid.test_x_none   s    KKA1K%$Q'ZZ 56
z*$Q2ZZ 89
z*$Q1-ZZ 56
z*$Q1a8ZZ 89
z*r&   r   r   rU   c                     |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)r   r   raises
ValueErrorr	   )r+   r   rB   rO   s       r$   test_initial_errorz+TestCumulative_trapezoid.test_initial_error  sE    
 KK22K&]]:[9 	5 G4	5 	5 	5s   AAc                     t        j                  t        d      5  t        |j	                  g              d d d        y # 1 sw Y   y xY w)NAt least one point is requiredr   rO   )r   r   r   r	   r?   rA   s     r$   test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_y  s6    ]]:-MN 	3 2::b>2	3 	3 	3s   AA
N)r7   r8   r9   r   r   r   r   r   r   r   r   r   r!   r&   r$   r   r      sG    /(*/0+& [[As8553r&   r   c                   4    e Zd Zd Zd Zd Zed        Z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?      r   rp   rX   )r5   r
   expsqrtr?   pir   )r+   rB   r"   r   s       r$   test_simplezTestTrapezoid.test_simple  sd    IIc2r"bffS16\*RWWQBEE9J5J-KKPST2::c?+r&   c                    |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   rV   r   r      r~   r   rz   )r   	ones_likesumr
   r   )r+   rB   r"   rO   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         )rV   r      i|  r   rz   )r   r   r   )r   g     P`@g     k@r   	   )r   r   r   r
   r?   r   r   	Exception)r+   rB   r"   rO   out0out1s         r$   test_gh21908zTestTrapezoid.test_gh21908C  s3   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 )Nr[   r   )maskr   )r4   r5   marI   r   r
   )r+   rB   r"   rO   r   ymr   xms           r$   test_maskedzTestTrapezoid.test_masked[  s     IIaLEAvUU[[[&	"a(!,UU[[[&	"b)1-UU[[[&	!R(!,r&   c                 6   t        t        d            }|D cg c]  }||z  	 }}t        j                  |t        j                        }t        j                  |t        j                        }t        ||      }t        ||      }t        ||       y c c}w )Nr[   r=   )r   r   r4   r?   r@   r
   r   )r+   r"   trO   xarryarrresresarrs           r$   test_array_likezTestTrapezoid.test_array_likel  st    qNqQUzz!2::.zz!2::.1o4&V$ s   BN)	r7   r8   r9   r   r   r   r   r   r   r!   r&   r$   r   r     s+    ,#J
0 - - %r&   r   c                   N   e Zd Z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                  dddg      d        Z
d Zy)TestQMCQuadc           	      D   j                  ddg      }j                  ddg      }d}t        j                  t        |      5  t	        d||       d d d        d}t        j                  t
        |      5  t	        d ||       d d d        fd}d	}t              r2t        j                  t        |      5  t	        |||       d d d        n1t        j                  t
        |      5  t	        |||       d d d        d
}t        j                  t        |      5  t	        d ||d       d d d        d}t        j                  t        |      5  t	        d ||d       d d d        d}t        j                  t        |      5  t	        d ||d       d d d        d}t        j                  t
        |      5  t	        d ||t        j                  j                  d             d d d        d}t        j                  t        |      5  t	        d ||d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   ]xY w# 1 sw Y   4x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)Nre   rX   z`func` must be callable.r   za duckz/`func` must evaluate the integrand at points...c                       yNr   r!   r!   r&   r$   r%   z3TestQMCQuad.test_input_validation.<locals>.<lambda>      r&   c                 H    | j                   dk(  sJ j                  |       S r  )ndimr   r"   rB   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!   rJ   s    r$   r%   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r&   g     @)n_pointsz!`n_estimates` must be an integer.c                      yr  r!   rJ   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!   rJ   s    r$   r%   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r&   )qrngz8`qrng` must be initialized with dimensionality equal to c                      yr  r!   rJ   s    r$   r%   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r&   r   z,`log` must be boolean \(`True` or `False`\).c                      yr  r!   rJ   s    r$   r%   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r&   r   log)r?   r   r   	TypeErrorr   r   r   warnsUserWarningr   qmcSobol)r+   rB   r   bmessager  s    `    r$   test_input_validationz!TestQMCQuad.test_input_validationx  s=   JJBx JJBx ,]]9G4 	%Xq!$	% D]]:W5 	&Y1%	&	 MB<k9 %q!$% % z9 %q!$% 3]]9G4 	9[!Q8	9 6]]9G4 	9[!QC8	9 M]]9G4 	7[!QX6	7 M]]:W5 	A[!QUYY__Q-?@	A B]]9G4 	0[!QB/	0 	0G	% 	%	& 	&% %% %	9 	9	9 	9	7 	7	A 	A	0 	0sl   H08H=<I
.I!I$I1I>.J
J0H:=I
II!$I.1I;>J
JJ   r   Nc           	         t              }|t        j                  d      }d}t        j                  |      }t        j                  |      }fdt        j
                  j                  d      }	t        j                  j                  ||	      }
t        j                  |      }t        j                  |      |z  }t        j                  ||      j                  ||      |||
      }t        j                  j                  ||||      }t        j                  |dz
  d	      |j                   z  }t#        |j$                  j                  ||      |
       t        j&                  |      |j$                  z  dkD  sJ t        j
                  j                  d      }	t        j                  j                  ||	      }
t        fdj                  ||      j                  ||      ||d|
      }|j$                  j(                  j*                  k(  rdnd}t#        j-                  j/                  |j$                              |j$                  |       j1                  |j$                  dz         t        j&                  |      dk  rj2                  ndk(  sJ t#        j/                  |j                         |j                   ||dz         y )Nr   c                 t    j                  dj                  | | z  d      z        dj                  z  z  S )Nr   r   r   r   )r   r   r   r  s    r$   r  z$TestQMCQuad.basic_test.<locals>.func  s5    66$!!!445RUUCCr&   l   ^^@E9? )seedr=   )r
  r  r  )lower_limitr   gףp=
?rL   r   c                  ,    j                   |        S r2   r  )argsr  rB   s    r$   r%   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(; r&   T)r
  r  r  r  +=g>r)   y                d   rK   )r   r4   oneszeroseyerandomdefault_rngr   r  r  r   r?   multivariate_normalcdfr   stdtritstandard_errorr   r   prodr>   r@   realr   imagr   )r+   r
  r  signsrB   r>   r  meancovrngr  r   r  r   refrL   logresr*   r  s       `             @r$   
basic_testzTestQMCQuad.basic_test  sB    $=GGAJExx~ffTl	D ii##$78yyt#.HHTNGGDME!tRZZZ7AU9S (kN''++AtSa+H{1}e4s7I7IIbjjEj&BNwwu~cll*Q...ii##$78yyt#.;**Qe*4bjj%j6P#+"/ **bjj8udv 78#,,TRwwv+,"''%.1:LRSTTTv445**DH	Fr&   r
  i   r  rx   c                 ,    | j                  |||       y )N)rB   r7  )r+   r
  r  rB   s       r$   
test_basiczTestQMCQuad.test_basic  s     	+"5r&   r1  rX   g      c                 *    | j                  ||       y )N)r1  rB   r9  )r+   r1  rB   s      r$   	test_signzTestQMCQuad.test_sign  s    e+r&   r  FTc           	      .   d}t        j                  t        |      5  t        d |j	                  ddg      |j	                  ddg      |      }d d d        j
                  |r|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!   rJ   s    r$   r%   z'TestQMCQuad.test_zero.<locals>.<lambda>  r  r&   r   r   r  )r   r  r  r   r?   r   infr-  )r+   r  rB   r  r   s        r$   	test_zerozTestQMCQuad.test_zero  s    A\\+W5 	Y;

Aq6(:BJJ1v<NTWXC	Y||3A666!!Q&&&	Y 	Ys   3BB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   normpdfrJ   s    r$   r  z-TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r&   r   r   r   rC  g{Gz?)r   r   rE  r+  r   r   )r+   r  r   r5  s       r$   test_flexible_inputzTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r&   )r  r   NN)r7   r8   r9   r  r7  r   r   r   r:  r<  r@  rG  r!   r&   r$   r   r   v  s    )0V!FF [[Z$7[[]QG46 5 86 [[WBx#sc2YS	&RS, T, [[UUDM2' 3'1r&   r   r~   r"   rq   r   r{   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 )
NrV   )r"   rq   r{   r   r   r~   r   )r   r   c                 >    t        | d  | dz   | dz  d        S )Nr   )r"   r   )r   )r   r#   s    r$   ru   z*cumulative_simpson_nd_reference.<locals>.f  s,    !!BQ%1Qqs8QqstWEEr&   .)	r   r	   r4   moveaxisr  r5   broadcast_toconcatenateapply_along_axis)
rO   r"   rq   r   r{   initial_was_noner   ru   r   r#   s
            @r$   cumulative_simpson_nd_referencerP    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                      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d      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 ej*                  ej,                   ej.                  ddd*+       ej2                  d,d*d-.      j5                  d/       0      1      d2                      Zej                  j#                  d*      ej                  j$                   e ej*                  ej,                   ej.                  ddd*+       ej2                  d,d*d-.      j5                  d3       0      1      d4                      Zy%)5TestCumulativeSimpsonr   r   use_dx)FTuse_initialc                    t         j                  j                  d      }d}|rdnd}|j                  |j                               }|dk(  r4|j                  t        j                  |j                  |                  }n@|j                  ||j                        |z  |j                  |j                               z   }|j                  |dz   |j                        d d |j                  f   }	|j                  |j                  |dz               d d |j                  f   }
|j                  |
||	z  z  d      }|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   rV   r   r=   r   r   r   rq   r"   r   gV瞯<r)   g{Gzd?)r4   r(  r)  r?   sortr5   r@   newaxisr   r   r   )r+   rS  rT  rB   r4  r#   orderrq   r"   r   crO   Yr5  r   kwargr   i0s                     r$   r   zTestCumulativeSimpson.test_1d  s   
 ii##$89 ZZ

%A:

2773::a=12A		!2::	.r1BJJszz|4LLAIIeairzzI21bjj=AJJszz%!),-am<FF1QT6F"FF1QQZ<Q'aF0aQqtVQRL &!A$4$r
3( =e=W= C51!qBC62CAJBEE
?r&   T)cpu_onlyr{   rV   x_ndim)r   rV   x_len)r   r   r`   i_ndim)Nr   rV   rq   )NTc                    t         j                  j                  d      }dd|g}|d   ||   c||<   |d<   |j                         }	d|	|<   |dk(  r|	nd}
|j	                  |j                  |            }d	\  }}|r9|dkD  r|j                  |	      n|j                         }|j	                  |      }ne|dkD  r't        j
                  |j                  |      |
      n't        j
                  |j                  ||               }|j	                  |      }|d n |j	                  |j                  |
            }t        |||||      }t        t        j                  |      t        j                  |      |d nt        j                  |      |d nt        j                  |      |      }t        ||j	                  |      d       y )NrV  r[      r~   r   rV   r!   size)NNr   rH  V瞯<r)   )	r4   r(  r)  copyr?   rW  r   rP  r   )r+   r{   r`  ra  rb  rq   rB   r4  r   shape_len_1i_shaperO   r"   r   r   r5  s                   r$   test_ndzTestCumulativeSimpson.test_nd1  s    ii##$89 Au!&rE$KdU2YjjlD!'1+" JJszzuz-.217!-BBB?Ez/d;ggcjjeDkj:; 

1A .$bjj9Q.R !aBdK .JJqMRZZ]rztrzzRT~#ODG1D4
 	RZZ_59r&   )r  kwarg_updatezx must be strictly increasing)r   r   rV   r   rJ   )r   r   r   r   )r"   rO   r   )r"   rO   r{   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-Dr[   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r"   rq   c           
         t        |j                  | j                        |j                  | j                        d d d      }|j	                         D ci c]<  \  }}|t        |t              r$|j                  t        j                  |            n|> }}}t        j                  t        |      5  t        di t        |fi | d d d        y c c}}w # 1 sw Y   y xY w)Nr~   )rO   r"   rq   r   r{   r   r!   )dictr?   y0x0items
isinstancer   r4   r   r   r   r   )r+   r  rl  rB   kwargs0kvs          r$   test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsX  s     DGG,

4770C#". %1$6$6$8: Aq 
1d8K2::bjjm4QRR : :]]:W5 	@?g!>!>?	@ 	@:	@ 	@s   AC5CC#c                     t         j                  j                  d      }|j                  |j                  d            }t	        |d      }t        ||j                  d|j                               y )NrV  r   re  re   rp   r   r=   )r4   r(  r)  r?   r   r   r&  r@   )r+   rB   r4  rO   r   s        r$   test_special_casesz(TestCumulativeSimpson.test_special_casesj  sW    ii##$89JJszzrz*+ r*RXXarzzX:;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`.
        r~   r   .Nr   re   r   )r4   diffr   r   rM  r&  )r+   rO   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_simpsu  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>absrJ   s    r$   r%   zTestCumulativeSimpson.<lambda>      #a&SW- r&   )elementsr   c           
      "   d }t        |j                  |      d      } ||      }| j                  |t        j                  |j
                  d               }t        |dddf   |j                  |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   r~   r   .rX   rp   r   r4   stackr   r   r   )rO   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rX   rp   r~   rJ   .r   NgؗҜ<r   )r   r?   r  r4   r5   r   r   )r+   rO   rB   r  r   r5  r  s          r$   7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx  s    "	
 !A37"!%!W!W1772;' "X "
 	QRL"**Sab\4J3PQPR74S%ST	
r&   c                     t        |       dkD  S r  r  rJ   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                  |      |j                  |      	      } |||      }| j                  ||      }t        |d
ddf   |j                  |d
ddf   |d
ddf   z                y)r  r   r~   r   r   r   NrF   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   r~   r   .rJ   r   r  )rO   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rJ   .)
r   r4   r   r(  uniformlenr   r?   r  r   )	r+   rO   rB   intervalr"   r  r   r5  r  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"**Q-@1%!%!W!Wq"
 	QRL"**Sab\4J3PQPR74S%ST	
r&   )r7   r8   r9   r4   r5   rp  ro  r   r   r   r   skip_xp_backendsrk  rn  rv  rx  r  	fail_slowslowr   hyp_numarraysr@   array_shapesstfloatsfilterr  r  r!   r&   r$   rR  rR    s   	1B	QB[[X}5[[]M:!@ ; 6!@F t$[[VYRYYr1%56[[Xv.[[Wi0[[X}5[[T<0: 1 6 1 / 7 %:B [[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&   rR  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   r~   )r   r   NotImplementedErrorr   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   )r4   r   rJ   s    r$   ru   z&TestLebedev.test_quadrature.<locals>.f  s    66!A$<r&      g9-@r#  r)   r   )r   r  r   r4   r   r   )r+   ru   r"   wr   r5  s         r$   test_quadraturezTestLebedev.test_quadrature  sU    	  %%b)1!A$hSu-q	1ruu9-r&   rY  rV   rs   r   #      rd  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   rg  r   r   )r   r  r4   errstater   directional_statsTr   mean_resultant_lengthr   r   )r+   rY  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)r7   r8   r9   r  r  r   r   r   r   r   r  r!   r&   r$   r  r    sS    '
. [[Wd5B?&;d5SRSCT>U&UV, W,r&   r  )5r   numpyr4   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_apir   r   r   scipy._lib._array_api_no_0dr   r   r   r  r   r;   rS   rm   r   r   r   rP  rR  r  r  r!   r&   r$   <module>r     s     L L  " ( (; ; ; N + + . O O H;;// :3 3 3  4
X 
X 
X < &> &> !&>R 7Y' Y' Y'x '(V3 V3 )V3r 9\% \% \%~ 8h1 h1 h1V -1T4b "J %&M
 M
 'M
` 9))*, , +,r&   