
    ^Mh#`                        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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&          Z0 G d' d(e0          Z1 G d) d*e0          Z2 G d+ d,e0          Z3 G d- d.e0          Z4 G d/ d0e0          Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d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assert_warns)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     d/var/www/html/test/jupyter/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cmplxr6   r3   problem_clsr%   s      r&   test_odeintzTestOdeint.test_odeint0   sJ    # 	& 	&K!kmmG} W%%%%		& 	&r(   N)__name__
__module____qualname__r6   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#   r4   r%   s     r&   r!   z#TestODEClass._do_problem.<locals>.f?   s    99Q??"r(   r*   c                 0                         ||           S r   r.   rG   s     r&   r*   z%TestODEClass._do_problem.<locals>.jacC   s    {{1a(((r(   ubandlband
   )atolrtolmethodr   )r#   r   )r2   rJ   rI   	ode_classset_integratorrL   rM   set_initial_valuer0   	integrater/   r   r$   r   
successfulget_return_coder1   r   )	r3   r%   
integratorrN   r!   r*   integrator_paramsigr4   s	    `       r&   r6   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(   )rD   )r>   r?   r@   rO   r6   rA   r(   r&   rC   rC   8   s3        IO O O O O Or(   rC   c                   `    e Zd ZeZd Zd Zd Zd Zd Z	e
j        j        d             Zd ZdS )	TestOdec                     t           D ]I} |            }|j        r|j        s|                     |dd           |                     |dd           Jd S NvoderD   bdf)r9   r:   stiffr6   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zvoderD   r]   r9   r^   r6   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lsodar8   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r9   r:   r^   r2   r6   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*   dop853rk   r;   s      r&   test_dop853zTestOde.test_dop853   rm   r(   c                    dD ]}d }t          |                              |          }|                    dd           t          |                              |          }|                    dd           |                    |j        dz              |                    |j        dz              t          t          |j        |j        dz              d S )N)r\   ra   rf   c                     dS N      ?rA   r#   r$   s     r&   r!   z'TestOde.test_concurrent_fail.<locals>.f   s    sr(   r   皙?)r   rP   rQ   rR   r#   assert_raisesRuntimeError)r3   solr!   rr2s        r&   test_concurrent_failzTestOde.test_concurrent_fail   s    - 	@ 	@C   A%%c**A1%%%Q&&s++B  A&&&KKc	"""LL$$$,QS3Y????	@ 	@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 rt   rA   rv   s     r&   r!   z%TestOde.test_concurrent_ok.<locals>.f   s    3r(      )r\   ra   rf   rj   rp   >   r\   rf   ra      r   rw   g?rj   rp   g333333?)ranger   rP   rQ   rR   r#   r   r$   )r3   num_parallel_threadsr!   krz   r{   r|   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   rO   r_   rc   rg   rl   rq   pytestmarkthread_unsafer}   r   rA   r(   r&   rY   rY   [   s        I5 5 56 6 6/ / /
0 
0 
0
0 
0 
0 [@ @ @ #+ #+ #+ #+ #+r(   rY   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 r[   rb   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 re   )r9   r6   r;   s      r&   rg   zTestComplexOde.test_lsoda   sA     $ 	/ 	/K!kmmGWg....	/ 	/r(   c                     t           D ];} |            }|j        rt          |d          r%|                     |d           <d S ri   r9   r^   r2   r6   r;   s      r&   rl   zTestComplexOde.test_dopri5   a    # 	0 	0K!kmmG} w&& Wh////	0 	0r(   c                     t           D ];} |            }|j        rt          |d          r%|                     |d           <d S ro   r   r;   s      r&   rq   zTestComplexOde.test_dop853   r   r(   N)	r>   r?   r@   r   rO   r_   rg   rl   rq   rA   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         $@ru          @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      rA   rv   s     r&   rhsz(TestSolout._run_solout_test.<locals>.rhs   #    aD1Q4K!A$'**r(   r   )r   rP   
set_soloutrQ   rR   r   r   r3   rU   t0tendy0r   r   rW   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   r3   rU   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   ru   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   rA   rv   s     r&   r   z6TestSolout._run_solout_after_initial_test.<locals>.rhs  r   r(   r   r   )r   rP   rQ   r   rR   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   ru   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>.solout3  E    IIaLLLIIaffhh48||r |r(   c                 <    |d         |d         z   |d         dz   gS r   rA   rv   s     r&   r   z.TestSolout._run_solout_break_test.<locals>.rhs9  r   r(   r   r   )r   rP   r   rQ   rR   r   r   r   r3   rU   r   r   r   r   rW   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_breakF  2    . 	4 	4J''
3333	4 	4r(   N)	r>   r?   r@   r   r   r   r   r   r   rA   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>.soloutU  r   r(   c                     d| dz
  dz
  z  gS Nru   r                 ?rA   rv   s     r&   r   z/TestComplexSolout._run_solout_test.<locals>.rhsY      TB'((r(   r   r   )r   rP   r   rQ   rR   r   r   r   s            @@r&   r   z"TestComplexSolout._run_solout_testM  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_soloute  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>.soloutq  r   r(   c                     d| dz
  dz
  z  gS r   rA   rv   s     r&   r   z5TestComplexSolout._run_solout_break_test.<locals>.rhsw  r   r(   r   r   r   )r   rP   r   rQ   rR   r   r   r   r   s           @@@r&   r   z(TestComplexSolout._run_solout_break_testi  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   rA   r(   r&   r   r   K  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^   r:   r/   r0   rJ   rI   rL   rM   rA   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?ru   rw   g      @c                 |    t          dt                    }d|d<   | j         | j        z  |d<   t	          ||          S )N)r   r   ru   r   r   )r   r   )r   floatr   mr   )r3   r4   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   rL   rM   )	r   r   r   r0   r   r	   r   rL   rM   )r3   zsr#   omegaus        r&   r1   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   r0   r   r   r!   r1   rA   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   rA   r3   r4   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   )r0   r   r   rL   rM   r3   r   r#   r   s       r&   r1   zComplexExp.verify  s3    Gc"Q$ii2DIDI>>>>r(   N)r>   r?   r@   r   r   r/   r   r0   r:   r!   r*   r1   rA   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 )Nru   rK   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              rK   r   r   )nparctanr   rL   rM   r   s       r&   r1   z	Pi.verify  s;    ")B--2b!!!e94949EEEEr(   N)	r>   r?   r@   r   r/   r0   r:   r!   r1   rA   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   )r3   r4   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   )rI   )ricivaljr3   s      r&   set_jzCoupledDecay.jac.<locals>.set_j  s#    *-Adj2o"B&'''r(   r   r   )r   r   r   rJ   rI   )r3   r4   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   vstackr0   	transposer   rL   rM   )r3   r   r#   r   d10d21d20e0e1e2r   s              r&   r1   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/   r0   rJ   rI   r   r!   r*   r1   rA   r(   r&   r   r     sw         
 EF			BEED8 8 8  2? ? ? ? ?r(   r   c                 (    |d         |d          g}|S Nr   r   rA   )r#   xdxdts      r&   r!   r!     s    aD1Q4%=DKr(   c                 0    t          ddgddgg          }|S )Nr   ru         r   )r#   r  r   s      r&   r*   r*     s(    Szc{ 	 	AHr(   c                 4    ||d         z  | |d         z  g}|S r  rA   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  rA   )r#   r  omega1omega2r  s        r&   f2r  0  s#    1Q4K&1&DKr(   c                 2    t          d|g| dgg          }|S r  r   )r#   r  r  r  r   s        r&   jac2r  5  s*    V}~ 	  	 AHr(   c                 L    |d         |d         z  |d          |d         z  g}|S )Nr   r   rA   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   @  s3    U1Xq	3! 	" 	"AHr(   c                   h    e 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
             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>)rL   rM   with_jacobianr   )r   solver_uses_jacrP   solver_name)r3   r!   r*   solvers       r&   _get_solverz ODECheckParameterUse._get_solverO  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 )Nru   r   r  )rQ   rR   r   r   r$   r3   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-  )r3   r(  s     r&   test_no_paramsz#ODECheckParameterUse.test_no_paramsa  s1    !!!S))6"""""r(   c                     |                      t          t                    }d}|                    |           | j        r|                    |           |                     |           d S rt   )r)  r  r  set_f_paramsr&  set_jac_paramsr-  r3   r(  r   s      r&   test_one_scalar_paramz*ODECheckParameterUse.test_one_scalar_parame  si    !!"d++E""" 	)!!%(((6"""""r(   c                     |                      t          t                    }d}d}|                    ||           | j        r|                    ||           |                     |           d S rt   )r)  r  r  r1  r&  r2  r-  )r3   r(  r  r  s       r&   test_two_scalar_paramsz+ODECheckParameterUse.test_two_scalar_paramsm  sr    !!"d++FF+++ 	2!!&&1116"""""r(   c                     |                      t          t                    }ddg}|                    |           | j        r|                    |           |                     |           d S rt   )r)  r  r   r1  r&  r2  r-  r3  s      r&   test_vector_paramz&ODECheckParameterUse.test_vector_paramv  sm    !!"d++c
E""" 	)!!%(((6"""""r(   c                     |                      t          t                    }|                    | j        d           ddg}|                    |d           t          t          |j        t                     d S )Nr   )nstepsru   r   )
r)  r!   r*   rP   r'  rQ   r   UserWarningrR   r   r+  s      r&   test_warns_on_failurez*ODECheckParameterUse.test_warns_on_failure~  so     !!!S))d.q9993Z  S)))[&"2B77777r(   N)r>   r?   r@   r   r'  r&  r)  r-  r/  r4  r6  r8  r   r   r   r<  rA   r(   r&   r"  r"  F  s        GG
 KO
 
 
9 9 9# # ## # ## # ## # # [8 8 8 8 8r(   r"  c                       e Zd ZdZdZdS )TestDOPRI5CheckParameterUserj   FNr>   r?   r@   r'  r&  rA   r(   r&   r>  r>            KOOOr(   r>  c                       e Zd ZdZdZdS )TestDOP853CheckParameterUserp   FNr?  rA   r(   r&   rB  rB    r@  r(   rB  c                       e Zd ZdZdZdS )TestVODECheckParameterUser\   TNr?  rA   r(   r&   rD  rD    s        KOOOr(   rD  c                       e Zd ZdZdZdS )TestZVODECheckParameterUsera   TNr?  rA   r(   r&   rF  rF            KOOOr(   rF  c                       e Zd ZdZdZdS )TestLSODACheckParameterUserf   TNr?  rA   r(   r&   rI  rI    rG  r(   rI  c                      d} dg}t          d | |d          \  }}t          |t          j        | gg                     d S )Nr   r   c                     |  S r   rA   )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_timerM    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   rA   rP  s      r&   r*   z(test_odeint_banded_jacobian.<locals>.jac  s    r(   c                 8    |j                             d          S NCr   Tr   rP  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#   rQ  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 rU  rW  )r$   r#   rQ  r^  s      r&   	bjac_colsz.test_odeint_banded_jacobian.<locals>.bjac_cols  s+    yAq!!#((s(333r(   )i3{Gz?r   r   )rw   g      g{Gz?r   )gMbP?ra  g       ra  )r   r   rw   r     )r   r   rK   d   TgvIh%<=gdy=i'  )argsr   rL   rM   mxstepr+   )rd  r   rL   rM   re  r+   	col_derivr   r   )rd  r   rL   rM   re  r+   mlmu)	rd  r   rL   rM   re  r+   rg  rh  rf  zsol1 != sol2)err_msg-q=zsol1 != sol3)rL   ri  zsol3 != sol4njec                      || |          S r   rA   )r#   r$   rQ  rR  s      r&   r'   z-test_odeint_banded_jacobian.<locals>.<lambda>  s    TT!Q]] r(   c                      || |          S r   rA   )r#   r$   rQ  r*   s      r&   r'   z-test_odeint_banded_jacobian.<locals>.<lambda>  s    ##aA,, r(   )rd  r   rL   rM   re  r+   r)   zsol1 != sol1ty)rM   ri  )r   r   onesr   r   r   )rY  r`  rQ  r   r#   sol1info1sol2info2sol3info3sol4info4sol1tyinfo1tyr^  rR  r*   s                  @@@r&   test_odeint_banded_jacobianry    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 NrA   r  r#   s     r&   sys1dz!test_odeint_errors.<locals>.sys1d      Avr(   c                     ddz  S Nru   r   rA   r~  s     r&   bad1z test_odeint_errors.<locals>.bad1      1ur(   c                     dS NfoorA   r~  s     r&   bad2z test_odeint_errors.<locals>.bad2  s    ur(   c                     ddz  S r  rA   r~  s     r&   bad_jac1z$test_odeint_errors.<locals>.bad_jac1  r  r(   c                 
    dggS r  rA   r~  s     r&   bad_jac2z$test_odeint_errors.<locals>.bad_jac2   s    yr(   c                 .    d| d         z  d| d         z  gS )Nr}  r   皙r   rA   r~  s     r&   sys2dz!test_odeint_errors.<locals>.sys2d  s    QqT	4!9%%r(   c                     ddz  dgddggS )Nru   r   r  rA   r~  s     r&   sys2d_bad_jacz)test_odeint_errors.<locals>.sys2d_bad_jac  s    Q
QI&&r(   ru   r   r   r+   )rx   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   rA   r~  s     r&   badrhsz&test_odeint_bad_shapes.<locals>.badrhs  s    2wr(   c                     d| z  S r|  rA   r~  s     r&   sys1z$test_odeint_bad_shapes.<locals>.sys1  r  r(   c                     g dgS )N)r   r   r   rA   r~  s     r&   badjacz&test_odeint_bad_shapes.<locals>.badjac  s    		{r(   r   r   r   r   r   rK   r  )rx   r  r   ry   )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      пrA   r~  s     r&   rR  z$test_repeated_t_values.<locals>.func1  s    Qwr(   rK   ru   r   rb  r   r   	   r   rj  )rM   rL   r   r   g      ?g      ?)dtyper   )r   r   r   r   )r   r   r   )r   r   r[  r   N)r   r   r   r   rn  lenlogr   r   float64reshaperx   r  )rR  r#   rz   tauexpected_sols        r&   test_repeated_t_valuesr  .  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   r   r   r   rx   scipy.integrater   r   r   r   rC   rY   r   r   r   r   r   r   r   r   r9   r!   r*   r  r  r  r  r  r   r"  r>  rB  rD  rF  rI  rM  ry  r  r  r  rA   r(   r&   <module>r     s                                E E E E E E E E E E E E E E E E  * * * * * * 4 4 4 4 4 4 4 4 4 4 &  &  &  &  &  &  &  &F O  O  O  O  O  O  O  OFj+ j+ j+ j+ j+l j+ j+ j+Z&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;
  
    
    
    
  ?8 ?8 ?8 ?8 ?8 ?8 ?8 ?8D    "6   
    "6   
     4   
    !5   
    !5   
, , ,FH FH FHR& & &@M M M6G G G G Gr(   