
    xf
E                         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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mZ  G d d      Z G d d	      Z  G d
 d      Z! G d d      Z" G d d      Z#y)    Ncossinpi)assert_equalassert_almost_equalassert_allcloseassert_suppress_warnings)
quadraturerombergrombnewton_cotescumulative_trapezoidcumtrapztrapz	trapezoidquadsimpsonsimps
fixed_quadAccuracyWarningqmc_quad)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    G/usr/lib/python3/dist-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/   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   c                       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         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>.myfunc+   s'    #ac!CF(l++B..r)   r   rJ   绽|=r,   .<Rr   r   r	   rP   s        r'   test_quadrature_rtolz#TestQuadrature.test_quadrature_rtol*   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>.myfunc3   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_miniter1   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 )NrW   rK   r   r$   s     r'   rH   z:TestQuadrature.test_quadrature_single_args.<locals>.myfunc<   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_args;   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>.myfuncD   rI   r)   r   rJ   )rC   rL   rM   rN   )r   r   r   r.   rH   rQ   rS   s       r'   test_rombergzTestQuadrature.test_rombergB   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>.myfuncL   s'    AaC#a&L))",,r)   r   rJ   rX   re   g3>Cr,   )r   r   r	   ri   s       r'   test_romberg_rtolz TestQuadrature.test_romberg_rtolJ   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_rombR   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 Nrs   r7   r   r%   s    r'   r(   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>Z   s    266#a%= r)   g:0yE>r   r-   atolzdivmax .4. exceededc                 2    t        j                  d| z        S ru   rv   rw   s    r'   r(   z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>`   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_3731U   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?rM   rN   )mathr   r   r   )r.   r   valmathexpected_vals       r'   test_non_dtypezTestQuadrature.test_non_dtypec   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_cotesj   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)   zignore::DeprecationWarningc           
      .   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 )1Nro   rp   r   dx@   r   r   rw       r!   avgr%   eveng     +@firstg     +@last   r    c                     | dz  S )Nr!   r#   rw   s    r'   fz&TestQuadrature.test_simpson.<locals>.f   s    a4Kr)   r         5@g*5@rM   r   )r   r   r   gUUUUU\@         P@r   )r%   r   axismulti_index)flags   )r   r   r   r      r^   }   )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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                         5  t	        ||d       d d d        y # 1 sw Y   y xY w)Nr   r   r   r!   r   r   )r7   r   pytestdeprecated_callr   r.   r%   r   s      r'   test_simpson_even_is_deprecatedz.TestQuadrature.test_simpson_even_is_deprecated   sJ    KK1a qD##% 	*A)	* 	* 	*s   A		A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)   c                     t        j                  d      }d|z  }t        t        ||d      t	        ||d             y )Nr^   r!   r   r%   r   )r7   r8   r	   r   r   r.   r   r%   s      r'   
test_simpszTestQuadrature.test_simps   s8    IIaLqDAs#!qS!	
r)   N)r:   r;   r<   r   rT   r[   rb   rf   rj   rm   rq   r   r   r   r   r   markfilterwarningsr   r   parametrizer   r   r#   r)   r'   r>   r>      s    "74474/7>6,>$ [[ <=U@ >U@n* [[Z%7	' 8	'
r)   r>   c                   *    e Zd Zd Zd Z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!   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!   g@)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&1 	-KD%(At$GE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   g      *@)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   Gz?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_none>  s    KKA1%$Q'*
z*$Q50
z*$Q1-*
z*$Q1d;0
z*r)   c           
          t        j                  d      j                  ddd      }|}t        t	        ||ddd      t        ||ddd      d	       y )
Nr   r   r!   r   r   r   )r   r   r   +=r,   )r7   r8   r   r	   r   r   r   s      r'   test_cumtrapzz&TestCumulative_trapezoid.test_cumtrapzQ  sO    IIi ((Aq1,Qc1M A#AqA"	$r)   N)r:   r;   r<   r   r   r   r  r  r#   r)   r'   r   r     s    /-*/0+&$r)   r   c                       e Zd ZdZd Zd Zy)TestTrapezoidz[This function is tested in NumPy more extensive, just do some
    basic due diligence here.c           
      B   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       y )Nro   rp   r   r   r   r   r   rw   r   r!   g?r   g      +@)r7   r8   r   r   r   r   s      r'   test_trapezoidzTestTrapezoid.test_trapezoid]  su    IIbMYq\3'YqS)2.YqBKK1b$9:B?IIaLqDYqA#.5r)   c           	          t        j                  d      }d|z  }t        t        ||dd      t	        ||dd             y )Nr   r!   r   r   )r%   r   r   )r7   r8   r   r   r   r   s      r'   
test_trapzzTestTrapezoid.test_trapzg  s;    IIaLqDYqA#A61c2	4r)   N)r:   r;   r<   __doc__r
  r  r#   r)   r'   r  r  Z  s    !64r)   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.matchz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>w      r)   c                 N    | j                   dk(  sJ t        j                  |       S r  )ndimr7   sumrw   s    r'   funcz/TestQMCQuad.test_input_validation.<locals>.funcy  s     66Q;;66!9r)   z8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                      yr  r#   rw   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r)   g     @)n_pointsz!`n_estimates` must be an integer.c                      yr  r#   rw   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#   rw   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r)   )qrngz8`qrng` must be initialized with dimensionality equal to c                      yr  r#   rw   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r)   z,`log` must be boolean \(`True` or `False`\).c                      yr  r#   rw   s    r'   r(   z3TestQMCQuad.test_input_validation.<locals>.<lambda>  r  r)   r   log)
r   raises	TypeErrorr   
ValueErrorwarnsUserWarningr   qmcSobol)r.   messager  s      r'   test_input_validationz!TestQMCQuad.test_input_validationp  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 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=
?)ry   r   c                  4    t        j                   |        S r5   )r7   r#  )rC   r  s    r'   r(   z(TestQMCQuad.basic_test.<locals>.<lambda>  s    tT{(; r)   T)r  r  r#  r  r  r,   gؗҜ<rx   )r7   zeroseyerandomdefault_rngr   r)  r*  onesr   r0  cdfscstdtritstandard_errorr	   r   prodexpimagr   )r.   r  r  signsr  rngr  rA   rB   resrefry   logresr3  r  r4  s                @@@r'   
basic_testzTestQMCQuad.basic_test  s   xx~ffTl	A ii##$78yyt#.HHTNGGDME!tQH#.T;''++AtSa+Hzz+a-/#2D2DD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   rI  )r.   r  r  s      r'   
test_basiczTestQMCQuad.test_basic  s     	+.r)   rD  r    r   c                 (    | j                  |       y )N)rD  rK  )r.   rD  s     r'   	test_signzTestQMCQuad.test_sign  s    e$r)   r#  FTc                     d}t        j                  t        |      5  t        d ddgddg|      }d d d        j                  |rt
        j                   ndk(  sJ |j                  dk(  sJ y # 1 sw Y   ?xY w)Nz-A lower limit was equal to an upper limit, sor  c                      yr  r#   rw   s    r'   r(   z'TestQMCQuad.test_zero.<locals>.<lambda>  r  r)   r   r    r"  )r   r'  r(  r   r   r7   infr@  )r.   r#  r+  rF  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   normr1  rw   s    r'   r  z-TestQMCQuad.test_flexible_input.<locals>.func  s    ::>>!1>--r)   r   r    r!   rU  g{Gz?)r   r   rW  r=  r	   r   )r.   r  rF  rG  s       r'   test_flexible_inputzTestQMCQuad.test_flexible_input  sS    	. tQ"jjnnQan(5::>>!1>+EEc40r)   N)r:   r;   r<   r,  r7   r<  rI  r   r   r   rL  rN  rR  rX  r#   r)   r'   r  r  o  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   numpyr7   r   r   r   numpy.testingr   r   r	   r
   r   scipy.integrater   r   r   r   r   r   r   r   r   r   r   r   r   r   scipyr   r   r>  r   r>   r   r  r  r#   r)   r'   <module>r]     sn       7 7' ' ' ' '3 3 e
 e
PQ$ Q$h4 4*\1 \1r)   