o
    Ö­j#`  ã                   @   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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ƒrmtˆ jˆ j|ˆ jdd	�\}}tˆ  ||¡ƒ t‡ fd
d„ˆ j|‡ fdd„ddd�\}}tˆ  ||¡ƒ d S d S )Nç        gš™™™™™©?T©Úfull_outputc                    ó   ˆ   || ¡S ©N©Úf©ÚtÚy©Úproblem© úa/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/integrate/tests/test_integrate.pyÚ<lambda>    ó    z(TestOdeint._do_problem.<locals>.<lambda>)r   ÚtfirstÚjac)ÚDfunr   c                    r   r   r   r   r"   r$   r%   r&   +   r'   c                    r   r   ©r)   r   r"   r$   r%   r&   ,   r'   )r*   r   r(   )	r   Ústop_tr   r   Úz0r   ÚverifyÚhasattrr)   )Úselfr#   r    ÚzÚinfodictr$   r"   r%   Ú_do_problem   s$   
ÿ

ÿ

þözTestOdeint._do_problemc                 C   s&   t D ]}|ƒ }|jrq|  |¡ qd S r   ©ÚPROBLEMSÚcmplxr3   ©r0   Úproblem_clsr#   r$   r$   r%   Útest_odeint0   s   üzTestOdeint.test_odeintN)Ú__name__Ú
__module__Ú__qualname__r3   r9   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r)ˆ 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                    r   r   r   ©r    r1   r"   r$   r%   r   ?   ó   z#TestODEClass._do_problem.<locals>.fr)   c                    r   r   r+   r?   r"   r$   r%   r)   C   r@   z%TestODEClass._do_problem.<locals>.jacÚubandÚlbandé
   )ÚatolÚrtolÚmethodr   )r    r   )r/   rB   rA   Ú	ode_classÚset_integratorrD   rE   Úset_initial_valuer-   Ú	integrater,   r   r!   r   Ú
successfulÚget_return_coder.   r   )	r0   r#   Ú
integratorrF   r   r)   Úintegrator_paramsÚigr1   r$   r"   r%   r3   <   s,   


ýü"zTestODEClass._do_problem)r>   )r:   r;   r<   rG   r3   r$   r$   r$   r%   r=   8   s    r=   c                   @   sP   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	e
jjdd„ ƒZdd„ ZdS )ÚTestOdec                 C   s>   t D ]}|ƒ }|jrq|js|  |dd¡ |  |dd¡ qd S ©NÚvoder>   Úbdf)r5   r6   Ústiffr3   r7   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>   rS   ©r5   rT   r3   r7   r$   r$   r%   Ú
test_zvodei   s   üzTestOde.test_zvodec                 C   s(   t D ]}|ƒ }|jrq|  |d¡ qd S ©NÚlsodar4   r7   r$   r$   r%   Ú
test_lsodaq   s   üzTestOde.test_lsodac                 C   ó<   t D ]}|ƒ }|jrq|jrqt|dƒrq|  |d¡ qd S ©Nr)   Údopri5©r5   r6   rT   r/   r3   r7   r$   r$   r%   Útest_dopri5y   ó   
øzTestOde.test_dopri5c                 C   r\   ©Nr)   Údop853r_   r7   r$   r$   r%   Útest_dop853…   ra   zTestOde.test_dop853c                 C   s~   dD ]:}dd„ }t |ƒ |¡}| dd¡ t |ƒ |¡}| dd¡ | |jd ¡ | |jd ¡ tt|j|jd ƒ qd S )N)rR   rV   rZ   c                 S   ó   dS ©Nç      ð?r$   r   r$   r$   r%   r   ”   ó   z'TestOde.test_concurrent_fail.<locals>.fr   çš™™™™™¹?)r   rH   rI   rJ   r    Úassert_raisesÚRuntimeError)r0   Úsolr   ÚrÚr2r$   r$   r%   Útest_concurrent_fail‘   s   ózTestOde.test_concurrent_failc                 C   sX  dd„ }t dƒD ]¡}dD ]I}|dv r|dkrqt|ƒ |¡}| dd¡ t|ƒ |¡}| dd¡ | |jd ¡ | |jd ¡ | |jd ¡ t|jdƒ t|jd	ƒ qd
D ]P}t|ƒ |¡}| dd¡ t|ƒ |¡}| dd¡ | |jd ¡ | |jd ¡ | |jd ¡ | |jd ¡ | |jd ¡ t|jdƒ t|jd	ƒ qXqd S )Nc                 S   re   rf   r$   r   r$   r$   r%   r   £   rh   z%TestOde.test_concurrent_ok.<locals>.fé   )rR   rV   rZ   r^   rc   >   rR   rZ   rV   é   r   ri   gš™™™™™É?©r^   rc   g333333Ó?)Úranger   rH   rI   rJ   r    r   r!   )r0   Únum_parallel_threadsr   Úkrl   rm   rn   r$   r$   r%   Útest_concurrent_ok¢   s8   òïzTestOde.test_concurrent_okN)r:   r;   r<   r   rG   rU   rX   r[   r`   rd   ÚpytestÚmarkÚthread_unsafero   rv   r$   r$   r$   r%   rP   [   s    

rP   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 rQ   rW   r7   r$   r$   r%   rU   Ì   s   ûzTestComplexOde.test_vodec                 C   s    t D ]}|ƒ }|  |d¡ qd S rY   )r5   r3   r7   r$   r$   r%   r[   Õ   s   þzTestComplexOde.test_lsodac                 C   ó4   t D ]}|ƒ }|jrqt|dƒrq|  |d¡ qd S r]   ©r5   rT   r/   r3   r7   r$   r$   r%   r`   Ü   ó   
úzTestComplexOde.test_dopri5c                 C   r{   rb   r|   r7   r$   r$   r%   rd   æ   r}   zTestComplexOde.test_dop853N)	r:   r;   r<   r   rG   rU   r[   r`   rd   r$   r$   r$   r%   rz   È   s    	
rz   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   ç      $@rg   ç       @c                    ó   ˆ   | ¡ ˆ  | ¡ ¡ d S r   ©ÚappendÚcopyr   ©ÚtsÚysr$   r%   Úsoloutû   ó   
z+TestSolout._run_solout_test.<locals>.soloutc                 S   ó   |d |d  |d d  gS ©Nr   rq   é   r$   r   r$   r$   r%   Úrhsÿ   ó   z(TestSolout._run_solout_test.<locals>.rhsr   éÿÿÿÿ)r   rH   Ú
set_soloutrI   rJ   r   r   ©	r0   rM   Út0ÚtendÚy0rˆ   r�   rO   Úretr$   r…   r%   Ú_run_solout_testó   s   

zTestSolout._run_solout_testc                 C   ó   dD ]}|   |¡ qd S ©Nrr   ©r–   ©r0   rM   r$   r$   r%   Útest_solout  ó   ÿ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   r   rg   r€   c                    r�   r   r‚   r   r…   r$   r%   rˆ     r‰   z9TestSolout._run_solout_after_initial_test.<locals>.soloutc                 S   rŠ   r‹   r$   r   r$   r$   r%   r�     rŽ   z6TestSolout._run_solout_after_initial_test.<locals>.rhsr   r�   )r   rH   rI   r�   rJ   r   r   r‘   r$   r…   r%   Ú_run_solout_after_initial_test  s   

z)TestSolout._run_solout_after_initial_testc                 C   r—   r˜   )r�   rš   r$   r$   r%   Útest_solout_after_initial'  rœ   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   r   rg   r€   c                    ó,   ˆ  | ¡ ˆ  | ¡ ¡ | ˆ d krdS d S ©Nr€   r�   r‚   r   ©r“   r†   r‡   r$   r%   rˆ   3  ó
   
ÿz1TestSolout._run_solout_break_test.<locals>.soloutc                 S   rŠ   r‹   r$   r   r$   r$   r%   r�   9  rŽ   z.TestSolout._run_solout_break_test.<locals>.rhsr   r�   )r   rH   r�   rI   rJ   r   r   r   ©r0   rM   r’   r”   rˆ   r�   rO   r•   r$   r¡   r%   Ú_run_solout_break_test+  s    

z!TestSolout._run_solout_break_testc                 C   r—   r˜   ©r¤   rš   r$   r$   r%   Útest_solout_breakF  rœ   zTestSolout.test_solout_breakN)	r:   r;   r<   r–   r›   r�   rž   r¤   r¦   r$   r$   r$   r%   r~   ñ   s    r~   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                    r�   r   r‚   r   r…   r$   r%   rˆ   U  r‰   z2TestComplexSolout._run_solout_test.<locals>.soloutc                 S   ó   d| d d  gS ©Nrg   r   ù              ð?r$   r   r$   r$   r%   r�   Y  ó   z/TestComplexSolout._run_solout_test.<locals>.rhsr   r�   )r   rH   r�   rI   rJ   r   r   r‘   r$   r…   r%   r–   M  s   

z"TestComplexSolout._run_solout_testc                 C   r—   r˜   r™   rš   r$   r$   r%   r›   e  rœ   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                    rŸ   r    r‚   r   r¡   r$   r%   rˆ   q  r¢   z8TestComplexSolout._run_solout_break_test.<locals>.soloutc                 S   r©   rª   r$   r   r$   r$   r%   r�   w  r¬   z5TestComplexSolout._run_solout_break_test.<locals>.rhsr   r�   r€   )r   rH   r�   rI   rJ   r   r   r   r£   r$   r¡   r%   r¤   i  s    

z(TestComplexSolout._run_solout_break_testc                 C   r—   r˜   r¥   rš   r$   r$   r%   r¦   „  rœ   z#TestComplexSolout.test_solout_breakN)r:   r;   r<   r–   r›   r¤   r¦   r$   r$   r$   r%   r§   K  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
    Frq   Ng�íµ ÷Æ°>gñhãˆµøä>)r:   r;   r<   Ú__doc__rT   r6   r,   r-   rB   rA   rD   rE   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ñ?rg   ri   g      @c                 C   s.   t dtƒ}d|d< | j | j |d< t||ƒS )N)rŒ   rŒ   rg   ©r   rq   )rq   r   )r   Úfloatru   Úmr   )r0   r1   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   rq   ©rD   rE   )	r   ru   r²   r-   r   r   r   rD   rE   )r0   Úzsr    ÚomegaÚur$   r$   r%   r.   ±  s   0 zSimpleOscillator.verifyN)r:   r;   r<   r®   r,   r   r±   r-   ru   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$   ©r0   r1   r    r$   r$   r%   r   ½  ó   zComplexExp.fc                 C   s   dt dƒ S )Nr«   é   )r	   r¹   r$   r$   r%   r)   À  r@   zComplexExp.jacc                 C   s&   | j td| ƒ }t||| j| jd�S )Nr«   r´   )r-   r   r   rD   rE   ©r0   rµ   r    r·   r$   r$   r%   r.   Ã  s   zComplexExp.verifyN)r:   r;   r<   r®   r
   r,   r   r-   r6   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 )Nrg   rC   r«   ©r   r¹   r$   r$   r%   r   Î  ó   zPi.fc                 C   s.   dt  d¡ }t||dd d …f | j| jd�S )Ny       €       ÀrC   r�   r´   )ÚnpÚarctanr   rD   rE   r¼   r$   r$   r%   r.   Ñ  s    z	Pi.verifyN)	r:   r;   r<   r®   r,   r-   r6   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      *@rq   r   )gÃõ(\�ÂÅ?gq=
×£pÍ?g�Âõ(\�Ò?c                 C   s`   | j }t |d  |d  |d  |d  |d |d   |d  |d  |d |d   g¡S r‹   )ÚlmbdrÁ   r   )r0   r1   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 )	Nrq   rp   ÚF©Úorderc                    s   |ˆ ˆj |  | |f< d S r   )rA   )ÚriÚciÚval©Újr0   r$   r%   Úset_jú  s   zCoupledDecay.jac.<locals>.set_jr   rŒ   )rÅ   rÁ   r   rB   rA   )r0   r1   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 )Nrq   r   rŒ   r´   )
rÁ   r   rÅ   r   Úvstackr-   Ú	transposer   rD   rE   )r0   rµ   r    rÅ   Úd10Úd21Úd20Úe0Úe1Úe2r·   r$   r$   r%   r.     s&   **ÿÿýûzCoupledDecay.verifyN)r:   r;   r<   r®   rT   r,   r-   rB   rA   rÅ   r   r)   r.   r$   r$   r$   r%   rÃ   Ö  s    rÃ   c                 C   s   |d |d  g}|S ©Nrq   r   r$   )r    ÚxÚdxdtr$   r$   r%   r     s   r   c                 C   s   t ddgddggƒ}|S )Nr   rg   ç      ð¿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%  ó   rÜ   c                 C   s   t d|g| dggƒ}|S ©Nr   r¿   ©r    rØ   r¶   rÍ   r$   r$   r%   Újac1*  ó   ÿrà   c                 C   s   ||d  | |d  g}|S r×   r$   )r    rØ   Úomega1Úomega2rÙ   r$   r$   r%   Úf20  rÝ   rä   c                 C   s   t d|g| dggƒ}|S rÞ   r¿   )r    rØ   râ   rã   rÍ   r$   r$   r%   Újac25  rá   rå   c                 C   s&   |d |d  |d  |d  g}|S )Nr   rq   r$   rÛ   r$   r$   r%   Úfv;  s   "ræ   c                 C   s"   t d|d g|d  dggƒ}|S )Nr   r   rq   r¿   rß   r$   r$   r%   Újacv@  s   ÿrç   c                   @   sX   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ejj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� |S |j| jddd� |S )Ng•Ö&è.>gH¯¼šò×z>)rD   rE   Úwith_jacobianr´   )r   Úsolver_uses_jacrH   Úsolver_name)r0   r   r)   Úsolverr$   r$   r%   Ú_get_solverO  s   
ÿÿz ODECheckParameterUse._get_solverc                 C   s2   ddg}|  |d¡ | t¡ t|jddgƒ d S )Nrg   r   rÚ   )rI   rJ   r
   r   r!   ©r0   rí   Úicr$   r$   r%   Ú_check_solver[  s   
z"ODECheckParameterUse._check_solverc                 C   s   |   tt¡}|  |¡ d S r   )rî   r   r)   rñ   )r0   rí   r$   r$   r%   Útest_no_paramsa  s   z#ODECheckParameterUse.test_no_paramsc                 C   s8   |   tt¡}d}| |¡ | jr| |¡ |  |¡ d S rf   )rî   rÜ   rà   Úset_f_paramsrë   Úset_jac_paramsrñ   ©r0   rí   r¶   r$   r$   r%   Útest_one_scalar_parame  s   

z*ODECheckParameterUse.test_one_scalar_paramc                 C   s@   |   tt¡}d}d}| ||¡ | jr| ||¡ |  |¡ d S rf   )rî   rä   rå   ró   rë   rô   rñ   )r0   rí   râ   rã   r$   r$   r%   Útest_two_scalar_paramsm  s   z+ODECheckParameterUse.test_two_scalar_paramsc                 C   s<   |   tt¡}ddg}| |¡ | jr| |¡ |  |¡ d S rf   )rî   ræ   rç   ró   rë   rô   rñ   rõ   r$   r$   r%   Útest_vector_paramv  s   

z&ODECheckParameterUse.test_vector_paramc                 C   sB   |   tt¡}|j| jdd� ddg}| |d¡ tt|jt	ƒ d S )Nrq   )Únstepsrg   r   )
rî   r   r)   rH   rì   rI   r   ÚUserWarningrJ   r
   rï   r$   r$   r%   Útest_warns_on_failure~  s
   z*ODECheckParameterUse.test_warns_on_failureN)r:   r;   r<   r®   rì   rë   rî   rñ   rò   rö   r÷   rø   rw   rx   ry   rû   r$   r$   r$   r%   rè   F  s    	rè   c                   @   ó   e Zd ZdZdZdS )ÚTestDOPRI5CheckParameterUser^   FN©r:   r;   r<   rì   rë   r$   r$   r$   r%   rý   ˆ  ó    rý   c                   @   rü   )ÚTestDOP853CheckParameterUserc   FNrþ   r$   r$   r$   r%   r   �  rÿ   r   c                   @   rü   )ÚTestVODECheckParameterUserR   TNrþ   r$   r$   r$   r%   r  ’  rÿ   r  c                   @   rü   )ÚTestZVODECheckParameterUserV   TNrþ   r$   r$   r$   r%   r  —  rÿ   r  c                   @   rü   )ÚTestLSODACheckParameterUserZ   TNrþ   r$   r$   r$   r%   r  œ  rÿ   r  c                  C   s:   d} dg}t dd„ | |dd�\}}t|t | gg¡ƒ d S )Nrq   r   c                 S   s   |  S r   r$   )r!   r    r$   r$   r%   r&   ¦  s    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­  ó   
z)test_odeint_banded_jacobian.<locals>.funcc                 S   s   |S r   r$   r  r$   r$   r%   r)   °  rh   z(test_odeint_banded_jacobian.<locals>.jacc                 S   s   |j jdd�S ©NÚCrÇ   ©ÚTr„   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   rq   r�   éþÿÿÿ)rÁ   rÏ   Úr_Ú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½  rÀ   z.test_odeint_banded_jacobian.<locals>.bjac_cols)i3ÿÿÿç{®Gáz„?r   r   )ri   g      Àg{®Gáz”?r   )gü©ñÒMbP?r  g       Àr  )r   r   ri   rÚ   é   )r   r»   rC   éd   Tg‚vIhÂ%<=g•dyáý¥=i'  )Úargsr   rD   rE   Úmxstepr*   )r  r   rD   rE   r  r*   Ú	col_derivrŒ   rq   )r  r   rD   rE   r  r*   ÚmlÚmu)	r  r   rD   rE   r  r*   r  r  r  zsol1 != sol2)Úerr_msgçê-�™—q=zsol1 != sol3)rD   r  zsol3 != sol4Únjec                    ó   ˆ || |ƒS r   r$   ©r    r!   r  )r  r$   r%   r&   é  r'   z-test_odeint_banded_jacobian.<locals>.<lambda>c                    r  r   r$   r   r+   r$   r%   r&   ì  r'   )r  r   rD   rE   r  r*   r(   zsol1 != sol1ty)rE   r  )r   rÁ   Úonesr   r   r   )r  r  r  r”   r    Úsol1Úinfo1Úsol2Úinfo2Úsol3Úinfo3Úsol4Úinfo4Úsol1tyÚ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   ó   d|  S ©Néœÿÿÿr$   ©rØ   r    r$   r$   r%   Úsys1dô  rº   z!test_odeint_errors.<locals>.sys1dc                 S   ó   dd S ©Nrg   r   r$   r0  r$   r$   r%   Úbad1÷  rº   z test_odeint_errors.<locals>.bad1c                 S   re   ©NÚfoor$   r0  r$   r$   r%   Úbad2ú  rh   z test_odeint_errors.<locals>.bad2c                 S   r2  r3  r$   r0  r$   r$   r%   Úbad_jac1ý  rº   z$test_odeint_errors.<locals>.bad_jac1c                 S   s   dggS r5  r$   r0  r$   r$   r%   Úbad_jac2   rº   z$test_odeint_errors.<locals>.bad_jac2c                 S   s   d| d  d| d  gS )Nr/  r   çš™™™™™¹¿rq   r$   r0  r$   r$   r%   Úsys2d  s   z!test_odeint_errors.<locals>.sys2dc                 S   s   dd dgddggS )Nrg   r   r:  r$   r0  r$   r$   r%   Úsys2d_bad_jac  s   z)test_odeint_errors.<locals>.sys2d_bad_jacrg   r   rq   ©r*   )rj   ÚZeroDivisionErrorr   Ú
ValueError)r1  r4  r7  r8  r9  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 )Nrq   r�   r$   r0  r$   r$   r%   Úbadrhs  rº   z&test_odeint_bad_shapes.<locals>.badrhsc                 S   r-  r.  r$   r0  r$   r$   r%   Úsys1  rº   z$test_odeint_bad_shapes.<locals>.sys1c                 S   s
   g d¢gS )N)r   r   r   r$   r0  r$   r$   r%   Úbadjac  r	  z&test_odeint_bad_shapes.<locals>.badjacr   rq   rŒ   rp   r   rC   r=  )rj   r?  r   rk   )rA  rB  rC  Úbad_y0Úbad_tr$   r$   r%   Útest_odeint_bad_shapes  s    rF  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   r-  )Ng      Ð¿r$   r0  r$   r$   r%   r  1  rº   z$test_repeated_t_values.<locals>.funcrC   rg   rq   r  rŒ   r   é	   rp   r  )rE   rD   r€   rÄ   g      Ð?g      À?)Údtyper°   )r   rq   rÄ   r   )rq   rŒ   rp   )r   r�   r  rp   N)rÁ   r   r   r   r!  ÚlenÚlogr   r   Úfloat64Úreshaperj   r?  )r  r    rl   ÚtauÚexpected_solr$   r$   r%   Útest_repeated_t_values.  s&   
"ýÿ
rO  );r®   ÚnumpyrÁ   r   r   r   r   r   r   r   r	   r
   r   r   Únumpy.testingr   r   r   r   r   r   rw   r   rj   Úscipy.integrater   r   r   r   r=   rP   rz   r~   r§   r­   r¯   r¸   r½   rÃ   r5   r   r)   rÜ   rà   rä   rå   ræ   rç   rè   rý   r   r  r  r  r  r,  r@  rF  rO  r$   r$   r$   r%   Ú<module>   sL   4 ##m)ZC?B	I 