U
    »mœd_  ã                   @   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© ú]/home/sam/Atlas/atlas_env/lib/python3.8/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 k	s>ˆ jd k	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%   >   r&   z*TestODEClass._do_problem.<locals>.<lambda>r(   c                    s   ˆ   || ¡S r   r*   r<   r!   r#   r$   r%   A   r&   Ú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_zvodef   s
    zTestOde.test_zvodec                 C   s(   t D ]}|ƒ }|jrq|  |d¡ qd S ©NÚlsodar2   r5   r#   r#   r$   Ú
test_lsodan   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_dopri5v   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%   �   r&   z.TestOde.test_concurrent_fail.<locals>.<lambda>r   çš™™™™™¹?)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%   ž   r&   z,TestOde.test_concurrent_ok.<locals>.<lambda>é   )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   X   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   0  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_break=  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   L  s    
z2TestComplexSolout._run_solout_test.<locals>.soloutc                 S   s   d| d d  gS ©Nr]   rm   ù              ð?r#   r   r#   r#   r$   ry   P  s    z/TestComplexSolout._run_solout_test.<locals>.rhsr   rz   )r   rD   r{   rE   rF   r   r   r|   r#   rr   r$   r�   D  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   h  s    
z8TestComplexSolout._run_solout_break_test.<locals>.soloutc                 S   s   d| d d  gS r�   r#   r   r#   r#   r$   ry   n  s    z5TestComplexSolout._run_solout_break_test.<locals>.rhsr   rz   rn   )r   rD   r{   rE   rF   r   r   r   rŠ   r#   r‰   r$   r‹   `  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Ž   B  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                   @   sF   e Zd ZdZde Zedddddgƒ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                   @   sL   e Zd ZdZdZdZdddgZdZdZd	d
dg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   Z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$   Újac2,  s    ÿr¿   c                 C   s&   |d |d  |d  |d  g}|S )Nr   rw   r#   r·   r#   r#   r$   Úfv2  s    "rÀ   c                 C   s"   t d|d g|d  dggƒ}|S )Nr   r   rw   r£   rº   r#   r#   r$   Újacv7  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_solverF  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_solverR  s    
z"ODECheckParameterUse._check_solverc                 C   s   |   tt¡}|  |¡ d S r   )rÇ   r   r(   rÉ   )r/   rÆ   r#   r#   r$   Útest_no_paramsX  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_paramsd  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_paramm  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_failureu  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Â   =  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 ddddgddddgddddgddddggƒ}t d¡}t  ddddg¡}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 )0Nc                 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¤   Z	row_stackZ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_colsi3ÿÿÿg{®Gáz„?r   r^   g      Àg{®Gáz”?gü©ñÒMbP?g       À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   sp    


ý
  þ
   þ
    þ
     þ
  
 ý
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   dddggS )Nr   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ddddgƒ ttt| ddd
gdddd
gƒ 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•   rz   rã   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 #!h(ZC?A	I 