
    tKgP_                     H   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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:y)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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     h/home/alanp/www/video.onchill/myenv/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1or(   c                 (    j                  ||       S r   r*   r"   s     r&   r'   z(TestOdeint._do_problem.<locals>.<lambda>+   s    7;;q!3Dr(   )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cmplxr6   r3   problem_clsr%   s      r&   test_odeintzTestOdeint.test_odeint/   s+    #K!mG}}W%	 $r(   N)__name__
__module____qualname__r6   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#   r4   r%   s     r&   r!   z#TestODEClass._do_problem.<locals>.f>   s    99Q?"r(   r*   c                 (    j                  ||       S r   r.   rF   s     r&   r*   z%TestODEClass._do_problem.<locals>.jacB   s    {{1a((r(   ubandlband
   )atolrtolmethodr   )r#   r   )r2   rI   rH   	ode_classset_integratorrK   rL   set_initial_valuer0   	integrater/   r   r$   r   
successfulget_return_coder1   r   )	r3   r%   
integratorrM   r!   r*   integrator_paramsigr4   s	    `       r&   r6   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@   rN   r6   rA   r(   r&   rC   rC   7   s    IOr(   rC   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voderW   bdf)r9   r:   stiffr6   r;   s      r&   	test_vodezTestOde.test_vode^   sH    #K!mG}}==  &':Wfe4 $r(   c                     t         D ];  } |       }|j                  s| j                  |dd       | j                  |dd       = y )NzvoderW   r]   r9   r^   r6   r;   s      r&   
test_zvodezTestOde.test_zvodeh   s>    #K!mG==  '7;Wgu5	 $r(   c                 f    t         D ](  } |       }|j                  r| j                  |d       * y Nlsodar8   r;   s      r&   
test_lsodazTestOde.test_lsodap   s-    #K!mG}}Wg.	 $r(   c                     t         D ]B  } |       }|j                  r|j                  r$t        |d      r1| j	                  |d       D y Nr*   dopri5r9   r:   r^   r2   r6   r;   s      r&   test_dopri5zTestOde.test_dopri5x   D    #K!mG}}}}w&Wh/ $r(   c                     t         D ]B  } |       }|j                  r|j                  r$t        |d      r1| j	                  |d       D y Nr*   dop853rk   r;   s      r&   test_dop853zTestOde.test_dop853   rm   r(   c                    dD ]  }d }t        |      j                  |      }|j                  dd       t        |      j                  |      }|j                  dd       |j                  |j                  dz          |j                  |j                  dz          t        t        |j                  |j                  dz           y )N)r\   ra   rf   c                      yN      ?rA   r#   r$   s     r&   r!   z'TestOde.test_concurrent_fail.<locals>.f   s    r(   r   皙?)r   rO   rP   rQ   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$,QSS3Y? .r(   c                 >   d }t        d      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          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rt   rA   rv   s     r&   r!   z%TestOde.test_concurrent_ok.<locals>.f   s    r(      )r\   ra   rf   rj   rp   r   rw   g?rj   rp   g333333?)ranger   rO   rP   rQ   r#   r   r$   )r3   r!   krz   r{   r|   s         r&   test_concurrent_okzTestOde.test_concurrent_ok   s   	 qAEF))#.##Aq)V**3/$$Q*ACC#I&RTTCZ(RTTCZ(S)c* F ,F))#.##Aq)V**3/$$Q*ACC#I&ACC#I&RTTCZ(ACC#I&RTTCZ(S)c* , r(   N)r>   r?   r@   r   rN   r_   rc   rg   rl   rq   r}   r   rA   r(   r&   rY   rY   Z   s+    I56/
0
0@ !+r(   rY   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 r[   rb   r;   s      r&   r_   zTestComplexOde.test_vode   s>    #K!mG==  &':  &%8 $r(   c                 L    t         D ]  } |       }| j                  |d        y re   )r9   r6   r;   s      r&   rg   zTestComplexOde.test_lsoda   s#    #K!mGWg. $r(   c                     t         D ]5  } |       }|j                  rt        |d      r$| j                  |d       7 y ri   r9   r^   r2   r6   r;   s      r&   rl   zTestComplexOde.test_dopri5   :    #K!mG}}w&Wh/ $r(   c                     t         D ]5  } |       }|j                  rt        |d      r$| j                  |d       7 y ro   r   r;   s      r&   rq   zTestComplexOde.test_dop853   r   r(   N)	r>   r?   r@   r   rN   r_   rg   rl   rq   rA   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         $@ru          @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         rA   rv   s     r&   rhsz(TestSolout._run_solout_test.<locals>.rhs   #    aD1Q4K!A$'**r(   r   )r   rO   
set_soloutrP   rQ   r   r   r3   rT   t0tendy0r   r   rV   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   r3   rT   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   ru   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   rA   rv   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	 	+ 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   ru   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>.solout.  3    IIaLIIaffh48| r(   c                 *    |d   |d   z   |d   dz   gS r   rA   rv   s     r&   r   z.TestSolout._run_solout_break_test.<locals>.rhs4  r   r(   r   r   )r   rO   r   rP   rQ   r   r   r   r3   rT   r   r   r   r   rV   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_breakA      .J''
3 /r(   N)	r>   r?   r@   r   r   r   r   r   r   rA   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>.soloutP  r   r(   c                     d| dz
  dz
  z  gS Nru   r                 ?rA   rv   s     r&   r   z/TestComplexSolout._run_solout_test.<locals>.rhsT      TB'((r(   r   r   )r   rO   r   rP   rQ   r   r   r   s            @@r&   r   z"TestComplexSolout._run_solout_testH  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_solout`  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>.soloutl  r   r(   c                     d| dz
  dz
  z  gS r   rA   rv   s     r&   r   z5TestComplexSolout._run_solout_break_test.<locals>.rhsr  r   r(   r   r   r   )r   rO   r   rP   rQ   r   r   r   r   s           @@@r&   r   z(TestComplexSolout._run_solout_break_testd  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   rA   r(   r&   r   r   F  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^   r:   r/   r0   rI   rH   rK   rL   rA   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?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	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   rK   rL   )	r   r   r   r0   r   r	   r   rK   rL   )r3   zsr#   omegaus        r&   r1   zSimpleOscillator.verify  sr    TVVdff_%GGAJs57|#dggajU1W&=e&CC2ad8$))$))DDr(   N)r>   r?   r@   r   r/   r   r   r0   r   r   r!   r1   rA   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   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                 ~    | j                   t        d|z        z  }t        ||| j                  | j                        S )Nr   r   )r0   r   r   rK   rL   r3   r   r#   r   s       r&   r1   zComplexExp.verify  s1    GGc"Q$i2DIIDII>>r(   N)r>   r?   r@   r   r   r/   r   r0   r:   r!   r*   r1   rA   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 )Nru   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&   r1   z	Pi.verify  s5    "))B-2b!e9499499EEr(   N)	r>   r?   r@   r   r/   r0   r:   r!   r1   rA   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   )r3   r4   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   )rH   )ricivaljr3   s      r&   set_jzCoupledDecay.jac.<locals>.set_j  s    *-Adjj2o"B&'r(   r   r   )r   r   r   rI   rH   )r3   r4   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   vstackr0   	transposer   rK   rL   )r3   r   r#   r   d10d21d20e0e1e2r   s              r&   r1   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/   r0   rI   rH   r   r!   r*   r1   rA   r(   r&   r   r     s6    
 EF	BEED82?r(   r   c                     |d   |d    g}|S Nr   r   rA   )r#   xdxdts      r&   r!   r!     s    aD1Q4%=DKr(   c                 (    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                 (    ||d   z  | |d   z  g}|S r  rA   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  rA   )r#   r  omega1omega2r	  s        r&   f2r  +  s#    1Q4K&1&DKr(   c                 *    t        d|g| dgg      }|S r  r   )r#   r  r  r  r   s        r&   jac2r  0  s%    V}~ 	 AHr(   c                 4    |d   |d   z  |d    |d   z  g}|S )Nr   r   rA   r  s       r&   fvr  6  s+    !HQqTME!H9QqT>*DKr(   c                 6    t        d|d   g|d    dgg      }|S )Nr   r   r   r   r  s       r&   jacvr  ;  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>)rK   rL   with_jacobianr   )r   solver_uses_jacrO   solver_name)r3   r!   r*   solvers       r&   _get_solverz ODECheckParameterUse._get_solverJ  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 )Nru   r   r  )rP   rQ   r   r   r$   r3   r$  ics      r&   _check_solverz"ODECheckParameterUse._check_solverV  s;    3Z  S)!&((T3K8r(   c                 Z    | j                  t        t              }| j                  |       y r   )r%  r!   r*   r)  )r3   r$  s     r&   test_no_paramsz#ODECheckParameterUse.test_no_params\  s"    !!!S)6"r(   c                     | j                  t        t              }d}|j                  |       | j                  r|j                  |       | j                  |       y rt   )r%  r  r  set_f_paramsr"  set_jac_paramsr)  r3   r$  r   s      r&   test_one_scalar_paramz*ODECheckParameterUse.test_one_scalar_param`  sL    !!"d+E"!!%(6"r(   c                     | j                  t        t              }d}d}|j                  ||       | j                  r|j                  ||       | j                  |       y rt   )r%  r  r  r-  r"  r.  r)  )r3   r$  r  r  s       r&   test_two_scalar_paramsz+ODECheckParameterUse.test_two_scalar_paramsh  sU    !!"d+FF+!!&&16"r(   c                     | j                  t        t              }ddg}|j                  |       | j                  r|j                  |       | j                  |       y rt   )r%  r  r  r-  r"  r.  r)  r/  s      r&   test_vector_paramz&ODECheckParameterUse.test_vector_paramq  sP    !!"d+c
E"!!%(6"r(   c                     | j                  t        t              }|j                  | j                  d       ddg}|j                  |d       t        t        |j                  t               y )Nr   )nstepsru   r   )
r%  r!   r*   rO   r#  rP   r   UserWarningrQ   r   r'  s      r&   test_warns_on_failurez*ODECheckParameterUse.test_warns_on_failurey  sX    !!!S)d..q93Z  S)[&"2"2B7r(   N)r>   r?   r@   r   r#  r"  r%  r)  r+  r0  r2  r4  r8  rA   r(   r&   r  r  A  s4    G
 KO
9####8r(   r  c                       e Zd ZdZdZy)TestDOPRI5CheckParameterUserj   FNr>   r?   r@   r#  r"  rA   r(   r&   r:  r:        KOr(   r:  c                       e Zd ZdZdZy)TestDOP853CheckParameterUserp   FNr;  rA   r(   r&   r>  r>    r<  r(   r>  c                       e Zd ZdZdZy)TestVODECheckParameterUser\   TNr;  rA   r(   r&   r@  r@    s    KOr(   r@  c                       e Zd ZdZdZy)TestZVODECheckParameterUsera   TNr;  rA   r(   r&   rB  rB        KOr(   rB  c                       e Zd ZdZdZy)TestLSODACheckParameterUserf   TNr;  rA   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   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_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   rA   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   )rw   g      g{Gz?r   )gMbP?r]  g       r]  )r   r   rw   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   rA   )r#   r$   rM  rN  s      r&   r'   z-test_odeint_banded_jacobian.<locals>.<lambda>  s    T!Q]r(   c                      || |      S r   rA   )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    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 NrA   r  r#   s     r&   sys1dz!test_odeint_errors.<locals>.sys1d      Avr(   c                     ddz  S Nru   r   rA   rz  s     r&   bad1z test_odeint_errors.<locals>.bad1      1ur(   c                      yNfoorA   rz  s     r&   bad2z test_odeint_errors.<locals>.bad2  s    r(   c                     ddz  S r~  rA   rz  s     r&   bad_jac1z$test_odeint_errors.<locals>.bad_jac1  r  r(   c                 
    dggS r  rA   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   rA   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 )Nru   r   r  rA   rz  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#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   rA   rz  s     r&   badrhsz&test_odeint_bad_shapes.<locals>.badrhs  s    2wr(   c                     d| z  S rx  rA   rz  s     r&   sys1z$test_odeint_bad_shapes.<locals>.sys1  r|  r(   c                     g dgS )N)r   r   r   rA   rz  s     r&   badjacz&test_odeint_bad_shapes.<locals>.badjac  s
    {r(   r   r   r   r   r   rJ   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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      пrA   rz  s     r&   rN  z$test_repeated_t_values.<locals>.func+  s    Qwr(   rJ   ru   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reshaperx   r  )rN  r#   rz   tauexpected_sols        r&   test_repeated_t_valuesr  (  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   r   pytestr   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:  r>  r@  rB  rE  rI  ru  r  r  r  rA   r(   r&   <module>r     sh      E E + 4 4 &  &F O  OFg+l g+T%0\ %0PW4 W4t;4 ;4F  Es E2? ?"F F<?3 <?~ j"l;




>8 >8B"6 
"6 
 4 
!5 
!5 
,FHR&@M6Gr(   