
    bi`                     L   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 Z9y)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y)
TestOdeintc                 \   t        dj                  d      }t        j                  j                  |d      \  }}t        j                  ||             t        fdj                  |dd      \  }}t        j                  ||             t        d      rt        j                  j                  |j                  d      \  }}t        j                  ||             t        fd	j                  |fd
dd      \  }}t        j                  ||             y y )N        g?Tfull_outputc                 (    j                  ||       S Nftyproblems     _/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/integrate/tests/test_integrate.py<lambda>z(TestOdeint._do_problem.<locals>.<lambda>    s    '))Aq/     )r   tfirstjac)Dfunr   c                 (    j                  ||       S r   r   r!   s     r%   r&   z(TestOdeint._do_problem.<locals>.<lambda>+   s    gii1o r'   c                 (    j                  ||       S r   r)   r!   s     r%   r&   z(TestOdeint._do_problem.<locals>.<lambda>,   s    7;;q!3D r'   )r*   r   r(   )	r   stop_tr   r    z0r   verifyhasattrr)   )selfr$   r"   zinfodicts    `   r%   _do_problemzTestOdeint._do_problem   s    3- WYY

A4H8q!$% 97::q)-d<8q!$%7E" GJJ-13KAxGNN1a() !!=wzz1&D-1$@KAx GNN1a() #r'   c                 d    t         D ]'  } |       }|j                  r| j                  |       ) y r   PROBLEMScmplxr5   r2   problem_clsr$   s      r%   test_odeintzTestOdeint.test_odeint0   s0    # 	&K!mG}}W%		&r'   N)__name__
__module____qualname__r5   r<    r'   r%   r   r      s    *0&r'   r   c                       e Zd ZdZddZy)TestODEClassNc                    fd}d }t        d      rfd}i }j                  j                  j                  |d<   j                  |d<   | j                  ||      } |j                  |fj
                  dz  j                  dz  |d| |j                  j                  d	       |j                  j                        }t        ||j                         t        |j                         |f       t        |j                         d
kD  |f       t        j!                  t#        |g      j                        |f       y )Nc                 (    j                  ||       S r   r   r"   r3   r$   s     r%   r    z#TestODEClass._do_problem.<locals>.f?   s    99Q?"r'   r)   c                 (    j                  ||       S r   r-   rE   s     r%   r)   z%TestODEClass._do_problem.<locals>.jacC   s    {{1a((r'   ubandlband
   )atolrtolmethodr   )r"   r   )r1   rH   rG   	ode_classset_integratorrJ   rK   set_initial_valuer/   	integrater.   r   r#   r   
successfulget_return_coder0   r   )	r2   r$   
integratorrL   r    r)   integrator_paramsigr3   s	    `       r%   r5   zTestODEClass._do_problem<   s.   	#7E") ==$(A)0g&)0g&^^As#* 	/&||B&||B!'	/ .		/ 	WZZ3/LL(1bdd#'6!23""$q(7F*;<uaSz7>>:Wf<MNr'   )adams)r=   r>   r?   rM   r5   r@   r'   r%   rB   rB   8   s    IOr'   rB   c                   :    e Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zy)	TestOdec                     t         D ]H  } |       }|j                  r|j                  s| j                  |dd       | j                  |dd       J y NvoderV   bdf)r8   r9   stiffr5   r:   s      r%   	test_vodezTestOde.test_vode_   sM    # 	5K!mG}}==  &':Wfe4	5r'   c                     t         D ];  } |       }|j                  s| j                  |dd       | j                  |dd       = y )NzvoderV   r\   r8   r]   r5   r:   s      r%   
test_zvodezTestOde.test_zvodei   sC    # 	6K!mG==  '7;Wgu5		6r'   c                 f    t         D ](  } |       }|j                  r| j                  |d       * y Nlsodar7   r:   s      r%   
test_lsodazTestOde.test_lsodaq   s2    # 	/K!mG}}Wg.		/r'   c                     t         D ]B  } |       }|j                  r|j                  r$t        |d      r1| j	                  |d       D y Nr)   dopri5r8   r9   r]   r1   r5   r:   s      r%   test_dopri5zTestOde.test_dopri5y   I    # 	0K!mG}}}}w&Wh/	0r'   c                     t         D ]B  } |       }|j                  r|j                  r$t        |d      r1| j	                  |d       D y Nr)   dop853rj   r:   s      r%   test_dop853zTestOde.test_dop853   rl   r'   c                    dD ]  }d }t        |      j                  |      }|j                  dd       t        |      j                  |      }|j                  dd       |j                  |j                  dz          |j                  |j                  dz          |j                  |j                  dz          |j                         rJ  y )N)r[   r`   re   c                      yN      ?r@   r"   r#   s     r%   r    z'TestOde.test_concurrent_fail.<locals>.f   s    r'   r   皙?)r   rN   rO   rP   r"   rQ   )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                 R   d }t        d      D ]  }dD ]  }|dv r|dkD  rt        |      j                  |      }|j                  dd       t        |      j                  |      }|j                  dd       |j	                  |j
                  dz          |j	                  |j
                  dz          |j	                  |j
                  dz          t        |j                  d       t        |j                  d        d	D ]  }t        |      j                  |      }|j                  dd       t        |      j                  |      }|j                  dd       |j	                  |j
                  dz          |j	                  |j
                  dz          |j	                  |j
                  dz          |j	                  |j
                  dz          |j	                  |j
                  dz          t        |j                  d
       t        |j                  d          y )Nc                      yrs   r@   ru   s     r%   r    z%TestOde.test_concurrent_ok.<locals>.f   s    r'      )r[   r`   re   ri   ro   >   r[   re   r`      r   rv   g?ri   ro   g333333?)ranger   rN   rO   rP   r"   r   r#   )r2   num_parallel_threadsr    krw   rx   ry   s          r%   test_concurrent_okzTestOde.test_concurrent_ok   s   	 q 	+AE +449MPQ9QF))#.##Aq)V**3/$$Q*ACC#I&RTTCZ(RTTCZ(S)c*+  , +F))#.##Aq)V**3/$$Q*ACC#I&ACC#I&RTTCZ(ACC#I&RTTCZ(S)c*+#	+r'   N)r=   r>   r?   r   rM   r^   rb   rf   rk   rp   rz   r   r@   r'   r%   rX   rX   [   s*    I56/
0
0"*#+r'   rX   c                   (    e Zd ZeZd Zd Zd Zd Zy)TestComplexOdec                     t         D ]<  } |       }|j                  s| j                  |dd       *| j                  |dd       > y rZ   ra   r:   s      r%   r^   zTestComplexOde.test_vode   sC    # 	9K!mG==  &':  &%8	9r'   c                 L    t         D ]  } |       }| j                  |d        y rd   )r8   r5   r:   s      r%   rf   zTestComplexOde.test_lsoda   s*     $ 	/K!mGWg.	/r'   c                     t         D ]5  } |       }|j                  rt        |d      r$| j                  |d       7 y rh   r8   r]   r1   r5   r:   s      r%   rk   zTestComplexOde.test_dopri5   ?    # 	0K!mG}}w&Wh/	0r'   c                     t         D ]5  } |       }|j                  rt        |d      r$| j                  |d       7 y rn   r   r:   s      r%   rp   zTestComplexOde.test_dop853   r   r'   N)	r=   r>   r?   r   rM   r^   rf   rk   rp   r@   r'   r%   r   r      s    I9/00r'   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)
TestSoloutc                 F  	
 g 	g 
d}d}ddg}	
fd}d }t        |      j                  |      }|j                  |       |j                  ||       |j	                  |      }t        
d   |       t        
d   |       t        	d   |       t        	d   |       y )	Nr         $@rt          @c                 f    j                  |        j                  |j                                y r   appendcopyr"   r#   tsyss     r%   soloutz+TestSolout._run_solout_test.<locals>.solout        IIaLIIaffh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   rN   
set_soloutrO   rP   r   r   r2   rS   t0tendy0r   r   rU   retr   r   s            @@r%   _run_solout_testzTestSolout._run_solout_test   s    3Z	 	+ X$$Z0
f
R$ll4 2a5"%2b63'RUBRVT"r'   c                 4    dD ]  }| j                  |        y Nr   r   r2   rS   s     r%   test_soloutzTestSolout.test_solout      . 	.J!!*-	.r'   c                 F  	
 g 	g 
d}d}ddg}	
fd}d }t        |      j                  |      }|j                  ||       |j                  |       |j	                  |      }t        
d   |       t        
d   |       t        	d   |       t        	d   |       y )	Nr   r   rt   r   c                 f    j                  |        j                  |j                                y 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   rN   rO   r   rP   r   r   r   s            @@r%   _run_solout_after_initial_testz)TestSolout._run_solout_after_initial_test  s    3Z	 	+ X$$Z0
R$
fll4 2a5"%2b63'RUBRVT"r'   c                 4    dD ]  }| j                  |        y r   )r   r   s     r%   test_solout_after_initialz$TestSolout.test_solout_after_initial+  s    . 	<J//
;	<r'   c                 v  	
 g 	g 
d}dddg}	
fd}d }t        |      j                  |      }|j                  |       |j                  ||       |j	                        }t        
d   |       t        
d   |       t        	d   |       t        	d   dz  kD         t        	d   k         y )	Nr   r   rt   r   c                 x    j                  |        j                  |j                                | dz  kD  ryy Nr   r   r   r"   r#   r   r   r   s     r%   r   z1TestSolout._run_solout_break_test.<locals>.solout7  3    IIaLIIaffh48| 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   rN   r   rO   rP   r   r   r   r2   rS   r   r   r   r   rU   r   r   r   r   s           @@@r%   _run_solout_break_testz!TestSolout._run_solout_break_test/  s    3Z		+ X$$Z0
f
R$ll4 2a5"%2b63'RUB2c!"2r'   c                 4    dD ]  }| j                  |        y r   r   r   s     r%   test_solout_breakzTestSolout.test_solout_breakJ      . 	4J''
3	4r'   N)	r=   r>   r?   r   r   r   r   r   r   r@   r'   r%   r   r      s     #0.#0<64r'   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestComplexSoloutc                 D  	
 g 	g 
d}d}dg}	
fd}d }t        |      j                  |      }|j                  |       |j                  ||       |j	                  |      }t        
d   |       t        
d   |       t        	d   |       t        	d   |       y )Nr         4@c                 f    j                  |        j                  |j                                y 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   rN   r   rO   rP   r   r   r   s            @@r%   r   z"TestComplexSolout._run_solout_testQ  s    U	 	) ,,Z8
f
R$ll4 2a5"%2b63'RUBRVT"r'   c                 4    dD ]  }| j                  |        y r   r   r   s     r%   r   zTestComplexSolout.test_solouti  r   r'   c                 t  	
 g 	g 
d}ddg}	
fd}d }t        |      j                  |      }|j                  |       |j                  ||       |j	                        }t        
d   |       t        
d   |       t        	d   |       t        	d   dz  kD         t        	d   k         y )Nr   r   c                 x    j                  |        j                  |j                                | dz  kD  ryy 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   rN   r   rO   rP   r   r   r   r   s           @@@r%   r   z(TestComplexSolout._run_solout_break_testm  s    U		) ,,Z8
f
R$ll4 2a5"%2b63'RUB2c!"2r'   c                 4    dD ]  }| j                  |        y 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  s    #0.64r'   r   c                   0    e Zd ZdZdZdZdZg ZdZdZ	dZ
dZy)ODEz
    ODE problem
    Fr~   Ngư>gh㈵>)r=   r>   r?   __doc__r]   r9   r.   r/   rH   rG   rJ   rK   r@   r'   r%   r   r     s1     EEF	BEEDDr'   r   c                   >    e Zd ZdZdZ eddge      ZdZdZ	d Z
d Zy)	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	VVGdff$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~   rJ   rK   )	r   r   r   r/   r   r	   r   rJ   rK   )r2   zsr"   omegaus        r%   r0   zSimpleOscillator.verify  sr    TVVdff_%GGAJs57|#dggajU1W&=e&CC2ad8$))$))DDr'   N)r=   r>   r?   r   r.   r   r   r/   r   r   r    r0   r@   r'   r%   r   r     s3     F	Sz5	!BAAEr'   r   c                   D    e Zd ZdZdez  Z eg d      ZdZd Z	d Z
d Zy)	
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                 ~    | j                   t        d|z        z  }t        ||| j                  | j                        S )Nr   r   )r/   r   r   rJ   rK   r2   r   r"   r   s       r%   r0   zComplexExp.verify  s1    GGc"Q$i2DIIDII>>r'   N)r=   r>   r?   r   r   r.   r   r/   r9   r    r)   r0   r@   r'   r%   r   r     s-    *"WF	!	"BE?r'   r   c                   *    e Zd ZdZdZdgZdZd Zd Zy)Piz'Integrate 1/(t + 1j) from t=-10 to t=10   r   Tc                 ,    t        d|dz
  dz   z  g      S )Nrt   rI   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              rI   r   r   )nparctanr   rJ   rK   r   s       r%   r0   z	Pi.verify  s5    "))B-2b!e9499499EEr'   N)	r=   r>   r?   r   r.   r/   r9   r    r0   r@   r'   r%   r   r     s!    2F
BE)Fr'   r   c                   B    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y)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  su    yyxx$q'!A$q'!A$a15q'!A$a157 8 	8r'   c                      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                 4    |j                   | z   |z
  |f<   y r   )rG   )ricivaljr2   s      r%   set_jzCoupledDecay.jac.<locals>.set_j  s    *-Adjj2o"B&'r'   r   r   )r   r   r   rH   rG   )r2   r3   r"   r   r   r   s   `    @r%   r)   zCoupledDecay.jac  s     yyHHdjj4::-115S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      j                         }
t        |
|| j                  | j                        S )Nr~   r   r   r   )
r   r   r   r   vstackr/   	transposer   rJ   rK   )r2   r   r"   r   d10d21d20e0e1e2r   s              r%   r0   zCoupledDecay.verify  s   xx		"1gQ1gQ1gQVVT!WHqL!VVT!WHqL!VVT!WHqL!IIGGAJOGGAJOdggaj472S8BGDDGGAJOdggaj472S8BGDDGd1g
*S0WR 1s7b2g#66889 :
 ;D)+ 	
 2DIIDII>>r'   N)r=   r>   r?   r   r]   r.   r/   rH   rG   r   r    r)   r0   r@   r'   r%   r   r     s6    
 EF	BEED82?r'   r   c                     |d   |d    g}|S Nr~   r   r@   )r"   xdxdts      r%   r    r      s    aD1Q4%=DKr'   c                 (    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                 (    ||d   z  | |d   z  g}|S r  r@   r"   r  r   r  s       r%   f1r  )  s#    !A$Jqt$DKr'   c                 *    t        d|g| dgg      }|S Nr   r   r"   r  r   r   s       r%   jac1r  .  s%    U|} 	AHr'   c                 (    ||d   z  | |d   z  g}|S r  r@   )r"   r  omega1omega2r  s        r%   f2r  4  s#    1Q4K&1&DKr'   c                 *    t        d|g| dgg      }|S r  r   )r"   r  r  r  r   s        r%   jac2r  9  s%    V}~ 	 AHr'   c                 4    |d   |d   z  |d    |d   z  g}|S )Nr   r~   r@   r  s       r%   fvr  ?  s+    !HQqTME!H9QqT>*DKr'   c                 6    t        d|d   g|d    dgg      }|S )Nr   r   r~   r   r  s       r%   jacvr  D  s.    U1Xq	3! 	"AHr'   c                   B    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
d	 Zd
 Zy)ODECheckParameterUsez=Call an ode-class solver with several cases of parameter use. Fc                     t        ||      }| j                  r+|j                  | j                  dd| j                         |S |j                  | j                  dd       |S )Ng&.>gHz>)rJ   rK   with_jacobianr   )r   solver_uses_jacrN   solver_name)r2   r    r)   solvers       r%   _get_solverz ODECheckParameterUse._get_solverS  sh    Q!!$"2"2D040D0D " F  !!$"2"2D!Ir'   c                     ddg}|j                  |d       |j                  t               t        |j                  ddg       y )Nrt   r   r	  )rO   rP   r   r   r#   r2   r"  ics      r%   _check_solverz"ODECheckParameterUse._check_solver_  s;    3Z  S)!&((T3K8r'   c                 Z    | j                  t        t              }| j                  |       y r   )r#  r    r)   r'  )r2   r"  s     r%   test_no_paramsz#ODECheckParameterUse.test_no_paramse  s"    !!!S)6"r'   c                     | j                  t        t              }d}|j                  |       | j                  r|j                  |       | j                  |       y rs   )r#  r  r  set_f_paramsr   set_jac_paramsr'  r2   r"  r   s      r%   test_one_scalar_paramz*ODECheckParameterUse.test_one_scalar_parami  sL    !!"d+E"!!%(6"r'   c                     | j                  t        t              }d}d}|j                  ||       | j                  r|j                  ||       | j                  |       y rs   )r#  r  r  r+  r   r,  r'  )r2   r"  r  r  s       r%   test_two_scalar_paramsz+ODECheckParameterUse.test_two_scalar_paramsq  sU    !!"d+FF+!!&&16"r'   c                     | j                  t        t              }ddg}|j                  |       | j                  r|j                  |       | j                  |       y rs   )r#  r  r  r+  r   r,  r'  r-  s      r%   test_vector_paramz&ODECheckParameterUse.test_vector_paramz  sP    !!"d+c
E"!!%(6"r'   c                 $   | j                  t        t              }|j                  | j                  d       ddg}|j                  |d       t        j                  t              5  |j                  t               d d d        y # 1 sw Y   y xY w)Nr~   )nstepsrt   r   )r#  r    r)   rN   r!  rO   pytestwarnsUserWarningrP   r   r%  s      r%   test_warns_on_failurez*ODECheckParameterUse.test_warns_on_failure  su    !!!S)d..q93Z  S)\\+& 	!R 	! 	! 	!s   'BBN)r=   r>   r?   r   r!  r   r#  r'  r)  r.  r0  r2  r8  r@   r'   r%   r  r  J  s4    G
 KO
9####!r'   r  c                       e Zd ZdZdZy)TestDOPRI5CheckParameterUseri   FNr=   r>   r?   r!  r   r@   r'   r%   r:  r:        KOr'   r:  c                       e Zd ZdZdZy)TestDOP853CheckParameterUsero   FNr;  r@   r'   r%   r>  r>    r<  r'   r>  c                       e Zd ZdZdZy)TestVODECheckParameterUser[   TNr;  r@   r'   r%   r@  r@    s    KOr'   r@  c                       e Zd ZdZdZy)TestZVODECheckParameterUser`   TNr;  r@   r'   r%   rB  rB        KOr'   rB  c                       e Zd ZdZdZy)TestLSODACheckParameterUsere   TNr;  r@   r'   r%   rE  rE    rC  r'   rE  c                  v    d} dg}t        d | |d      \  }}t        |t        j                  | gg             y )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    s;     
B	
A_b!>GAtq"((RD6*+r'   c                  x   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 !       y )"Nc                 $    |j                  |       S r   )r   r#   r"   cs      r%   funcz)test_odeint_banded_jacobian.<locals>.func  s    uuQxr'   c                     |S r   r@   rL  s      r%   r)   z(test_odeint_banded_jacobian.<locals>.jac  s    r'   c                 :    |j                   j                  d      S NCr   Tr   rL  s      r%   jac_transposez2test_odeint_banded_jacobian.<locals>.jac_transpose  s    ssxxcx""r'   c           
      J   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  sy    iiq"''!Q-/0GGAJEE"''!R.!"34EE"''!R.!Q"679 : 
r'   c                 L     | ||      j                   j                  d      S rQ  rS  )r#   r"   rM  rZ  s      r%   	bjac_colsz.test_odeint_banded_jacobian.<locals>.bjac_cols  s&    Aq!##((s(33r'   )i3{Gz?r   r   )rv   g      g{Gz?r   )gMbP?r]  g       r]  )r   r   rv   r	     )r   r   rI   d   TgvIh%<=gdy=i'  )argsr   rJ   rK   mxstepr*   )r`  r   rJ   rK   ra  r*   	col_derivr   r~   )r`  r   rJ   rK   ra  r*   mlmu)	r`  r   rJ   rK   ra  r*   rc  rd  rb  zsol1 != sol2)err_msg-q=zsol1 != sol3)rJ   re  zsol3 != sol4njec                      || |      S r   r@   )r"   r#   rM  rN  s      r%   r&   z-test_odeint_banded_jacobian.<locals>.<lambda>  s    T!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   rJ   rK   ra  r*   r(   zsol1 != sol1ty)rK   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    s   #4 	&&'&( 	)A
 
B
!A r1A4T#%!#KD%
 r1A4T#%+t=KD%
 r1A4T#%'A!5KD%
 r1A4T#%'A!tEKD% D$7D$UNCD$7 uU|U5\2uU|U5\2 :B)-E$)">tMOFG D&u6FGr'   c                  8   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|       y )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                      yNfoor@   rz  s     r%   bad2z test_odeint_errors.<locals>.bad2  s    r'   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#VUC!QhO*feS1a&xH#VUS#JA$&r'   c                     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|
       y )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   rI   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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                        j                  d             t        t        t        | dgg d       t        t        t        | g dg d       y)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'   rI   rt   r~   r^  r   r   	   r}   rf  )rK   rJ   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  s3    	A
tQ
CsBGGSVQK01
BFF1I+C	
AaeQsUAcE**A
1vqu5
9C88c3ZLN!3Z"C["C[#T],, -L
 C& tR
 CsBHHRrzz:BB6JK *fdRD.A*fdI~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     si      7 7  * 4 4 &  &F O  OFn+l n+b&0\ &0RW4 W4t;4 ;4F  Es E2? ?"F F<?3 <?~ j"l;




?! ?!D"6 
"6 
 4 
!5 
!5 
,FHR&@M6Gr'   