a
    ‡ù»j’b  ã                   @   sü  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„ dƒZG d	d
„ d
ƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZ G dd„ dƒZ!G dd„ dƒZ"G dd„ de"ƒZ#G dd„ de"ƒZ$G dd„ de"ƒZ%G dd„ de"ƒZ&e#e$e%e&gZ'dd„ Z(dd „ Z)d!d"„ Z*d#d$„ Z+d%d&„ Z,d'd(„ Z-d)d*„ Z.d+d,„ Z/G d-d.„ d.ƒZ0G d/d0„ d0e0ƒZ1G d1d2„ d2e0ƒZ2G d3d4„ d4e0ƒZ3G d5d6„ d6e0ƒZ4G d7d8„ d8e0ƒZ5d9d:„ Z6d;d<„ Z7d=d>„ Z8d?d@„ Z9dAdB„ Z:dS )Cz"
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                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
TestOdeintc                    sÚ   t dˆ jdƒ}tˆ jˆ j|dd�\}}tˆ  ||¡ƒ t‡ fdd„ˆ j|ddd�\}}tˆ  ||¡ƒ tˆ dƒrÖtˆ jˆ j|ˆ jdd	�\}}tˆ  ||¡ƒ t‡ fd
d„ˆ j|‡ fdd„ddd�\}}tˆ  ||¡ƒ d S )Nç        gš™™™™™©?T©Úfull_outputc                    s   ˆ   || ¡S ©N©Úf©ÚtÚy©Úproblem© úJE:\soccer\ml_env\Lib\site-packages\scipy/integrate/tests/test_integrate.pyÚ<lambda>   ó    z(TestOdeint._do_problem.<locals>.<lambda>)r   ÚtfirstÚjac)ÚDfunr   c                    s   ˆ   || ¡S r   r   r   r!   r#   r$   r%   *   r&   c                    s   ˆ   || ¡S r   ©r(   r   r!   r#   r$   r%   +   r&   )r)   r   r'   )	r   Ústop_tr   r   Úz0r   ÚverifyÚhasattrr(   )Úselfr"   r   ÚzZinfodictr#   r!   r$   Ú_do_problem   s"    ÿ

ÿ

þ
zTestOdeint._do_problemc                 C   s&   t D ]}|ƒ }|jrq|  |¡ qd S r   ©ÚPROBLEMSÚcmplxr1   ©r/   Zproblem_clsr"   r#   r#   r$   Útest_odeint/   s
    zTestOdeint.test_odeintN)Ú__name__Ú
__module__Ú__qualname__r1   r6   r#   r#   r#   r$   r      s   r   c                   @   s   e Zd ZdZddd„ZdS )ÚTestODEClassNÚadamsc           	         sö   ‡ fdd„}d }t ˆ dƒr&‡ fdd„}i }ˆ jd us>ˆ jd urRˆ j|d< ˆ j|d< |  ||¡}|j|fˆ jd ˆ jd |d	œ|¤Ž |jˆ jd
d� | 	ˆ j
¡}t||jƒ t| ¡ ˆ |fƒ t| ¡ dkˆ |fƒ tˆ  t|gƒˆ j
¡ˆ |fƒ d S )Nc                    s   ˆ   || ¡S r   r   ©r   r0   r!   r#   r$   r   >   s    z#TestODEClass._do_problem.<locals>.fr(   c                    s   ˆ   || ¡S r   r*   r<   r!   r#   r$   r(   B   s    z%TestODEClass._do_problem.<locals>.jacÚubandÚlbandé
   )ÚatolÚrtolÚmethodr   )r   r   )r.   r>   r=   Ú	ode_classÚset_integratorr@   rA   Úset_initial_valuer,   Ú	integrater+   r   r    r   Z
successfulZget_return_coder-   r   )	r/   r"   Ú
integratorrB   r   r(   Zintegrator_paramsÚigr0   r#   r!   r$   r1   ;   s,    


ýüzTestODEClass._do_problem)r;   )r7   r8   r9   rC   r1   r#   r#   r#   r$   r:   7   s   r:   c                   @   sH   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ ZdS )ÚTestOdec                 C   s>   t D ]4}|ƒ }|jrq|js*|  |dd¡ |  |dd¡ qd S ©NÚvoder;   Úbdf)r3   r4   Ústiffr1   r5   r#   r#   r$   Ú	test_vode^   s    zTestOde.test_vodec                 C   s6   t D ],}|ƒ }|js"|  |dd¡ |  |dd¡ qd S )NÚzvoder;   rL   ©r3   rM   r1   r5   r#   r#   r$   Ú
test_zvodeh   s
    zTestOde.test_zvodec                 C   s(   t D ]}|ƒ }|jrq|  |d¡ qd S ©NÚlsodar2   r5   r#   r#   r$   Ú
test_lsodap   s
    zTestOde.test_lsodac                 C   s<   t D ]2}|ƒ }|jrq|jrqt|dƒr*q|  |d¡ qd S ©Nr(   Údopri5©r3   r4   rM   r.   r1   r5   r#   r#   r$   Útest_dopri5x   s    
zTestOde.test_dopri5c                 C   s<   t D ]2}|ƒ }|jrq|jrqt|dƒr*q|  |d¡ qd S ©Nr(   Údop853rW   r5   r#   r#   r$   Útest_dop853„   s    
zTestOde.test_dop853c                 C   s~   dD ]t}dd„ }t |ƒ |¡}| dd¡ t |ƒ |¡}| dd¡ | |jd ¡ | |jd ¡ tt|j|jd ƒ qd S )N)rK   rO   rS   c                 S   s   dS ©Nç      ð?r#   r   r#   r#   r$   r   ’   s    z'TestOde.test_concurrent_fail.<locals>.fr   çš™™™™™¹?)r   rD   rE   rF   r   Úassert_raisesÚRuntimeError)r/   Úsolr   ÚrÚr2r#   r#   r$   Útest_concurrent_fail�   s    zTestOde.test_concurrent_failc                 C   sH  dd„ }t dƒD �]0}dD ]€}t|ƒ |¡}| dd¡ t|ƒ |¡}| dd¡ | |jd ¡ | |jd ¡ | |jd ¡ t|jdƒ t|jdƒ qdD ] }t|ƒ |¡}| dd¡ t|ƒ |¡}| dd¡ | |jd ¡ | |jd ¡ | |jd ¡ | |jd ¡ | |jd ¡ t|jd	ƒ t|jdƒ q qd S )
Nc                 S   s   dS r\   r#   r   r#   r#   r$   r   ¡   s    z%TestOde.test_concurrent_ok.<locals>.fé   )rK   rO   rS   rV   rZ   r   r^   gš™™™™™É?©rV   rZ   g333333Ó?)Úranger   rD   rE   rF   r   r   r    )r/   r   Úkra   rb   rc   r#   r#   r$   Útest_concurrent_ok    s0    zTestOde.test_concurrent_okN)r7   r8   r9   r   rC   rN   rQ   rT   rX   r[   rd   ri   r#   r#   r#   r$   rI   Z   s   
rI   c                   @   s0   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestComplexOdec                 C   s8   t D ].}|ƒ }|js$|  |dd¡ q|  |dd¡ qd S rJ   rP   r5   r#   r#   r$   rN   È   s
    zTestComplexOde.test_vodec                 C   s    t D ]}|ƒ }|  |d¡ qd S rR   )r3   r1   r5   r#   r#   r$   rT   Ñ   s    zTestComplexOde.test_lsodac                 C   s4   t D ]*}|ƒ }|jrqt|dƒr"q|  |d¡ qd S rU   ©r3   rM   r.   r1   r5   r#   r#   r$   rX   ×   s    
zTestComplexOde.test_dopri5c                 C   s4   t D ]*}|ƒ }|jrqt|dƒr"q|  |d¡ qd S rY   rk   r5   r#   r#   r$   r[   á   s    
zTestComplexOde.test_dop853N)	r7   r8   r9   r   rC   rN   rT   rX   r[   r#   r#   r#   r$   rj   Ä   s
   	
rj   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú
TestSoloutc           	         s˜   g ‰ g ‰d}d}ddg}‡ ‡fdd„}dd„ }t |ƒ |¡}| |¡ | ||¡ | |¡}tˆd	 |ƒ tˆd
 |ƒ tˆ d	 |ƒ tˆ d
 |ƒ d S )Nr   ç      $@r]   ç       @c                    s   ˆ   | ¡ ˆ  | ¡ ¡ d S r   ©ÚappendÚcopyr   ©ÚtsÚysr#   r$   Úsoloutö   s    
z+TestSolout._run_solout_test.<locals>.soloutc                 S   s   |d |d  |d d  gS ©Nr   é   é   r#   r   r#   r#   r$   Úrhsú   s    z(TestSolout._run_solout_test.<locals>.rhsr   éÿÿÿÿ)r   rD   Ú
set_soloutrE   rF   r   r   ©	r/   rG   Út0ÚtendÚy0ru   ry   rH   Úretr#   rr   r$   Ú_run_solout_testî   s    

zTestSolout._run_solout_testc                 C   s   dD ]}|   |¡ qd S ©Nrf   ©r�   ©r/   rG   r#   r#   r$   Útest_solout  s    zTestSolout.test_soloutc           	         s˜   g ‰ g ‰d}d}ddg}‡ ‡fdd„}dd„ }t |ƒ |¡}| ||¡ | |¡ | |¡}tˆd	 |ƒ tˆd
 |ƒ tˆ d	 |ƒ tˆ d
 |ƒ d S )Nr   rm   r]   rn   c                    s   ˆ   | ¡ ˆ  | ¡ ¡ d S r   ro   r   rr   r#   r$   ru     s    
z9TestSolout._run_solout_after_initial_test.<locals>.soloutc                 S   s   |d |d  |d d  gS rv   r#   r   r#   r#   r$   ry     s    z6TestSolout._run_solout_after_initial_test.<locals>.rhsr   rz   )r   rD   rE   r{   rF   r   r   r|   r#   rr   r$   Ú_run_solout_after_initial_test
  s    

z)TestSolout._run_solout_after_initial_testc                 C   s   dD ]}|   |¡ qd S r‚   )r†   r„   r#   r#   r$   Útest_solout_after_initial"  s    z$TestSolout.test_solout_after_initialc                    s°   g ‰g ‰d}d‰ ddg}‡ ‡‡fdd„}dd„ }t |ƒ |¡}| |¡ | ||¡ | ˆ ¡}tˆd	 |ƒ tˆd
 |ƒ tˆd	 |ƒ tˆd
 ˆ d kƒ tˆd
 ˆ k ƒ d S )Nr   rm   r]   rn   c                    s,   ˆ  | ¡ ˆ  | ¡ ¡ | ˆ d kr(dS d S ©Nrn   rz   ro   r   ©r~   rs   rt   r#   r$   ru   .  s    
z1TestSolout._run_solout_break_test.<locals>.soloutc                 S   s   |d |d  |d d  gS rv   r#   r   r#   r#   r$   ry   4  s    z.TestSolout._run_solout_break_test.<locals>.rhsr   rz   )r   rD   r{   rE   rF   r   r   r   ©r/   rG   r}   r   ru   ry   rH   r€   r#   r‰   r$   Ú_run_solout_break_test&  s     

z!TestSolout._run_solout_break_testc                 C   s   dD ]}|   |¡ qd S r‚   ©r‹   r„   r#   r#   r$   Útest_solout_breakA  s    zTestSolout.test_solout_breakN)	r7   r8   r9   r�   r…   r†   r‡   r‹   r�   r#   r#   r#   r$   rl   ì   s   rl   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestComplexSoloutc           	         s–   g ‰ g ‰d}d}dg}‡ ‡fdd„}dd„ }t |ƒ |¡}| |¡ | ||¡ | |¡}tˆd |ƒ tˆd |ƒ tˆ d |ƒ tˆ d |ƒ d S )	Nr   ç      4@c                    s   ˆ   | ¡ ˆ  | ¡ ¡ d S r   ro   r   rr   r#   r$   ru   P  s    
z2TestComplexSolout._run_solout_test.<locals>.soloutc                 S   s   d| d d  gS ©Nr]   rm   ù              ð?r#   r   r#   r#   r$   ry   T  s    z/TestComplexSolout._run_solout_test.<locals>.rhsr   rz   )r   rD   r{   rE   rF   r   r   r|   r#   rr   r$   r�   H  s    

z"TestComplexSolout._run_solout_testc                 C   s   dD ]}|   |¡ qd S r‚   rƒ   r„   r#   r#   r$   r…   `  s    zTestComplexSolout.test_soloutc                    s®   g ‰g ‰d}d‰ dg}‡ ‡‡fdd„}dd„ }t |ƒ |¡}| |¡ | ||¡ | ˆ ¡}tˆd |ƒ tˆd |ƒ tˆd |ƒ tˆd ˆ d	 kƒ tˆd ˆ k ƒ d S )
Nr   r�   c                    s,   ˆ  | ¡ ˆ  | ¡ ¡ | ˆ d kr(dS d S rˆ   ro   r   r‰   r#   r$   ru   l  s    
z8TestComplexSolout._run_solout_break_test.<locals>.soloutc                 S   s   d| d d  gS r�   r#   r   r#   r#   r$   ry   r  s    z5TestComplexSolout._run_solout_break_test.<locals>.rhsr   rz   rn   )r   rD   r{   rE   rF   r   r   r   rŠ   r#   r‰   r$   r‹   d  s     

z(TestComplexSolout._run_solout_break_testc                 C   s   dD ]}|   |¡ qd S r‚   rŒ   r„   r#   r#   r$   r�     s    z#TestComplexSolout.test_solout_breakN)r7   r8   r9   r�   r…   r‹   r�   r#   r#   r#   r$   rŽ   F  s   rŽ   c                   @   s0   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
    Frw   Ng�íµ ÷Æ°>gñhãˆµøä>)r7   r8   r9   Ú__doc__rM   r4   r+   r,   r>   r=   r@   rA   r#   r#   r#   r$   r’   ‰  s   r’   c                   @   s:   e Zd ZdZdZeddgeƒZdZdZ	dd„ Z
d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ñ?r]   r^   g      @c                 C   s.   t dtƒ}d|d< | j | j |d< t||ƒS )N)rx   rx   r]   ©r   rw   )rw   r   )r   Úfloatrh   Úmr   )r/   r0   r   Útmpr#   r#   r$   r   ¦  s    
zSimpleOscillator.fc                 C   s`   t | j| j ƒ}| jd t|| ƒ | jd t|| ƒ |  }t||d d …df | j| jd�S )Nr   rw   ©r@   rA   )	r   rh   r—   r,   r   r   r   r@   rA   )r/   Úzsr   ÚomegaÚur#   r#   r$   r-   ¬  s    0zSimpleOscillator.verifyN)r7   r8   r9   r“   r+   r   r–   r,   rh   r—   r   r-   r#   r#   r#   r$   r”   ™  s   r”   c                   @   s@   e Zd ZdZde Zeg d¢ƒZdZdd„ Z	dd„ Z
d	d
„ ZdS )Ú
ComplexExpzThe equation :lm:`\dot u = i u`g®Gáz®ó?)r‘   y               @y              @y              @y              @Tc                 C   s   d| S )Nr‘   r#   ©r/   r0   r   r#   r#   r$   r   ¸  s    zComplexExp.fc                 C   s   dt dƒ S )Nr‘   é   )r	   rž   r#   r#   r$   r(   »  s    zComplexExp.jacc                 C   s&   | j td| ƒ }t||| j| jd�S )Nr‘   r™   )r,   r   r   r@   rA   ©r/   rš   r   rœ   r#   r#   r$   r-   ¾  s    zComplexExp.verifyN)r7   r8   r9   r“   r
   r+   r   r,   r4   r   r(   r-   r#   r#   r#   r$   r�   ²  s   r�   c                   @   s.   e Zd ZdZdZdgZdZdd„ Zdd„ Zd	S )
ÚPiz'Integrate 1/(t + 1j) from t=-10 to t=10é   r   Tc                 C   s   t d|d d  gƒS )Nr]   r?   r‘   ©r   rž   r#   r#   r$   r   É  s    zPi.fc                 C   s.   dt  d¡ }t||dd d …f | j| jd�S )Ny       €       Àr?   rz   r™   )ÚnpZarctanr   r@   rA   r    r#   r#   r$   r-   Ì  s    z	Pi.verifyN)	r7   r8   r9   r“   r+   r,   r4   r   r-   r#   r#   r#   r$   r¡   Ã  s   r¡   c                   @   sH   e Zd ZdZdZdZg d¢ZdZdZg d¢Z	dd	„ Z
d
d„ Zdd„ ZdS )ÚCoupledDecayze
    3 coupled decays suited for banded treatment
    (banded mode makes it necessary when N>>3)
    Tç      à?)g      @g      @g      *@rw   r   )gÃõ(\�ÂÅ?gq=
×£pÍ?g�Âõ(\�Ò?c                 C   s`   | j }t |d  |d  |d  |d  |d |d   |d  |d  |d |d   g¡S rv   )Úlmbdr¤   r   )r/   r0   r   r§   r#   r#   r$   r   ß  s
      þzCoupledDecay.fc                    sŒ   ˆj }tjˆjˆj d dfdd�‰ ‡ ‡fdd„}|dd|d  ƒ |dd|d ƒ |dd|d  ƒ |dd|d ƒ |dd|d  ƒ ˆ S )	Nrw   re   ÚF©Úorderc                    s   |ˆ ˆj |  | |f< d S r   )r=   )ÚriÚciÚval©Újr/   r#   r$   Úset_jõ  s    zCoupledDecay.jac.<locals>.set_jr   rx   )r§   r¤   r   r>   r=   )r/   r0   r   r§   r°   r#   r®   r$   r(   å  s    zCoupledDecay.jacc              
   C   s8  t  | j¡}|d |d  }|d |d  }|d |d  }t  |d  | ¡}t  |d  | ¡}t  |d  | ¡}	t  | jd | | jd | | jd |d  | ||   | jd |	 | jd |d  | ||	   |d |d  | jd  | d| ||	  d| ||	     f¡ ¡ }
t|
|| j| j	d�S )Nrw   r   rx   r™   )
r¤   r   r§   r   Úvstackr,   Z	transposer   r@   rA   )r/   rš   r   r§   Zd10Zd21Zd20Ze0Úe1Úe2rœ   r#   r#   r$   r-   þ  s"    **ÿÿý
zCoupledDecay.verifyN)r7   r8   r9   r“   rM   r+   r,   r>   r=   r§   r   r(   r-   r#   r#   r#   r$   r¥   Ñ  s   r¥   c                 C   s   |d |d  g}|S ©Nrw   r   r#   )r   ÚxÚdxdtr#   r#   r$   r     s    r   c                 C   s   t ddgddggƒ}|S )Nr   r]   ç      ð¿r£   )r   rµ   r¯   r#   r#   r$   r(     s    ÿr(   c                 C   s   ||d  | |d  g}|S r´   r#   ©r   rµ   r›   r¶   r#   r#   r$   Úf1   s    r¹   c                 C   s   t d|g| dggƒ}|S ©Nr   r£   ©r   rµ   r›   r¯   r#   r#   r$   Újac1%  s    ÿr¼   c                 C   s   ||d  | |d  g}|S r´   r#   )r   rµ   Úomega1Úomega2r¶   r#   r#   r$   Úf2+  s    r¿   c                 C   s   t d|g| dggƒ}|S rº   r£   )r   rµ   r½   r¾   r¯   r#   r#   r$   Újac20  s    ÿrÀ   c                 C   s&   |d |d  |d  |d  g}|S )Nr   rw   r#   r¸   r#   r#   r$   Úfv6  s    "rÁ   c                 C   s"   t d|d g|d  dggƒ}|S )Nr   r   rw   r£   r»   r#   r#   r$   Újacv;  s    ÿrÂ   c                   @   sP   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚODECheckParameterUsez=Call an ode-class solver with several cases of parameter use.Ú Fc                 C   s>   t ||ƒ}| jr(|j| jdd| jd� n|j| jddd� |S )Ng•Ö&è.>gH¯¼šò×z>)r@   rA   Zwith_jacobianr™   )r   Úsolver_uses_jacrD   Úsolver_name)r/   r   r(   Úsolverr#   r#   r$   Ú_get_solverJ  s    
ÿz ODECheckParameterUse._get_solverc                 C   s2   ddg}|  |d¡ | t¡ t|jddgƒ d S )Nr]   r   r·   )rE   rF   r
   r   r    ©r/   rÇ   Zicr#   r#   r$   Ú_check_solverV  s    
z"ODECheckParameterUse._check_solverc                 C   s   |   tt¡}|  |¡ d S r   )rÈ   r   r(   rÊ   )r/   rÇ   r#   r#   r$   Útest_no_params\  s    z#ODECheckParameterUse.test_no_paramsc                 C   s8   |   tt¡}d}| |¡ | jr*| |¡ |  |¡ d S r\   )rÈ   r¹   r¼   Úset_f_paramsrÅ   Úset_jac_paramsrÊ   ©r/   rÇ   r›   r#   r#   r$   Útest_one_scalar_param`  s    

z*ODECheckParameterUse.test_one_scalar_paramc                 C   s@   |   tt¡}d}d}| ||¡ | jr2| ||¡ |  |¡ d S r\   )rÈ   r¿   rÀ   rÌ   rÅ   rÍ   rÊ   )r/   rÇ   r½   r¾   r#   r#   r$   Útest_two_scalar_paramsh  s    z+ODECheckParameterUse.test_two_scalar_paramsc                 C   s<   |   tt¡}ddg}| |¡ | jr.| |¡ |  |¡ d S r\   )rÈ   rÁ   rÂ   rÌ   rÅ   rÍ   rÊ   rÎ   r#   r#   r$   Útest_vector_paramq  s    

z&ODECheckParameterUse.test_vector_paramc                 C   sB   |   tt¡}|j| jdd� ddg}| |d¡ tt|jt	ƒ d S )Nrw   )Znstepsr]   r   )
rÈ   r   r(   rD   rÆ   rE   r   ÚUserWarningrF   r
   rÉ   r#   r#   r$   Útest_warns_on_failurey  s
    z*ODECheckParameterUse.test_warns_on_failureN)r7   r8   r9   r“   rÆ   rÅ   rÈ   rÊ   rË   rÏ   rÐ   rÑ   rÓ   r#   r#   r#   r$   rÃ   A  s   	rÃ   c                   @   s   e Zd ZdZdZdS )ÚTestDOPRI5CheckParameterUserV   FN©r7   r8   r9   rÆ   rÅ   r#   r#   r#   r$   rÔ   ‚  s   rÔ   c                   @   s   e Zd ZdZdZdS )ÚTestDOP853CheckParameterUserZ   FNrÕ   r#   r#   r#   r$   rÖ   ‡  s   rÖ   c                   @   s   e Zd ZdZdZdS )ÚTestVODECheckParameterUserK   TNrÕ   r#   r#   r#   r$   r×   Œ  s   r×   c                   @   s   e Zd ZdZdZdS )ÚTestZVODECheckParameterUserO   TNrÕ   r#   r#   r#   r$   rØ   ‘  s   rØ   c                   @   s   e Zd ZdZdZdS )ÚTestLSODACheckParameterUserS   TNrÕ   r#   r#   r#   r$   rÙ   –  s   rÙ   c                  C   s:   d} dg}t dd„ | |dd�\}}t|t | gg¡ƒ d S )Nrw   r   c                 S   s   |  S r   r#   )r    r   r#   r#   r$   r%      r&   z*test_odeint_trivial_time.<locals>.<lambda>Tr   )r   r   r¤   r   )r   r   r    Úinfor#   r#   r$   Útest_odeint_trivial_time›  s    rÛ   c                     s†  dd„ ‰dd„ ‰dd„ } dd„ ‰ ‡ fd	d
„}t g d¢g d¢g d¢g d¢gƒ}t d¡}t  g 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ˆ|||fdddd|dddd�\}}t||dd� t||	ddd� t|	|d d� t|d! |d! ƒ t|
d! |d! ƒ t‡fd"d#„|||fdddd‡fd$d#„dd%�
\}}t||dd&d'� d S )(Nc                 S   s
   |  | ¡S r   )r   ©r    r   Úcr#   r#   r$   Úfunc§  s    z)test_odeint_banded_jacobian.<locals>.funcc                 S   s   |S r   r#   rÜ   r#   r#   r$   r(   ª  s    z(test_odeint_banded_jacobian.<locals>.jacc                 S   s   |j jdd�S ©NÚCr©   ©ÚTrq   rÜ   r#   r#   r$   Újac_transpose­  s    z2test_odeint_banded_jacobian.<locals>.jac_transposec              
   S   sT   t  t jdt  |d¡f t  |¡t jt  |d¡df t jt  |d¡ddf f¡}|S )Nr   rw   rz   éþÿÿÿ)r¤   r±   Zr_Zdiag)r    r   rÝ   r(   r#   r#   r$   Ú	bjac_rows°  s    ýz.test_odeint_banded_jacobian.<locals>.bjac_rowsc                    s   ˆ | ||ƒj jdd�S rß   rá   rÜ   )rå   r#   r$   Ú	bjac_cols·  s    z.test_odeint_banded_jacobian.<locals>.bjac_cols)i3ÿÿÿç{®Gáz„?r   r   )r^   g      Àg{®Gáz”?r   )gü©ñÒMbP?rç   g       Àrç   )r   r   r^   r·   é   )r   rŸ   r?   éd   Tg‚vIhÂ%<=g•dyáý¥=i'  )Úargsr   r@   rA   Úmxstepr)   )rê   r   r@   rA   rë   r)   Ú	col_derivrx   rw   )rê   r   r@   rA   rë   r)   ÚmlÚmu)	rê   r   r@   rA   rë   r)   rí   rî   rì   zsol1 != sol2)Úerr_msgçê-�™—q=zsol1 != sol3)r@   rï   zsol3 != sol4Znjec                    s   ˆ || |ƒS r   r#   ©r   r    rÝ   )rÞ   r#   r$   r%   ã  r&   z-test_odeint_banded_jacobian.<locals>.<lambda>c                    s   ˆ || |ƒS r   r#   rñ   r*   r#   r$   r%   æ  r&   )rê   r   r@   rA   rë   r)   r'   zsol1 != sol1ty)rA   rï   )r   r¤   Úonesr   r   r   )rã   ræ   rÝ   r   r   Zsol1Zinfo1Zsol2Zinfo2Zsol3Zinfo3Zsol4Zinfo4Zsol1tyZinfo1tyr#   )rå   rÞ   r(   r$   Útest_odeint_banded_jacobian¤  sN    ý
þ
þ
þ
þ
ý
ró   c                  C   s°   dd„ } dd„ }dd„ }d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|d� t tt| dddg|d� t tt|ddgddg|d� d S )Nc                 S   s   d|  S ©Néœÿÿÿr#   ©rµ   r   r#   r#   r$   Úsys1dî  s    z!test_odeint_errors.<locals>.sys1dc                 S   s   dd S ©Nr]   r   r#   rö   r#   r#   r$   Úbad1ñ  s    z test_odeint_errors.<locals>.bad1c                 S   s   dS ©NZfoor#   rö   r#   r#   r$   Úbad2ô  s    z test_odeint_errors.<locals>.bad2c                 S   s   dd S rø   r#   rö   r#   r#   r$   Úbad_jac1÷  s    z$test_odeint_errors.<locals>.bad_jac1c                 S   s   dggS rú   r#   rö   r#   r#   r$   Úbad_jac2ú  s    z$test_odeint_errors.<locals>.bad_jac2c                 S   s   d| d  d| d  gS )Nrõ   r   çš™™™™™¹¿rw   r#   rö   r#   r#   r$   Úsys2dý  s    z!test_odeint_errors.<locals>.sys2dc                 S   s   dd dgddggS )Nr]   r   rþ   r#   rö   r#   r#   r$   Úsys2d_bad_jac   s    z)test_odeint_errors.<locals>.sys2d_bad_jacr]   r   rw   ©r)   )r_   ÚZeroDivisionErrorr   Ú
ValueError)r÷   rù   rû   rü   rý   rÿ   r   r#   r#   r$   Útest_odeint_errorsí  s    ÿr  c                  C   s’   dd„ } d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� d S )Nc                 S   s   ddgS )Nrw   rz   r#   rö   r#   r#   r$   Úbadrhs  s    z&test_odeint_bad_shapes.<locals>.badrhsc                 S   s   d|  S rô   r#   rö   r#   r#   r$   Úsys1  s    z$test_odeint_bad_shapes.<locals>.sys1c                 S   s
   g d¢gS )N)r   r   r   r#   rö   r#   r#   r$   Úbadjac  s    z&test_odeint_bad_shapes.<locals>.badjacr   rw   rx   re   rm   r?   r  )r_   r  r   r`   )r  r  r  Zbad_y0Zbad_tr#   r#   r$   Útest_odeint_bad_shapes  s    r  c                  C   s  dd„ } t  d¡}t| dg|ƒ}t|t  t|ƒdf¡ƒ dt  d¡ }dgd	 |d| d| d
| g }t| ddg|ddd�}t  ddggd	 ddgddgddgddgg ¡}t||ƒ t| dgg ƒ}t|t jg t j	d� 
d¡ƒ ttt| dgg d¢ƒ ttt| g d¢g d¢ƒ dS )zRegression test for gh-8217.c                 S   s   d|  S )Ng      Ð¿r#   rö   r#   r#   r$   rÞ   +  s    z$test_repeated_t_values.<locals>.funcr?   r]   rw   rè   rx   r   é	   re   rð   )rA   r@   rn   r¦   g      Ð?g      À?)Zdtyper•   )r   rw   r¦   r   )rw   rx   re   )r   rz   rä   re   N)r¤   r   r   r   rò   ÚlenÚlogr   r   Zfloat64Zreshaper_   r  )rÞ   r   ra   ÚtauZexpected_solr#   r#   r$   Útest_repeated_t_values(  s&    
"ýÿ
r  );r“   Únumpyr¤   r   r   r   r   r   r   r   r	   r
   r   r   Znumpy.testingr   r   r   r   r   r   Zpytestr   r_   Zscipy.integrater   r   r   r   r:   rI   rj   rl   rŽ   r’   r”   r�   r¡   r¥   r3   r   r(   r¹   r¼   r¿   rÀ   rÁ   rÂ   rÃ   rÔ   rÖ   r×   rØ   rÙ   rÛ   ró   r  r  r  r#   r#   r#   r$   Ú<module>   sH   4 ##j(ZC?A	I 