
    -ii`                        d Z ddl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 ddlmZmZmZmZmZ ddlZddlmZ ddlmZmZmZ  G d d          Z G d	 d
          Z G d de          Z G d de          Z G d d          Z G d d          Z  G d d          Z! G d de!          Z" G d de!          Z# G d de!          Z$ G d de!          Z%e"e#e$e%gZ&d Z'd Z(d Z)d  Z*d! Z+d" Z,d# Z-d$ Z. G d% d&          Z/ G d' d(e/          Z0 G d) d*e/          Z1 G d+ d,e/          Z2 G d- d.e/          Z3 G d/ d0e/          Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9dS )6z"
Tests for numerical integration.
    N)arangezerosarraydotsqrtcossineyepiexpallclose)assert_assert_array_almost_equalassert_allcloseassert_array_equalassert_equal)raises)odeintodecomplex_odec                       e Zd Zd Zd ZdS )
TestOdeintc                    t          dj        d          }t          j        j        |d          \  }}t                              ||                     t          fdj        |dd          \  }}t                              ||                     t          d          rt          j        j        |j        d          \  }}t                              ||                     t          fd	j        |fd
dd          \  }}t                              ||                     d S d S )N        g?Tfull_outputc                 0                         ||           S Nftyproblems     j/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/integrate/tests/test_integrate.py<lambda>z(TestOdeint._do_problem.<locals>.<lambda>    s    '))Aq//     )r   tfirstjac)Dfunr   c                 0                         ||           S r   r   r!   s     r%   r&   z(TestOdeint._do_problem.<locals>.<lambda>+   s    gii1oo r'   c                 0                         ||           S r   r)   r!   s     r%   r&   z(TestOdeint._do_problem.<locals>.<lambda>,   s    7;;q!3D3D r'   )r*   r   r(   )	r   stop_tr   r    z0r   verifyhasattrr)   )selfr$   r"   zinfodicts    `   r%   _do_problemzTestOdeint._do_problem   sd   3-- WY
A4HHH8q!$$%%% 99997:q)-d< < <8q!$$%%%7E"" 
	* GJ-13 3 3KAxGNN1a(())) !!=!=!=!=wz1&D&D&D&D-1$@ @ @KAx GNN1a(()))))
	* 
	*r'   c                 h    t           D ])} |            }|j        r|                     |           *d S r   PROBLEMScmplxr5   r2   problem_clsr$   s      r%   test_odeintzTestOdeint.test_odeint0   sJ    # 	& 	&K!kmmG} W%%%%		& 	&r'   N)__name__
__module____qualname__r5   r<    r'   r%   r   r      s2        * * *0& & & & &r'   r   c                       e Zd ZdZddZdS )TestODEClassNadamsc                    fd}d }t          d          rfd}i }j        j        j        |d<   j        |d<   |                     ||          } |j        |fj        dz  j        dz  |d| |                    j        d	           |	                    j
                  }t          ||j                   t          |                                |f           t          |                                d
k    |f           t                              t#          |g          j
                  |f           d S )Nc                 0                         ||           S r   r   r"   r3   r$   s     r%   r    z#TestODEClass._do_problem.<locals>.f?   s    99Q??"r'   r)   c                 0                         ||           S r   r-   rF   s     r%   r)   z%TestODEClass._do_problem.<locals>.jacC   s    {{1a(((r'   ubandlband
   )atolrtolmethodr   )r"   r   )r1   rI   rH   	ode_classset_integratorrK   rL   set_initial_valuer/   	integrater.   r   r#   r   
successfulget_return_coder0   r   )	r2   r$   
integratorrM   r    r)   integrator_paramsigr3   s	    `       r%   r5   zTestODEClass._do_problem<   s   	# 	# 	# 	# 	#7E"" 	)) ) ) ) ) =$(A)0g&)0g&^^As##* 	/&|B&|B!'	/ 	/ .		/ 	/ 	/ 	WZ3///LL((1bd###'6!2333""$$q(7F*;<<<uaSzz7>::Wf<MNNNNNr'   )rC   )r=   r>   r?   rN   r5   r@   r'   r%   rB   rB   8   s3        IO O O O O Or'   rB   c                   <    e Zd ZeZd Zd Zd Zd Zd Z	d Z
d ZdS )	TestOdec                     t           D ]I} |            }|j        r|j        s|                     |dd           |                     |dd           Jd S NvoderC   bdf)r8   r9   stiffr5   r:   s      r%   	test_vodezTestOde.test_vode_   sp    # 	5 	5K!kmmG} = ;  &':::Wfe4444	5 	5r'   c                     t           D ]A} |            }|j        s|                     |dd           |                     |dd           Bd S )NzvoderC   r\   r8   r]   r5   r:   s      r%   
test_zvodezTestOde.test_zvodei   sc    # 	6 	6K!kmmG= <  '7;;;Wgu5555		6 	6r'   c                 j    t           D ]*} |            }|j        r|                     |d           +d S Nlsodar7   r:   s      r%   
test_lsodazTestOde.test_lsodaq   sL    # 	/ 	/K!kmmG} Wg....		/ 	/r'   c                     t           D ]C} |            }|j        r|j        rt          |d          r-|                     |d           Dd S Nr)   dopri5r8   r9   r]   r1   r5   r:   s      r%   test_dopri5zTestOde.test_dopri5y   n    # 	0 	0K!kmmG} } w&& Wh////	0 	0r'   c                     t           D ]C} |            }|j        r|j        rt          |d          r-|                     |d           Dd S Nr)   dop853rj   r:   s      r%   test_dop853zTestOde.test_dop853   rl   r'   c                    dD ]}d }t          |                              |          }|                    dd           t          |                              |          }|                    dd           |                    |j        dz              |                    |j        dz              |                    |j        dz              |                                sJ d S )N)r[   r`   re   c                     dS N      ?r@   r"   r#   s     r%   r    z'TestOde.test_concurrent_fail.<locals>.f   s    sr'   r   皙?)r   rO   rP   rQ   r"   rR   )r2   solr    rr2s        r%   test_concurrent_failzTestOde.test_concurrent_fail   s     . 	" 	"C   A%%c**A1%%%Q&&s++B  A&&&KKc	"""LL$$$ KKc	"""<<>>!!!!	" 	"r'   c                    d }t          d          D ]6}dD ]}|dv r|dk    rt          |                              |          }|                    dd           t          |                              |          }|                    dd           |                    |j        dz              |                    |j        dz              |                    |j        dz              t          |j        d           t          |j        d           d	D ].}t          |                              |          }|                    dd           t          |                              |          }|                    dd           |                    |j        dz              |                    |j        dz              |                    |j        dz              |                    |j        dz              |                    |j        dz              t          |j        d
           t          |j        d           08d S )Nc                     dS rs   r@   ru   s     r%   r    z%TestOde.test_concurrent_ok.<locals>.f   s    3r'      )r[   r`   re   ri   ro   >   r[   re   r`      r   rv   g?ri   ro   g333333?)ranger   rO   rP   rQ   r"   r   r#   )r2   num_parallel_threadsr    krw   rx   ry   s          r%   test_concurrent_okzTestOde.test_concurrent_ok   s:   	 	 	 q 	+ 	+AE + +4449MPQ9Q9QFF))#..##Aq)))VV**3//$$Q***AC#I&&&RTCZ(((RTCZ(((S)))c****+ + +FF))#..##Aq)))VV**3//$$Q***AC#I&&&AC#I&&&RTCZ(((AC#I&&&RTCZ(((S)))c****+#	+ 	+r'   N)r=   r>   r?   r   rN   r^   rb   rf   rk   rp   rz   r   r@   r'   r%   rX   rX   [   s        I5 5 56 6 6/ / /
0 
0 
0
0 
0 
0" " "*#+ #+ #+ #+ #+r'   rX   c                   *    e Zd ZeZd Zd Zd Zd ZdS )TestComplexOdec                     t           D ]B} |            }|j        s|                     |dd           +|                     |dd           Cd S rZ   ra   r:   s      r%   r^   zTestComplexOde.test_vode   sf    # 	9 	9K!kmmG= 9  &'::::  &%8888	9 	9r'   c                 Z    t           D ]"} |            }|                     |d           #d S rd   )r8   r5   r:   s      r%   rf   zTestComplexOde.test_lsoda   sA     $ 	/ 	/K!kmmGWg....	/ 	/r'   c                     t           D ];} |            }|j        rt          |d          r%|                     |d           <d S rh   r8   r]   r1   r5   r:   s      r%   rk   zTestComplexOde.test_dopri5   a    # 	0 	0K!kmmG} w&& Wh////	0 	0r'   c                     t           D ];} |            }|j        rt          |d          r%|                     |d           <d S rn   r   r:   s      r%   rp   zTestComplexOde.test_dop853   r   r'   N)	r=   r>   r?   r   rN   r^   rf   rk   rp   r@   r'   r%   r   r      sU        I9 9 9/ / /0 0 00 0 0 0 0r'   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
TestSoloutc                   	
 g 	g 
d}d}ddg}	
fd}d }t          |                              |          }|                    |           |                    ||           |                    |          }t          
d         |           t          
d         |           t          	d         |           t          	d         |           d S )	Nr         $@rt          @c                                          |                                 |                                           d S r   appendcopyr"   r#   tsyss     r%   soloutz+TestSolout._run_solout_test.<locals>.solout   2    IIaLLLIIaffhhr'   c                 <    |d         |d         z   |d         dz   gS Nr   r~      r@   ru   s     r%   rhsz(TestSolout._run_solout_test.<locals>.rhs  #    aD1Q4K!A$'**r'   r   )r   rO   
set_soloutrP   rQ   r   r   r2   rT   t0tendy0r   r   rV   retr   r   s            @@r%   _run_solout_testzTestSolout._run_solout_test   s    3Z	  	  	  	  	  	 	+ 	+ 	+ XX$$Z00
f
R$$$ll4  2a5"%%%2b63'''RUBRVT"""""r'   c                 :    dD ]}|                      |           d S Nr   r   r2   rT   s     r%   test_soloutzTestSolout.test_solout  2    . 	. 	.J!!*----	. 	.r'   c                   	
 g 	g 
d}d}ddg}	
fd}d }t          |                              |          }|                    ||           |                    |           |                    |          }t          
d         |           t          
d         |           t          	d         |           t          	d         |           d S )	Nr   r   rt   r   c                                          |                                 |                                           d S r   r   r   s     r%   r   z9TestSolout._run_solout_after_initial_test.<locals>.solout  r   r'   c                 <    |d         |d         z   |d         dz   gS r   r@   ru   s     r%   r   z6TestSolout._run_solout_after_initial_test.<locals>.rhs  r   r'   r   r   )r   rO   rP   r   rQ   r   r   r   s            @@r%   _run_solout_after_initial_testz)TestSolout._run_solout_after_initial_test  s    3Z	  	  	  	  	  	 	+ 	+ 	+ XX$$Z00
R$$$
fll4  2a5"%%%2b63'''RUBRVT"""""r'   c                 :    dD ]}|                      |           d S r   )r   r   s     r%   test_solout_after_initialz$TestSolout.test_solout_after_initial+  s2    . 	< 	<J//
;;;;	< 	<r'   c                   	
 g 	g 
d}dddg}	
fd}d }t          |                              |          }|                    |           |                    ||           |                              }t          
d         |           t          
d         |           t          	d         |           t          	d         dz  k               t          	d         k                d S )	Nr   r   rt   r   c                                          |                                 |                                           | dz  k    rdS d S Nr   r   r   r"   r#   r   r   r   s     r%   r   z1TestSolout._run_solout_break_test.<locals>.solout7  E    IIaLLLIIaffhh48||r |r'   c                 <    |d         |d         z   |d         dz   gS r   r@   ru   s     r%   r   z.TestSolout._run_solout_break_test.<locals>.rhs=  r   r'   r   r   )r   rO   r   rP   rQ   r   r   r   r2   rT   r   r   r   r   rV   r   r   r   r   s           @@@r%   _run_solout_break_testz!TestSolout._run_solout_break_test/  s   3Z	 	 	 	 	 	 		+ 	+ 	+ XX$$Z00
f
R$$$ll4  2a5"%%%2b63'''RUB2c!"""2r'   c                 :    dD ]}|                      |           d S r   r   r   s     r%   test_solout_breakzTestSolout.test_solout_breakJ  2    . 	4 	4J''
3333	4 	4r'   N)	r=   r>   r?   r   r   r   r   r   r   r@   r'   r%   r   r      sn        # # #0. . .# # #0< < <  64 4 4 4 4r'   r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestComplexSoloutc                   	
 g 	g 
d}d}dg}	
fd}d }t          |                              |          }|                    |           |                    ||           |                    |          }t          
d         |           t          
d         |           t          	d         |           t          	d         |           d S )Nr         4@c                                          |                                 |                                           d S r   r   r   s     r%   r   z2TestComplexSolout._run_solout_test.<locals>.soloutY  r   r'   c                     d| dz
  dz
  z  gS Nrt   r                 ?r@   ru   s     r%   r   z/TestComplexSolout._run_solout_test.<locals>.rhs]      TB'((r'   r   r   )r   rO   r   rP   rQ   r   r   r   s            @@r%   r   z"TestComplexSolout._run_solout_testQ  s    U	  	  	  	  	  	 	) 	) 	) ,,Z88
f
R$$$ll4  2a5"%%%2b63'''RUBRVT"""""r'   c                 :    dD ]}|                      |           d S r   r   r   s     r%   r   zTestComplexSolout.test_solouti  r   r'   c                   	
 g 	g 
d}ddg}	
fd}d }t          |                              |          }|                    |           |                    ||           |                              }t          
d         |           t          
d         |           t          	d         |           t          	d         dz  k               t          	d         k                d S )Nr   r   c                                          |                                 |                                           | dz  k    rdS d S r   r   r   s     r%   r   z8TestComplexSolout._run_solout_break_test.<locals>.soloutu  r   r'   c                     d| dz
  dz
  z  gS r   r@   ru   s     r%   r   z5TestComplexSolout._run_solout_break_test.<locals>.rhs{  r   r'   r   r   r   )r   rO   r   rP   rQ   r   r   r   r   s           @@@r%   r   z(TestComplexSolout._run_solout_break_testm  s   U	 	 	 	 	 	 		) 	) 	) ,,Z88
f
R$$$ll4  2a5"%%%2b63'''RUB2c!"""2r'   c                 :    dD ]}|                      |           d S r   r   r   s     r%   r   z#TestComplexSolout.test_solout_break  r   r'   N)r=   r>   r?   r   r   r   r   r@   r'   r%   r   r   O  sP        # # #0. . .  64 4 4 4 4r'   r   c                   2    e Zd ZdZdZdZdZg ZdZdZ	dZ
dZdS )ODEz
    ODE problem
    Fr~   Ngư>gh㈵>)r=   r>   r?   __doc__r]   r9   r.   r/   rI   rH   rK   rL   r@   r'   r%   r   r     sB          EEF	BEEDDDDr'   r   c                   F    e Zd ZdZdZ eddge          ZdZdZ	d Z
d ZdS )	SimpleOscillatorz
    Free vibration of a simple oscillator::
        m \ddot{u} + k u = 0, u(0) = u_0 \dot{u}(0) \dot{u}_0
    Solution::
        u(t) = u_0*cos(sqrt(k/m)*t)+\dot{u}_0*sin(sqrt(k/m)*t)/sqrt(k/m)
    gq=
ףp?rt   rv   g      @c                 |    t          dt                    }d|d<   | j         | j        z  |d<   t	          ||          S )N)r   r   rt   r   r~   )r~   r   )r   floatr   mr   )r2   r3   r"   tmps       r%   r    zSimpleOscillator.f  s<    FE""D	VGdf$D	3{{r'   c                    t          | j        | j        z            }| j        d         t	          ||z            z  | j        d         t          ||z            z  |z  z   }t          ||d d df         | j        | j                  S )Nr   r~   rK   rL   )	r   r   r   r/   r   r	   r   rK   rL   )r2   zsr"   omegaus        r%   r0   zSimpleOscillator.verify  sw    TVdf_%%GAJs57||#dgajU1W&=e&CC2aaad8$)$)DDDDr'   N)r=   r>   r?   r   r.   r   r   r/   r   r   r    r0   r@   r'   r%   r   r     sg          F	Sz5	!	!BAA  E E E E Er'   r   c                   L    e Zd ZdZdez  Z eg d          ZdZd Z	d Z
d ZdS )	
ComplexExpzThe equation :lm:`\dot u = i u`gGz?)r   y               @y              @y              @y              @Tc                     d|z  S )Nr   r@   r2   r3   r"   s      r%   r    zComplexExp.f  s    !tr'   c                 &    dt          d          z  S )Nr      )r
   r   s      r%   r)   zComplexExp.jac  s    #a&&yr'   c                 p    | j         t          d|z            z  }t          ||| j        | j                  S )Nr   r   )r/   r   r   rK   rL   r2   r   r"   r   s       r%   r0   zComplexExp.verify  s3    Gc"Q$ii2DIDI>>>>r'   N)r=   r>   r?   r   r   r.   r   r/   r9   r    r)   r0   r@   r'   r%   r   r     sk        **"WF	!!!	"	"BE    ? ? ? ? ?r'   r   c                   ,    e Zd ZdZdZdgZdZd Zd ZdS )Piz'Integrate 1/(t + 1j) from t=-10 to t=10   r   Tc                 4    t          d|dz
  dz   z  g          S )Nrt   rJ   r   r   r   s      r%   r    zPi.f  s     b!b&2+&'(((r'   c                 ~    dt          j        d          z  }t          ||dd d f         | j        | j                  S )Ny              rJ   r   r   )nparctanr   rK   rL   r   s       r%   r0   z	Pi.verify  s;    ")B--2b!!!e94949EEEEr'   N)	r=   r>   r?   r   r.   r/   r9   r    r0   r@   r'   r%   r   r     sN        22F
BE) ) )F F F F Fr'   r   c                   D    e Zd ZdZdZdZg dZdZdZg dZ	d Z
d	 Zd
 ZdS )CoupledDecayze
    3 coupled decays suited for banded treatment
    (banded mode makes it necessary when N>>3)
    T      ?)g      @g      @g      *@r~   r   )g(\?gq=
ףp?g(\?c                     | j         }t          j        |d          |d         z  |d          |d         z  |d         |d         z  z   |d          |d         z  |d         |d         z  z   g          S r   )lmbdr   r   )r2   r3   r"   r   s       r%   r    zCoupledDecay.f  sv    yx$q'!A$q'!A$a15q'!A$a157 8 8 	8r'   c                 8     j         }t          j         j         j        z   dz   dfd           fd} |dd|d                      |dd|d                     |dd|d                      |dd|d                     |dd|d                     S )Nr~   r}   Forderc                 ,    |j         | z   |z
  |f<   d S r   )rH   )ricivaljr2   s      r%   set_jzCoupledDecay.jac.<locals>.set_j  s#    *-Adj2o"B&'''r'   r   r   )r   r   r   rI   rH   )r2   r3   r"   r   r   r   s   `    @r%   r)   zCoupledDecay.jac  s     yHdj4:-115SAAA	. 	. 	. 	. 	. 	.aT!WHaDGaT!WHaDGaT!WHr'   c           
      $   t          j        | j                  }|d         |d         z
  }|d         |d         z
  }|d         |d         z
  }t          j        |d          |z            }t          j        |d          |z            }t          j        |d          |z            }	t          j        | j        d         |z  | j        d         |z  | j        d         |d         z  |z  ||z
  z  z   | j        d         |	z  | j        d         |d         z  |z  ||	z
  z  z   |d         |d         z  | j        d         z  |z  d|z  ||	z
  z  d|z  ||	z
  z  z
  z  z   f                                          }
t          |
|| j        | j	                  S )Nr~   r   r   r   )
r   r   r   r   vstackr/   	transposer   rK   rL   )r2   r   r"   r   d10d21d20e0e1e2r   s              r%   r0   zCoupledDecay.verify  s   x	""1gQ1gQ1gQVT!WHqL!!VT!WHqL!!VT!WHqL!!IGAJOGAJOdgaj472S8BGDDGAJOdgaj472S8BGDDGd1g
*S0WR 1s7b2g#66889 : :
 ;D)++ 	
 2DIDI>>>>r'   N)r=   r>   r?   r   r]   r.   r/   rI   rH   r   r    r)   r0   r@   r'   r%   r   r     sw         
 EF			BEED8 8 8  2? ? ? ? ?r'   r   c                 (    |d         |d          g}|S Nr~   r   r@   )r"   xdxdts      r%   r    r      s    aD1Q4%=DKr'   c                 0    t          ddgddgg          }|S )Nr   rt         r   )r"   r  r   s      r%   r)   r)   #  s(    Szc{ 	 	AHr'   c                 4    ||d         z  | |d         z  g}|S r  r@   r"   r  r   r  s       r%   f1r  )  s#    !A$Jqt$DKr'   c                 2    t          d|g| dgg          }|S Nr   r   r"   r  r   r   s       r%   jac1r  .  s*    U|} 	 	AHr'   c                 4    ||d         z  | |d         z  g}|S r  r@   )r"   r  omega1omega2r  s        r%   f2r  4  s#    1Q4K&1&DKr'   c                 2    t          d|g| dgg          }|S r  r   )r"   r  r  r  r   s        r%   jac2r  9  s*    V}~ 	  	 AHr'   c                 L    |d         |d         z  |d          |d         z  g}|S )Nr   r~   r@   r  s       r%   fvr  ?  s+    !HQqTME!H9QqT>*DKr'   c                 J    t          d|d         g|d          dgg          }|S )Nr   r   r~   r   r  s       r%   jacvr  D  s3    U1Xq	3! 	" 	"AHr'   c                   D    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S )ODECheckParameterUsez=Call an ode-class solver with several cases of parameter use. Fc                     t          ||          }| j        r$|                    | j        dd| j                   n|                    | j        dd           |S )Ng&.>gHz>)rK   rL   with_jacobianr   )r   solver_uses_jacrO   solver_name)r2   r    r)   solvers       r%   _get_solverz ODECheckParameterUse._get_solverS  su    Q 	J!!$"2D040D " F F F F !!$"2D!IIIr'   c                     ddg}|                     |d           |                    t                     t          |j        ddg           d S )Nrt   r   r	  )rP   rQ   r   r   r#   r2   r"  ics      r%   _check_solverz"ODECheckParameterUse._check_solver_  sQ    3Z  S)))!&(T3K88888r'   c                 p    |                      t          t                    }|                     |           d S r   )r#  r    r)   r'  )r2   r"  s     r%   test_no_paramsz#ODECheckParameterUse.test_no_paramse  s1    !!!S))6"""""r'   c                     |                      t          t                    }d}|                    |           | j        r|                    |           |                     |           d S rs   )r#  r  r  set_f_paramsr   set_jac_paramsr'  r2   r"  r   s      r%   test_one_scalar_paramz*ODECheckParameterUse.test_one_scalar_parami  si    !!"d++E""" 	)!!%(((6"""""r'   c                     |                      t          t                    }d}d}|                    ||           | j        r|                    ||           |                     |           d S rs   )r#  r  r  r+  r   r,  r'  )r2   r"  r  r  s       r%   test_two_scalar_paramsz+ODECheckParameterUse.test_two_scalar_paramsq  sr    !!"d++FF+++ 	2!!&&1116"""""r'   c                     |                      t          t                    }ddg}|                    |           | j        r|                    |           |                     |           d S rs   )r#  r  r  r+  r   r,  r'  r-  s      r%   test_vector_paramz&ODECheckParameterUse.test_vector_paramz  sm    !!"d++c
E""" 	)!!%(((6"""""r'   c                 J   |                      t          t                    }|                    | j        d           ddg}|                    |d           t          j        t                    5  |	                    t                     d d d            d S # 1 swxY w Y   d S )Nr~   )nstepsrt   r   )r#  r    r)   rO   r!  rP   pytestwarnsUserWarningrQ   r   r%  s      r%   test_warns_on_failurez*ODECheckParameterUse.test_warns_on_failure  s    !!!S))d.q9993Z  S)))\+&& 	! 	!R   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   0BBBN)r=   r>   r?   r   r!  r   r#  r'  r)  r.  r0  r2  r8  r@   r'   r%   r  r  J  s        GG
 KO
 
 
9 9 9# # ## # ## # ## # #! ! ! ! !r'   r  c                       e Zd ZdZdZdS )TestDOPRI5CheckParameterUseri   FNr=   r>   r?   r!  r   r@   r'   r%   r:  r:            KOOOr'   r:  c                       e Zd ZdZdZdS )TestDOP853CheckParameterUsero   FNr;  r@   r'   r%   r>  r>    r<  r'   r>  c                       e Zd ZdZdZdS )TestVODECheckParameterUser[   TNr;  r@   r'   r%   r@  r@    s        KOOOr'   r@  c                       e Zd ZdZdZdS )TestZVODECheckParameterUser`   TNr;  r@   r'   r%   rB  rB            KOOOr'   rB  c                       e Zd ZdZdZdS )TestLSODACheckParameterUsere   TNr;  r@   r'   r%   rE  rE    rC  r'   rE  c                      d} dg}t          d | |d          \  }}t          |t          j        | gg                     d S )Nr~   r   c                     |  S r   r@   )r#   r"   s     r%   r&   z*test_odeint_trivial_time.<locals>.<lambda>  s    1" r'   Tr   )r   r   r   r   )r   r"   r#   infos       r%   test_odeint_trivial_timerI    sP     
B	
A__b!>>>GAtq"(RD6**+++++r'   c                     d d d } d fd}t          g dg dg dg d	g          }t          j        d
          }t          j         g d          }t          |||fdddd	  	        \  }}t          |||fdddd| d
  
        \  }}t          |||fdddddd          \  }	}
t          |||fdddd|ddd          \  }}t	          ||d           t	          ||	dd           t	          |	|d           t          |d         |d                    t          |
d         |d                    t          fd|||fddddfdd
  
        \  }}t	          ||dd !           d S )"Nc                 ,    |                     |           S r   )r   r#   r"   cs      r%   funcz)test_odeint_banded_jacobian.<locals>.func  s    uuQxxr'   c                     |S r   r@   rL  s      r%   r)   z(test_odeint_banded_jacobian.<locals>.jac  s    r'   c                 8    |j                             d          S NCr   Tr   rL  s      r%   jac_transposez2test_odeint_banded_jacobian.<locals>.jac_transpose  s    sxxcx"""r'   c           
      :   t          j        t           j        dt          j        |d          f         t          j        |          t           j        t          j        |d          df         t           j        t          j        |d          ddf         f          }|S )Nr   r~   r   )r   r   r_diag)r#   r"   rM  r)   s       r%   	bjac_rowsz.test_odeint_banded_jacobian.<locals>.bjac_rows  sv    iq"'!Q--/0GAJJE"'!R..!"34E"'!R..!Q"679 : : 
r'   c                 P     | ||          j                             d          S rQ  rS  )r#   r"   rM  rZ  s      r%   	bjac_colsz.test_odeint_banded_jacobian.<locals>.bjac_cols  s+    yAq!!#((s(333r'   )i3{Gz?r   r   )rv   g      g{Gz?r   )gMbP?r]  g       r]  )r   r   rv   r	     )r   r   rJ   d   TgvIh%<=gdy=i'  )argsr   rK   rL   mxstepr*   )r`  r   rK   rL   ra  r*   	col_derivr   r~   )r`  r   rK   rL   ra  r*   mlmu)	r`  r   rK   rL   ra  r*   rc  rd  rb  zsol1 != sol2)err_msg-q=zsol1 != sol3)rK   re  zsol3 != sol4njec                      || |          S r   r@   )r"   r#   rM  rN  s      r%   r&   z-test_odeint_banded_jacobian.<locals>.<lambda>  s    TT!Q]] r'   c                      || |          S r   r@   )r"   r#   rM  r)   s      r%   r&   z-test_odeint_banded_jacobian.<locals>.<lambda>  s    ##aA,, r'   )r`  r   rK   rL   ra  r*   r(   zsol1 != sol1ty)rL   re  )r   r   onesr   r   r   )rU  r\  rM  r   r"   sol1info1sol2info2sol3info3sol4info4sol1tyinfo1tyrZ  rN  r)   s                  @@@r%   test_odeint_banded_jacobianru    sc       # # #  4 4 4 4 4 	&&&&&&'''&&&( 	) 	)A
 
B
!!A r1A4T#%!# # #KD%
 r1A4T#%+t= = =KD%
 r1A4T#%'A!5 5 5KD%
 r1A4T#%'A!tE E EKD% D$7777D$UNCCCCD$7777 uU|U5\222uU|U5\222 ::::B)-E$)">">">">tM M MOFG D&u6FGGGGGGr'   c                  v   d } d }d }d }d }d }d }t          t          t          |dd	d
g           t          t          t          |dd	d
g           t          t          t          | dd	d
g|           t          t          t          | dd	d
g|           t          t          t          |ddgd	d
g|           d S )Nc                     d| z  S Nr@   r  r"   s     r%   sys1dz!test_odeint_errors.<locals>.sys1d      Avr'   c                     ddz  S Nrt   r   r@   rz  s     r%   bad1z test_odeint_errors.<locals>.bad1      1ur'   c                     dS Nfoor@   rz  s     r%   bad2z test_odeint_errors.<locals>.bad2  s    ur'   c                     ddz  S r~  r@   rz  s     r%   bad_jac1z$test_odeint_errors.<locals>.bad_jac1  r  r'   c                 
    dggS r  r@   rz  s     r%   bad_jac2z$test_odeint_errors.<locals>.bad_jac2  s    yr'   c                 .    d| d         z  d| d         z  gS )Nry  r   皙r~   r@   rz  s     r%   sys2dz!test_odeint_errors.<locals>.sys2d  s    QqT	4!9%%r'   c                     ddz  dgddggS )Nrt   r   r  r@   rz  s     r%   sys2d_bad_jacz)test_odeint_errors.<locals>.sys2d_bad_jac
  s    Q
QI&&r'   rt   r   r~   r*   )assert_raisesZeroDivisionErrorr   
ValueError)r{  r  r  r  r  r  r  s          r%   test_odeint_errorsr    s             & & &' ' ' #VT3A???*fdC!Q888#VUC!QhOOOO*feS1a&xHHHH#VUS#JA$& & & & & &r'   c                  6   d } d }d }ddgddgg}t          t          t          ||ddg           ddgddgg}t          t          t          |dg|           t          t          t          | d	ddg           t          t          t          |d	d	gddg|
           d S )Nc                 
    ddgS )Nr~   r   r@   rz  s     r%   badrhsz&test_odeint_bad_shapes.<locals>.badrhs  s    2wr'   c                     d| z  S rx  r@   rz  s     r%   sys1z$test_odeint_bad_shapes.<locals>.sys1  r|  r'   c                     g dgS )N)r   r   r   r@   rz  s     r%   badjacz&test_odeint_bad_shapes.<locals>.badjac   s    		{r'   r   r~   r   r}   r   rJ   r  )r  r  r   RuntimeError)r  r  r  bad_y0bad_ts        r%   test_odeint_bad_shapesr    s           !fq!fF*fdFQF;;; VaVE*fdTFE::: ,QF;;; ,r2hAVLLLLLLr'   c                     d } t          j        d          }t          | dg|          }t          |t          j        t          |          df                     dt          j        d          z  }dgdz  |d|z  d|z  d	|z  gz   }t          | ddg|d
d
          }t          j        ddggdz  ddgddgddgddggz             }t          ||           t          | dgg           }t          |t          j        g t           j	                  
                    d                     t          t          t          | dgg d           t          t          t          | g dg d           dS )zRegression test for gh-8217.c                     d| z  S )Ng      пr@   rz  s     r%   rN  z$test_repeated_t_values.<locals>.func5  s    Qwr'   rJ   rt   r~   r^  r   r   	   r}   rf  )rL   rK   r   r   g      ?g      ?)dtyper   )r   r~   r   r   )r~   r   r}   )r   r   rW  r}   N)r   r   r   r   rj  lenlogr   r   float64reshaper  r  )rN  r"   rw   tauexpected_sols        r%   test_repeated_t_valuesr  2  s      	A
tQ

CsBGSVVQK00111
BF1II+C	
AaeQsUAcE**A
1vqu5
9
9
9C8c3ZLN!3Z"C["C[#T],, - -L
 C&&& tR
 
 CsBHRrz:::BB6JJKKK *fdRD...AAA*fdIII~~~FFFFFr'   ):r   numpyr   r   r   r   r   r   r   r	   r
   r   r   r   numpy.testingr   r   r   r   r   r5  r   r  scipy.integrater   r   r   r   rB   rX   r   r   r   r   r   r   r   r   r8   r    r)   r  r  r  r  r  r  r  r:  r>  r@  rB  rE  rI  ru  r  r  r  r@   r'   r%   <module>r     s                                 7 7 7 7 7 7 7 7 7 7 7 7 7 7  * * * * * * 4 4 4 4 4 4 4 4 4 4 &  &  &  &  &  &  &  &F O  O  O  O  O  O  O  OFn+ n+ n+ n+ n+l n+ n+ n+b&0 &0 &0 &0 &0\ &0 &0 &0RW4 W4 W4 W4 W4 W4 W4 W4t;4 ;4 ;4 ;4 ;4 ;4 ;4 ;4F        E E E E Es E E E2? ? ? ? ? ? ? ?"F F F F F F F F<? <? <? <? <?3 <? <? <?~ j"l;
  
    
    
    
  ?! ?! ?! ?! ?! ?! ?! ?!D    "6   
    "6   
     4   
    !5   
    !5   
, , ,FH FH FHR& & &@M M M6G G G G Gr'   