
    S_f/u                        d dl Z d dlZd dlmZmZmZ d dlmZmZ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mZmZm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z(  G d d	      Z)e jT                  jW                  d
       G d d             Z,e jT                  j[                  deeg      d        Z. G d d      Z/ G d d      Z0 G d d      Z1ddddddZ2 G d d      Z3y)    Ncossinpi)assert_equalassert_almost_equalassert_allcloseassert_suppress_warnings)given)
quadraturerombergrombnewton_cotescumulative_trapezoidcumtrapztrapz	trapezoidquadsimpsonsimps
fixed_quadAccuracyWarningqmc_quadcumulative_simpson)%_cumulative_simpson_unequal_intervals)statsspecialc                       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    Elib/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	   )r1   r)   r2   r3   r4   r9   s        @r*   test_vectorzTestFixedQuad.test_vector   sJ    IIa1a!e93QQ?QXE2r,   N)__name__
__module____qualname__r5   r<   r&   r,   r*   r    r       s    33r,   r    ignore::DeprecationWarningc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                   j#                  d      d        Zd Zej                   j)                  dddg      d        Zd Zy)TestQuadraturec                     t         r8   )NotImplementedError)r1   r(   abargss        r*   r   zTestQuadrature.quad%   s    !!r,   c                 T    d }t        |dt        d      \  }}d}t        ||d       y )Nc                 J    t        || z  |t        |       z  z
        t        z  S r8   r   r(   r)   zs      r*   myfuncz.TestQuadrature.test_quadrature.<locals>.myfunc*   "    qs1SV8|$R''r,   r   r$   ?ۗ?   decimal)r   r   r   r1   rL   valerr	table_vals        r*   test_quadraturezTestQuadrature.test_quadrature(   s,    	(faX6S*	CA6r,   c                 X    d }t        |dt        dd      \  }}d}t        ||d       y )Nc                 P    dt        || z  |t        |       z  z
        z  t        z  S )NY)	kRr   rJ   s      r*   rL   z3TestQuadrature.test_quadrature_rtol.<locals>.myfunc1   s'    #ac!CF(l++B..r,   r   rN   绽|=r/   .<Rr   r   r	   rT   s        r*   test_quadrature_rtolz#TestQuadrature.test_quadrature_rtol0   s.    	/faXEBS1	YU3r,   c                     d }d}dD ]5  }t        |dt        d|      \  }}t        ||d       t        |d	k         7 y )
Nc                 J    t        || z  |t        |       z  z
        t        z  S r8   r   rJ   s      r*   rL   z6TestQuadrature.test_quadrature_miniter.<locals>.myfunc9   rM   r,   rP   )   4   r   rN   )miniterrQ   rR         ?)r   r   r   r
   )r1   rL   rW   rd   rU   rV   s         r*   test_quadrature_miniterz&TestQuadrature.test_quadrature_miniter7   sI    	(*	 	G!&!R7KHCY:C#I	r,   c                 X    d }t        |dt        dd      \  }}d}t        ||d       y )Nc                 P    dt        || z  dt        |       z  z
        z  t        z  S )Nr[   rO   r   r'   s     r*   rL   z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncB   s'    #ac#c!f*n--b00r,   r   r$   r\   rG   r0   r]   r/   r^   rT   s        r*   test_quadrature_single_argsz*TestQuadrature.test_quadrature_single_argsA   s.    	1fa!%@S1	YU3r,   c                 P    d }t        |dt        d      }d}t        ||d       y )Nc                 J    t        || z  |t        |       z  z
        t        z  S r8   r   rJ   s      r*   rL   z+TestQuadrature.test_romberg.<locals>.myfuncJ   rM   r,   r   rN   )rG   rP   rQ   rR   )r   r   r   r1   rL   rU   rW   s       r*   test_rombergzTestQuadrature.test_rombergH   s(    	(fa(3*	CA6r,   c                 R    d }t        |dt        dd      }d}t        ||d       y )Nc                 P    dt        || z  |t        |       z  z
        z  t        z  S )Ng =`XCr   rJ   s      r*   rL   z0TestQuadrature.test_romberg_rtol.<locals>.myfuncR   s'    AaC#a&L))",,r,   r   rN   r\   ri   g3>Cr/   )r   r   r	   rm   s       r*   test_romberg_rtolz TestQuadrature.test_romberg_rtolP   s*    	-fa(?/	YU3r,   c                 T    t        t        t        j                  d            d       y )N      )r   r   r:   r;   r1   s    r*   	test_rombzTestQuadrature.test_rombX   s    T"))B-(#.r,   c                    t        j                  d      }t        j                  d|z        }t        |      }t	        d |j                         |j                               \  }}t        ||dd       t               5 }|j                  t        d       t        d |j                         |j                         d	
      }d d d        t        |dd       y # 1 sw Y   xY w)Nrs   皙?c                 2    t        j                  d| z        S Nrx   r:   r   r(   s    r*   r+   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>`   s    266#a%= r,   g:0yE>r   r0   atolzdivmax .4. exceededc                 2    t        j                  d| z        S rz   r{   r|   s    r*   r+   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>f   s    RVVCE] r,   r"   )divmaxr.   )r:   r;   r   r   r   minmaxr	   r   filterr   r   )r1   r(   yrU   val2rV   supval3s           r*   test_romb_gh_3731z TestQuadrature.test_romb_gh_3731[   s    IIfFF3q5M1g0!%%'1557C	cT15   	PCJJ(=>2AEEGQUUWQOD	P 	TA6	P 	Ps   ?ACC#c                 Z    dd l }t        |j                  dd      }d}t        ||d       y )Nr   r#   g?k?rQ   rR   )mathr   r   r   )r1   r   valmathexpected_vals       r*   test_non_dtypezTestQuadrature.test_non_dtypei   s(    $((Aq)*G\1=r,   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$   )re         @re         @rb   g     @)re         @r   re          @g     P@r"   )      @      @@r   r   r   g     V@rQ   g     =AN)r   r   r:   arrayr   )r1   r)   wtserrcoffs       r*   test_newton_cotesz TestQuadrature.test_newton_cotesp   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@)r   gffffff?g @r         "@N)r:   r   r   dotr   )r1   r(   r   r   r   exact_integralnumeric_integrals          r*   test_newton_cotes2z!TestQuadrature.test_newton_cotes2   s     HH_%qD#AW66#q>,n=HH)*qD#AW66#q>,n=r,   r@   c           
      .   t        j                  d      }t        t        |      d       t        t        |d      d       t        t        |t        j                  ddd            d	       t        j                  d      }d
|z  }t        t        ||d      d       t        t        ||d      d       t        t        ||d      d       t        j                  ddd      }d }t        t         ||      |d      d       t        t         ||      |d      d       t        j                  ddd      }t        t         ||      dd      d       t        t         ||      dd      d       t        j                  d      j                  dd      }t        j                  d      j                  ddd      } ||      }t        d      D ]  }t        ||d|      }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
      } ||      }d$D ]G  }t        |||d"      }d|d d df   |d d df   z   z  |d d df   |d d df   z
  z  }
t        ||
       I 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 d0}t        t        ||d(      |       t        t        ||d"(      |       y )1Nrs   rt   r   dx@   r   r"   r|       r$   avgr(   eveng     +@firstg     +@last   r#   c                     | dz  S )Nr$   r&   r|   s    r*   fz&TestQuadrature.test_simpson.<locals>.f   s    a4Kr,   r         5@g*5@rQ   r   )r   r   r   gUUUUU\@         P@r   )r(   r   axismulti_index)flags   )r   r   r   r      rb   }   r(   r   r   )r   r   r   r   )r#   r$   r"   r   )r   r   r   r   竪Je@)r#   r   r   r   )r   g      a@g      @g      @)r   r   g*U@)r:   r;   r   r   linspacer	   reshaperangenditerlistr   insertslicetupler   power)r1   r   r(   r   rE   iritr4   idxintegralr   	zero_axisdefault_axiss                 r*   test_simpsonzTestQuadrature.test_simpson   s   IIbMWQZ%WQ3',WQ"++aB"78"=IIaLqDWQ!%0&9WQ!'2E:WQ!&126 KK1a 	 	!	:DA!6A KK1a !9=sC!599E IIbM!!!Q'IIcN""1a+aDq 	=AQYQ7A1]O4B =2>>*

1eDk*U3Z=,a/!3ac
mA6F6IA6MM".. 18<	=	= IIbM!!!Q'aD7 	)DQT3Aa1g!Q$/0AadGa1g4EFHAx(		) 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,   c                    t        j                  ddd      }|dz  }t        j                  d      5  t	        ||d       d d d        t        j                  d	      5  t	        ||       d d d        y # 1 sw Y   5xY w# 1 sw Y   y xY w)
Nr   r   r"   r$   z The 'even' keyword is deprecatedmatchr   r   zuse keyword arguments)r:   r   pytestdeprecated_callr   r1   r(   r   s      r*   test_simpson_deprecationsz(TestQuadrature.test_simpson_deprecations   s    KK1a qD##*LM 	*A)	*##*AB 	AqM	 		* 	*	 	s   A6 B6A?B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   rb   )r"   r"   r$   r   
      r   r   r   )dtype)r:   r   r   float64r   )r1   r   r   resultr2   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,   c           	          t        j                  d      }d|z  }t        j                  d      5  t	        t        ||d      t        ||d             d d d        y # 1 sw Y   y xY w)Nrb   r$   r   r   r   r(   r   )r:   r;   r   r   r	   r   r   r1   r   r(   s      r*   
test_simpszTestQuadrature.test_simps  s[    IIaLqD##)4 	Q3'a1%	 	 	s   %AA(N)r=   r>   r?   r   rX   r_   rf   rj   rn   rq   rv   r   r   r   r   r   markfilterwarningsr   r   parametrizer   r   r&   r,   r*   rB   rB   #   s    "74474/7>6,>$ [[ <=U@ >U@n [[Z%7	' 8	'r,   rB   funcc                     d| j                    d}t        j                  |      5   | t        j                  dd       d d d        y # 1 sw Y   y xY w)Nz`scipy.integrate.z` is deprecated...r   r   r#   )r=   r   r   r:   exp)r   messages     r*   test_deprecate_integratorr     sH    !$--0BCG			g	. RVVQ  s   A		Ac                   x    e Zd Zd Zd Zd Zd Zej                  j                  dddg      d        Z
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$   rb   numr   initial)r                r   r   r#   r:   r   r   r	   )r1   r(   r   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   r   r$   r"   r   r   )r   r   r         @)r   r         $@     0@)r         !@      2@g     <@)r         )@g      :@g     @D@)r   r   g      A@g     @J@)r        4@g      E@g      P@))r$   r$   r"   )r   r#   r"   )r   r$   r   r   r#   r$   )r   r   )r   r$   r"   )	r:   r;   r   r   r   r	   zipr   shape)r1   r(   r   r   r   shapesr   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   r   r$   r"   )r         @r   r   )r   r   r         &@)g      D@g      F@g      H@g      J@)g      L@g      N@r   g      Q@)r   r   r   r	  )r   r
  r         *@)r   g      3@g      4@r   )r   r	  g     1@)r   r   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:   r;   r   r   r  r   r  r	   )r1   r   r(   ys_expectedr   r   r   s          r*   test_y_nd_x_1dz'TestCumulative_trapezoid.test_y_nd_x_1d6  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$   rb   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   )            r  r   )r   r   )r   r  r  r  r   r   )r1   r   r   r   s       r*   test_x_nonez$TestCumulative_trapezoid.test_x_noneN  s    KKA1%$Q'*
z*$Q2-
z*$Q1-*
z*$Q1a8-
z*r,   r   r#   r   c           
          t        j                  ddd      }t        j                  d      5  t	        ||      }ddd       t        |gt        j                  |dd |dd	 z         d
z         y# 1 sw Y   8xY w)z4If initial is not None or 0, a ValueError is raised.r   r   r   z	`initial`r   r   Nr#   r   r$   )r:   r   r   r   r   r	   cumsum)r1   r   r   ress       r*   test_initial_warningz-TestCumulative_trapezoid.test_initial_warninga  su    
 KK22&##+6 	;&q':C	;gD		!AB%!CR&.(A!(CDE	; 	;s   A44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   r   )r   raises
ValueErrorr   ru   s    r*   test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_yk  s.    ]]:-MN 	' 2&	' 	' 	's   2;c                     t        j                  d      j                  ddd      }|}t        j                  d      5  t        t        ||ddd	      t        ||ddd	      d
       d d d        y # 1 sw Y   y xY w)Nr   r   r$   r"   r   r   r   r   )r   r   r   +=r/   )r:   r;   r   r   r   r	   r   r   r   s      r*   test_cumtrapzz&TestCumulative_trapezoid.test_cumtrapzo  ss    IIi ((Aq1##*@A 	(0A#AqQ$Qc1E!&(	( 	( 	(s   +A33A<N)r=   r>   r?   r   r  r  r  r   r   r   r  r  r  r&   r,   r*   r   r     sN    /-*/0+& [[As8FF'(r,   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestTrapezoidc                     t        j                  ddd      }t        t        j                  d|dz  z        t        j                  dt         j
                  z        z  d      }t        |d       y )Nr   g?g      r$   r   r#   )r:   r;   r   r   sqrtr   r	   )r1   r(   r   s      r*   test_simplezTestTrapezoid.test_simplez  sQ    IIc2r"bffS16\*RWWQY-??CH1r,   c                 F   t        j                  ddd      }t        j                  ddd      }t        j                  ddd      }t        j                  |      |d   |d   z
  z  }|dxx   dz  cc<   |dxx   dz  cc<   t        j                  |      |d   |d   z
  z  }|dxx   dz  cc<   |dxx   dz  cc<   t        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   }||d d d d f   z  j                  d      }||d d d d f   z  j                  d      }	||d d d d f   z  j                  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#   r   r$   r      r   r   r   )r:   r   	ones_likesumr   r	   )r1   r(   r   rK   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<@"Qd]##((a(0"T1d]##((a(0"T4]##((a(0 a1Qd]+!42a1T!T\?32a1T4\?32 a11%2a11%2a11%2r,   c                    t        j                  d      }||z  }|dk(  }t         j                  j                  ||      }d}t	        t        ||      |       t         j                  j                  ||      }t	        t        ||      |       t         j                  j                  ||      }t	        t        ||      |       y )Nrb   r$   )maskr  )r:   r;   mar   r	   r   )r1   r(   r   r2  ymr   xms          r*   test_maskedzTestTrapezoid.test_masked  s     IIaLEAvUU[[[&	"a(!,UU[[[&	"b)1-UU[[[&	!R(!,r,   c           
          t        j                  d      }d|z  }t        j                  d      5  t	        t        ||dd      t        ||dd             d d d        y # 1 sw Y   y xY w)Nr"   r$   r   r   r   r   )r(   r   r   )r:   r;   r   r   r   r   r   r   s      r*   test_trapz_aliaszTestTrapezoid.test_trapz_alias  s^    IIaLqD##+6 	81c:qA#A68	8 	8 	8s   'A!!A*N)r=   r>   r?   r$  r0  r6  r8  r&   r,   r*   r   r   y  s    #J- 8r,   r   c                   t   e Zd Zd Zdd ej
                  d      f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}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=  )ndimr:   r(  r|   s    r*   r   z/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&   r|   s    r*   r+   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r>  r,   g     @)n_pointsz!`n_estimates` must be an integer.c                      yr=  r&   r|   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&   r|   s    r*   r+   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r>  r,   )qrngz8`qrng` must be initialized with dimensionality equal to c                      yr=  r&   r|   s    r*   r+   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r>  r,   z,`log` must be boolean \(`True` or `False`\).c                      yr=  r&   r|   s    r*   r+   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r>  r,   r   log)
r   r  	TypeErrorr   r  warnsUserWarningr   qmcSobol)r1   r   r   s      r*   test_input_validationz!TestQMCQuad.test_input_validation  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   r   r$   c           	         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 r8   )r   multivariate_normalpdfT)r(   covmeans    r*   r   z$TestQMCQuad.basic_test.<locals>.func  s"    ,,00dC@@r,   l   ^^@E9? )seed)rB  rD  rF  )lower_limitr#   gףp=
?)r~   r   c                  4    t        j                   |        S r8   )r:   rJ  )rG   r   s    r*   r+   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(; r,   T)rB  rD  rJ  rF  r  r/   gؗҜ<r}   )r:   zeroseyerandomdefault_rngr   rN  rO  onesr   rT  cdfr   stdtritstandard_errorr	   r   prodr   imagr   )r1   rB  rD  signsr@  rngrF  rE   rF   r  refr~   logresrW  r   rX  s                @@@r*   
basic_testzTestQMCQuad.basic_test  s   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,   rB  i   rD  r   c                 (    | j                  ||       y r8   rj  )r1   rB  rD  s      r*   
test_basiczTestQMCQuad.test_basic  s     	+.r,   rf  r#   r   c                 (    | j                  |       y )N)rf  rl  )r1   rf  s     r*   	test_signzTestQMCQuad.test_sign  s    e$r,   rJ  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&   r|   s    r*   r+   z'TestQMCQuad.test_zero.<locals>.<lambda>  r>  r,   r   r#   rI  )r   rL  rM  r   r   r:   infrc  )r1   rJ  r   r  s       r*   	test_zerozTestQMCQuad.test_zero
  sv    A\\+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   normrU  r|   s    r*   r   z-TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r,   r   r#   r$   rv  g{Gz?)r   r   rx  ra  r	   r   )r1   r   r  rh  s       r*   test_flexible_inputzTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r,   N)r=   r>   r?   rP  r:   r`  rj  r   r   r   rm  ro  rs  ry  r&   r,   r*   r:  r:    s    ":H #'AWRWWQZ D< [[Z$7[[]QG4/ 5 8/ [[W1vBx"a1b'&JK% L% [[UUDM2' 3'1r,   r:  r   r(   r   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 )
Nr   )r(   r   r   r   r   r   r#   )r#   r   c                 >    t        | d  | dz   | dz  d        S )Nr$   )r(   r   )r   )rK   r)   s    r*   r   z*cumulative_simpson_nd_reference.<locals>.f8  s,    !!BQ%1Qqs8QqstWEEr,   .)	r  r   r:   moveaxisr@  r;   broadcast_toconcatenateapply_along_axis)
r   r(   r   r   r   initial_was_nonerK   r   r  r)   s
            @r*   cumulative_simpson_nd_referencer    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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 ej$                  ej&                   ej(                  dd	d()       ej,                  d*d(d+,      j/                  d-       .      /      d0        Z e ej$                  ej&                   ej(                  dd	d()       ej,                  d*d(d+,      j/                  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   r   r$   r#   r   r   r   r(   r   gV瞯<r/   g{Gzd?)	r:   r^  r_  sortr;   newaxisr(  r   r	   )r1   r  r  rg  r)   orderr   r(   r   cr   Yrh  r   kwargr  i0s                    r*   r   zTestCumulativeSimpson.test_1dF  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,   r   r   x_ndim)r#   r   x_len)r#   r$   rQ   i_ndim)Nr   r   r   )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 )Nr  rb      r   r#   r   r&   size)NNr   rz  gV瞯<r/   )	r:   r^  r_  copyr  r   r  testingr	   )r1   r   r  r  r  r   rg  r  shape_len_1i_shaper   r(   r   r  rh  s                  r*   test_ndzTestCumulativeSimpson.test_ndi  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$   r   r"   r|   )r$   r$   r"   r   )r(   r   r   )r(   r   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-Drb   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...Nr   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)Nr   )r   r(   r   r   r   r   r&   )dicty0x0r   r  r  r   )r1   r   r  kwargs0s       r*   test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptions  sZ     DGGdL]]:W5 	@?g!>!>?	@ 	@ 	@s    AA(c                     t         j                  j                  d      }|j                  d      }t        |d      }t	        |d       y )Nr  r   r  r   r   )r:   r^  r_  r   r   )r1   rg  r   r  s       r*   test_special_casesz(TestCumulativeSimpson.test_special_cases  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`.
        r   r   .Nr#   r   r$   )r:   diffr   r  r  r\  )r1   r   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>absr|   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          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#   .re   r   r   r:   stackr   r  r   )r   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re   r   r   r|   .r#   N)r   r  r:   r;   r  r  r	   )r1   r   r  r  rh  r  s         r*   7test_cumulative_simpson_against_simpson_with_default_dxzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx  s    	
 !s+"!%!W!W1772;' "X "
 	

""QRL#c12g,)?QR)HH	
r,   c                     t        |       dkD  S r  r  r|   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   r   r#   r   r   Nrx   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#   .r|   r   r  )r   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r|   .)
r  r:   r   r^  uniformlenr   r  r  r	   )r1   r   intervalr(   r  r  rh  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(1%!%!W!Wq"
 	

""QRL#c12g,)?QR)HH	
r,   )r=   r>   r?   r:   r;   r  r  r   r   r   r   r  r  r  r  r  r   hyp_numarraysr   array_shapesstfloatsr   r  r  r&   r,   r*   r  r  B  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	; 	@	@
&< 
'..JJ G  !a"ERYYsB%8??@WX


. 
'..JJ G  !a"ERYYsB%8??@WX


r,   r  )4r   numpyr:   r   r   r   numpy.testingr   r   r	   r
   r   
hypothesisr   hypothesis.strategies
strategiesr  hypothesis.extra.numpyextrar  scipy.integrater   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scipy.integrate._quadraturer   scipyr   r   r    r   r   rB   r   r   r   r   r:  r  r  r&   r,   r*   <module>r     s       7 7  " ( (; ; ; ; ; N  3 3  89h h :hV ':!67 8`( `(FB8 B8J\1 \1~ -1T4b "J|
 |
r,   