
    tKgm                        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  d dl!m"Z" d dl#m$Z$m%Z%  G d d	      Z&e jN                  jQ                  d
       G d d             Z)e jN                  jU                  deeg      d        Z+ G d d      Z, G d d      Z- G d d      Z.ddddddZ/ G d d      Z0y)    Ncossinpi)assert_equalassert_almost_equalassert_allcloseassert_suppress_warnings)given)
quadraturerombergrombnewton_cotescumulative_trapezoid	trapezoidquadsimpson
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    i/home/alanp/www/video.onchill/myenv/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mr)   r   r*   r+   r,   )nparanger   r	   )r.   r&   r/   r0   r1   r6   s        @r'   test_vectorzTestFixedQuad.test_vector   sJ    IIa1a!e93QQ?QXE2r)   N)__name__
__module____qualname__r2   r9   r#   r)   r'   r   r      s    33r)   r   z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d Zej"                  j%                  dddg      d        Zy)TestQuadraturec                     t         r5   )NotImplementedError)r.   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 r5   r   r%   r&   zs      r'   myfuncz.TestQuadrature.test_quadrature.<locals>.myfunc*   "    qs1SV8|$R''r)   r   r!   ?ۗ?   decimal)r   r   r   r.   rH   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   rF   s      r'   rH   z3TestQuadrature.test_quadrature_rtol.<locals>.myfunc1   s'    #ac!CF(l++B..r)   r   rJ   绽|=r,   .<Rr   r   r	   rP   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 r5   r   rF   s      r'   rH   z6TestQuadrature.test_quadrature_miniter.<locals>.myfunc9   rI   r)   rL   )   4   r   rJ   )miniterrM   rN         ?)r   r   r   r
   )r.   rH   rS   r`   rQ   rR   s         r'   test_quadrature_miniterz&TestQuadrature.test_quadrature_miniter7   sD    	(*	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 )NrW   rK   r   r$   s     r'   rH   z:TestQuadrature.test_quadrature_single_args.<locals>.myfuncB   s'    #ac#c!f*n--b00r)   r   r!   rX   rC   r-   rY   r,   rZ   rP   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 r5   r   rF   s      r'   rH   z+TestQuadrature.test_romberg.<locals>.myfuncJ   rI   r)   r   rJ   )rC   rL   rM   rN   )r   r   r   r.   rH   rQ   rS   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   rF   s      r'   rH   z0TestQuadrature.test_romberg_rtol.<locals>.myfuncR   s'    AaC#a&L))",,r)   r   rJ   rX   re   g3>Cr,   )r   r   r	   ri   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   r7   r8   r.   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)Nro   皙?c                 2    t        j                  d| z        S Nrt   r7   r   r%   s    r'   r(   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>`   s    266#a%=r)   g:0yE>r   r-   atolzdivmax .4. exceededc                 2    t        j                  d| z        S rv   rw   rx   s    r'   r(   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>f   s    RVVCE]r)   r   )divmaxr+   )r7   r8   r   r   r   minmaxr	   r   filterr   r   )r.   r%   yrQ   val2rR   supval3s           r'   test_romb_gh_3731z TestQuadrature.test_romb_gh_3731[   s    IIfFF3q5M1g0!%%'1557C	cT15  CJJ(=>2AEEGQUUWQOD ! 	TA6 ! s   ?ACC#c                 Z    dd l }t        |j                  dd      }d}t        ||d       y )Nr   r    g?k?rM   rN   )mathr   r   r   )r.   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!   )ra         @ra         @r^   g     @)ra         @r   ra          @g     P@r   )      @      @@r   r   r   g     V@rM   g     =AN)r   r   r7   arrayr   )r.   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)r7   r   r   dotr   )r.   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)   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 )$Nro   rp   r   dx@   r   r   rx       r    c                     | dz  S )Nr!   r#   rx   s    r'   fz&TestQuadrature.test_simpson.<locals>.f   s    a4Kr)         5@rM   r   r            P@r   r%   axismulti_index)flags   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@)r7   r8   r   r   linspacer	   reshaperangenditerlistr   insertslicetupler   power)r.   r   r%   r   rA   iritr1   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   r   r   r^   )r   r   r!   r   
      r   r   r   )dtype)r7   r   r   float64r   )r.   r   r   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)r:   r;   r<   r   rT   r[   rb   rf   rj   rm   rr   r   r   r   r   r   pytestmarkparametrizer   r#   r)   r'   r>   r>   #   so    "74474/7>6,>"K@\ [[Z%7	' 8	'r)   r>   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...matchr   r    )r:   r   deprecated_callr7   exp)r   messages     r'   test_deprecate_integratorr      s?    !$--0BCG			g	.RVVQ 
/	.	.s   A		A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!   r^   numr   initial)r                r   r   r    r7   r   r   r	   )r.   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   )	r7   r8   r   r   r   r	   zipr   shape)r.   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&1KD%(AqtDEi0(At$GEe,	 2r)   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   )r7   r8   r   r   r   r   r   r	   )r.   r   r%   ys_expectedr   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!   r^   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   )            r   r   )r   r   )r   r   r   r   r   r   )r.   r   r   r   s       r'   test_x_nonez$TestCumulative_trapezoid.test_x_none1  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!   )r7   r   r   r   r   r	   cumsum)r.   r   r   ress       r'   test_initial_warningz-TestCumulative_trapezoid.test_initial_warningD  sn    
 KK22&##+6&q':C 7gD		!AB%!CR&.(A!(CDE 76s   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   rq   s    r'   test_zero_len_yz(TestCumulative_trapezoid.test_zero_len_yN  s&    ]]:-MN 2& ONNs   2;N)r:   r;   r<   r   r   r   r   r   r   r   r  r	  r#   r)   r'   r   r      sI    /-*/0+& [[As8FF'r)   r   c                       e 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    )r7   r8   r   r   sqrtr   r	   )r.   r%   r   s      r'   test_simplezTestTrapezoid.test_simpleT  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   )r7   r   	ones_likesumr   r	   )r.   r%   r   rG   wxwywzqqxqyqzr   s               r'   	test_ndimzTestTrapezoid.test_ndimZ  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 )Nr^   r!   )maskr   )r7   r8   mar   r	   r   )r.   r%   r   r  ymr   xms          r'   test_maskedzTestTrapezoid.test_masked  s     IIaLEAvUU[[[&	"a(!,UU[[[&	"b)1-UU[[[&	!R(!,r)   N)r:   r;   r<   r  r  r!  r#   r)   r'   r  r  S  s    #J-r)   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>  s    Qr)   c                 N    | j                   dk(  sJ t        j                  |       S r&  )ndimr7   r  rx   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#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>      qr)   g     @)n_pointsz!`n_estimates` must be an integer.c                      yr&  r#   rx   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#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r*  r)   )qrngz8`qrng` must be initialized with dimensionality equal to c                      yr&  r#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r*  r)   z,`log` must be boolean \(`True` or `False`\).c                      yr&  r#   rx   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r*  r)   r   log)
r   r  	TypeErrorr   r  warnsUserWarningr   qmcSobol)r.   r   r   s      r'   test_input_validationz!TestQMCQuad.test_input_validation  s   ,]]9G4X1v1v. 5 D]]:W5YAA/ 6	 M\\+W5TAq6Aq6* 6 3]]9G4[1a&1a&6B 5 6]]9G4[1a&1a&cB 5 M]]9G4[1a&1a&x@ 5 M]]:W5[1a&1a&uyyq7IJ 6 B]]9G4[1a&1a&b9 54? 54 65 65 54 54 54 65 54s_   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 r5   )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=
?)rz   r   c                  4    t        j                   |        S r5   )r7   r3  )rC   r   s    r'   r(   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(;r)   T)r+  r-  r3  r/  g+=r,   gؗҜ<ry   )r7   zeroseyerandomdefault_rngr   r7  r8  onesr   r=  cdfr   stdtritstandard_errorr	   r   prodr   imagr   )r.   r+  r-  signsr(  rngr/  rA   rB   r  refrz   logresr@  r   rA  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)   r+  i   r-  r   c                 (    | j                  ||       y r5   rS  )r.   r+  r-  s      r'   
test_basiczTestQMCQuad.test_basic  s     	+.r)   rO  r    r   c                 (    | j                  |       y )N)rO  rU  )r.   rO  s     r'   	test_signzTestQMCQuad.test_sign  s    e$r)   r3  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#   rx   s    r'   r(   z'TestQMCQuad.test_zero.<locals>.<lambda>  s    Qr)   r   r    r2  )r   r5  r6  r   r   r7   infrL  )r.   r3  r   r  s       r'   	test_zerozTestQMCQuad.test_zero  sk    A\\+W5;AAC@C 6||3A666!!Q&&& 65s   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>  rx   s    r'   r   z-TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r)   r   r    r!   r_  g{Gz?)r   r   ra  rJ  r	   r   )r.   r   r  rQ  s       r'   test_flexible_inputzTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r)   N)r:   r;   r<   r9  r7   rI  rS  r   r   r   rV  rX  r\  rb  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   )rG   r&   s    r'   r   z*cumulative_simpson_nd_reference.<locals>.f
  s,    !!BQ%1Qqs8QqstWEEr)   .)	r   r   r7   moveaxisr(  r8   broadcast_toconcatenateapply_along_axis)
r   r%   r   r   r   initial_was_nonerG   r   r  r&   s
            @r'   cumulative_simpson_nd_referencerk    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j                  j                    e ej&                  ej(                   ej*                  dd	d()       ej.                  d*d(d+,      j1                  d-       .      /      d0               Zej                  j                    e ej&                  ej(                   ej*                  dd	d()       ej.                  d*d(d+,      j1                  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?)	r7   rG  rH  sortr8   newaxisr  r   r	   )r.   rn  ro  rP  r&   orderr   r%   r   cr   YrQ  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)   r   r   x_ndim)r    r   x_len)r    r!   rM   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 )Nrq  r^      r   r    r   r#   size)NNr   rc  gV瞯<r,   )	r7   rG  rH  copyrr  r   rk  testingr	   )r.   r   rz  r{  r|  r   rP  r   shape_len_1i_shaper   r%   r   r  rQ  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!   r   r   rx   )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-Dr^   z'`initial` must either be a scalar or...r   z"`dx` must either be a scalar or...N)r%   r   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   )r.   r   r  kwargs0s       r'   test_simpson_exceptionsz-TestCumulativeSimpson.test_simpson_exceptionsZ  sM     DGGdL]]:W5?g!>!>? 655s    AA(c                     t         j                  j                  d      }|j                  d      }t        |d      }t	        |d       y )Nrq  r   r  r   r   )r7   rG  rH  r   r   )r.   rP  r   r  s       r'   test_special_casesz(TestCumulativeSimpson.test_special_casesi  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!   )r7   diffr   r   rh  rE  )r.   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_simpst  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>absrx   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    .ra   r   r   r7   stackr   r   r   )r   r   s     r'   simpson_referencezhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference  sS    886;Aqwwr{1}6MN6M37,6MNUW Ns   Ara   r   r   rx   .r    N)r   r  r7   r8   r   r  r	   )r.   r   r  r  rQ  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  rx   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   Nrt   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    .rx   r   r  )r   r%   r   s      r'   r  zXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference  s`    88<A!QWWR[QR]<ST<Sq37qbqbz2<ST Ts   "Arx   .)
r   r7   r   rG  uniformlenr   r  r  r	   )r.   r   intervalr%   r  r  rQ  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<   r7   r8   r  r  r   r   r   r   r  r  r  r  r  slowr   hyp_numarraysr   array_shapesstfloatsr   r  r  r#   r)   r'   rm  rm    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)   rm  )1r   numpyr7   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   scipy.integrate._quadraturer   scipyr   r   r   r   filterwarningsr>   r   r   r   r  r#  rk  rm  r#   r)   r'   <module>r     s       7 7  " ( (; ; ; ; N  3 3  89K' K' :K'\ ':!67 8W' W't:- :-z\1 \1~ -1T4b "J}
 }
r)   