o
    h                     @   s  d dl 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Zd dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZm 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(dd Z)dd Z*dd  Z+d!d" Z,d#d$ Z-d%d& Z.d'd( Z/d)d* Z0d+d, Z1d-d. Z2d/d0 Z3e	j4j5d1d2 Z6e	j4j5d3d4 Z7e	j48d5d6d7 Z9d8d9 Z:e	j4j;e	j4<d:g d;d<d= Z=d>d? Z>d@dA Z?e	j4<dBdCdDgdEdF Z@dGdH ZAdIdJ ZBdKdL ZCdMdN ZDdOdP ZEe	j4j5dQdR ZFdSdT ZGdUdV ZHdWdX ZIdYdZ ZJd[d\ ZKd]d^ ZLd_d` ZMdadb ZNdcdd ZOdedf ZPe	j4j5dgdh ZQe	j4<d:g didjdk ZRdldm ZSe	j4<dnejTejUgdodp ZVe	j4<d:g dqdrds ZWe	j4<d:g dqdtdu ZXe	j4<d:g dqdvdw ZYe	j4<d:g dqdxdy ZZdzd{ Z[dS )|    )product)assert_assert_allcloseassert_array_lessassert_equalassert_no_warningssuppress_warningsN)raises)group_columns)	solve_ivpRK23RK45DOP853RadauBDFLSODA)OdeSolution)num_jacselect_initial_step)ConstantDenseOutput)
coo_matrix
csc_matrixc                 C   s
   t |S N)np
zeros_likety r   W/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/integrate/_ivp/tests/test_ivp.pyfun_zero      
r    c                 C   s,   t |d  d|d   |d |d  gS )Nr         r   arrayr   r   r   r   
fun_linear   s   ,r&   c                   C   s   t ddgddggS )Nr#   r$   r   r   r   r   
jac_linear   s   r)   c                 C   s8   t dt d|   dt d|   t d|   fS )Nr(      )r   vstacksincosr   r   r   r   
sol_linear   s   r/   c                 C   sB   t |d |  |d |d d|d   d  | |d d   gS Nr#   r   r*   r$   r   r   r   r   fun_rational       .r1   c                 C   sB   t |d |  |d |d d|d   d  | |d d   fS r0   r   r+   r   r   r   r   fun_rational_vectorized%   r2   r4   c                 C   s^   t dd|  gd|d d  | |d d d   |d d|d   d | |d d   ggS Nr   r#   r*      r$   r   r   r   r   jac_rational*   s   
"&r8   c                 C   s\   t dd|  gd|d d  | |d d d   |d d|d   d | |d d   ggS r5   )r   r   r   r   r   jac_rational_sparse2   s   
"&r9   c                 C   s&   t | | d  d|  | d d  fS )N
   r*   )r   asarrayr.   r   r   r   sol_rational:   s   &r<   c                 C   sF  |j d d }d}d}| dkrdnd}t|d||d f}d| }t|d }d|| d d  |d  }|| d d |d  }	d| d }
d| d }d| }d| d }td| }|||
 ||   d|  |	|| d||   ||
   |d   |||  ||   |d d d< | ||  ||  |dd d< |S )	Nr   r*   d   r7   r"   r6   r#      )shaper   hstackarangeempty)r   r   nkcphidjalphabetaj_2_p1j_2_m3j_2_m1j_2fr   r   r   fun_medazko>   s*   & rP   c                 C   s   g }g }t | d }||dd   ||dd  d  || || || ||d  ||d d  ||d d d  t | d d }|| || || ||d  t |}t |}tt |||ffS )Nr*   r#   r'   )r   rA   appendr@   r   	ones_like)rC   colsrowsir   r   r   medazko_sparsityY   s&   







rV   c                 C      | S r   r   r   r   r   r   fun_complexy   s   rX   c                 C   s   t |jd  S Nr   )r   eyer?   r   r   r   r   jac_complex}      r[   c                 C   s   t t| |S r   )r   r[   r   r   r   r   jac_complex_sparse   s   r]   c                 C   s   dt |   }|dS )N      ?      ?)r#   r'   )r   expreshaper   r   r   r   sol_complex   s   
ra   c                 C   s   || d  S Nr*   r   r   r   r   r   fun_event_dense_output_LSODA      rc   c                 C      | d S rb   r   r   r   r   r   jac_event_dense_output_LSODA      rf   c                 C   s(   t | d d d|   t d d S )Nr*   皙?   )r   r_   logr.   r   r   r   sol_event_dense_output_LSODA   s   (rk   c                 C   s:   | | ||t |   }t jj|ddt |jd  S )Nr   )axis)r   abslinalgnormsqrtr?   )r   y_truertolatoler   r   r   compute_error   s    ru   c                  C   s6  d} d}ddg}t ddgg ddd	gdd
ggd ttgD ]\}}}}|r't}nt}t }|td t|||| ||d||d	}	W d    n1 sJw   Y  t	|	j
d |d  t|	jd u  t|	jd u  t|	j t	|	jd |dkr~t|	jdk  nt|	jdk  |dv rt	|	jd t	|	jd ntd|	j  k odk n   td|	j  k odk n   t|	j
}
t|	j|
| |}tt|dk  tj| }t|}|	|}t||| |}tt|dk  |d |d  d }t|}|	|}t||| |}tt|dk  t|	|	j
|	jddd qd S )NMbP?ư>UUUUUU?qq?FTr   r   r   r   r   r   r"   	   r#   AThe following arguments have no effect for a chosen solver: `jac`)rr   rs   methoddense_outputjac
vectorizedr   r   2   (   )r   r   r   r   r>   r:   r'   r*   V瞯<rr   rs   )r   r8   r9   r4   r1   r   filterUserWarningr   r   r   r   t_eventsy_eventssuccessstatusnfevnjevnlur<   ru   r   r   alllinspacesolr   )rr   rs   y0r   r}   t_spanr   funsupresrq   rt   tcyc_trueycr   r   r   test_integration   sb   





r   c                  C   s  d} d}dg}ddg}t |d |d }tg dd ttgD ]\}}t }|td tt	|||d| ||d	}W d    n1 sCw   Y  t
|jd |d  t|jd u  t|jd u  t|j t
|jd |d
krw|jdk svJ n|jdk s~J |dkrt
|jd |jdk sJ n|jdksJ |jdksJ t|j}	t|j|	| |}
t |
dk sJ t|}||}t||| |}
t |
dk sJ qd S )Nrv   rw   r^   r   r#   )r   r   r   r   r|   T)r}   r~   rr   rs   r   r   #      r   ri   r"   )r   r   r   r[   r]   r   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   ra   ru   r   r   r   )rr   rs   r   r   r   r}   r   r   r   rq   rt   r   r   r   r   r   test_integration_complex   sJ   



r   r"   c                  C   s6  d} ddg}t d|  }d|dd d< t| }dD ]~}tt||||d}t|jd |d  t|jd u  t|j	d u  t|j
 t|jd t|jd d	d
d t|jd ddd t|jd dd
d t|jd ddd t|jd dd
d t|jd ddd t|jd ddd t|jd dd
d qd S )N   r      r*   r#   )r   r   )r}   jac_sparsity)N   r'   gݨ'.?g{Gz?rr   )O   r'   rv   rs   )   r'   ghen7?)   r'   )   r'   gՊ.?)   r'   ggJ	T>)   r'   )   r'   g`P^?)r   zerosrV   r   rP   r   r   r   r   r   r   r   r   r   )rC   r   r   sparsityr}   r   r   r   r   "test_integration_sparse_difference	  s.   

r   c                  C   s^  d} d}ddg}ddg}t  }t|}tddg||gD ]\}}tt||| ||d|d}t|jd |d  t|jd u  t|j	d u  t|j
 t|jd t|jd	k  t|jd td|j  k ogd
k n   t|j}	t|j|	| |}
tt|
dk  tj| }t|}||}t||| |}
tt|
d
k  t||j|jddd qd S )Nrv   rw   r   r*   r   r   T)rr   rs   r}   r~   r   r=      r:   +=r   )r)   r   r   r   r&   r   r   r   r   r   r   r   r   r   r   r/   ru   r   r   r   r   r   r   )rr   rs   r   r   JJ_sparser}   r   r   rq   rt   r   r   r   r   r   r   test_integration_const_jac%  s8   



r   r}   )r   r   r   c                 C   sp   d}d}g d}ddg}| dkr|dkrt jdd d	d
 }t|||||| d}|jdk s/J |jdk s6J d S )Nrw   )     @r   r   r   g    חAr   r#   z)LSODA does not allow for concurrent callsreasonc                 S   sH   |\}}}d| d| |  d| d| |  d| |  d| | gS )N{Gzr   {Gz?    8|Ar   )r   statexr   zr   r   r   fun_robertsonS  s
   

z-test_integration_stiff.<locals>.fun_robertson)rr   rs   r}   i  r   )pytestskipr   r   r   )r}   num_parallel_threadsrr   rs   r   tspanr   r   r   r   r   test_integration_stiffH  s   
r   c           
   	   C   sD
  dd }dd }dd }d|_ dD ]}|d	kr| d
krqttddgddg|||fd}t|jd t|jd jd
 t|jd
 jd
 td|jd d   k oSdk n   td|jd
 d   k ofdk n   t|jd j	d t|jd
 j	d t
||jd d |jd d dsJ t
||jd
 d |jd
 d dsJ d
|_d
|_ttddgddg|||fd}t|jd t|jd jd
 t|jd
 jd td|jd d   k odk n   t|jd j	d t|jd
 j	d t
||jd d |jd d dsJ d|_d|_ttddgddg|||fd}t|jd t|jd jd t|jd
 jd
 td|jd
 d   k oKdk n   t|jd j	d t|jd
 j	d t
||jd
 d |jd
 d dswJ d|_d|_ttddgddg||||fdd}t|jd
 t|jd jd
 t|jd
 jd t|jd jd
 td|jd d   k odk n   td|jd d   k odk n   t|jd j	d t|jd
 j	d t|jd j	d t
||jd d |jd d dsJ t
||jd d |jd d dsJ ttddgddg||dd}t|jd t|jd jd
 td|jd d   k oKdk n   t|jd j	d t
||jd d |jd d dsnJ t
|jd |jd }t|}||}t||dd}	tt
|	dk  t
jt|jd d |jd d dddsJ qd|_d|_dD ]j}|d	kr| d
krÐqttddgddg|||fd}t|jd t|jd jd
 t|jd
 jd
 td|jd d   k odk n   td|jd
 d   k odk n   t|jd j	d t|jd
 j	d t
||jd d |jd d ds:J t
||jd
 d |jd
 d dsPJ d|_d|_ttddgddg|||fd}t|jd t|jd jd
 t|jd
 jd td|jd d   k odk n   t|jd j	d t|jd
 j	d t
||jd d |jd d dsJ d
|_d
|_ttddgddg|||fd}t|jd t|jd jd t|jd
 jd
 td|jd
 d   k odk n   t|jd j	d t|jd
 j	d t
||jd
 d |jd
 d ds"J d|_d|_ttddgddg||||fdd}t|jd
 t|jd jd t|jd
 jd
 t|jd jd
 td|jd
 d   k ojdk n   td|jd d   k o~dk n   t|jd j	d t|jd
 j	d t|jd j	d t
||jd
 d |jd
 d dsJ t
||jd d |jd d dsJ t
|jd |jd }t|}||}t||dd}	tt
|	dk  t
jt|jd
 d |jd
 d dddsJ t
jt|jd d |jd d dddsJ qd S ) Nc                 S   s   |d |d d  S )Nr   r#   gffffff?r   r   r   r   r   event_rational_1d     z%test_events.<locals>.event_rational_1c                 S   s   |d d |d  S )Nr#   g333333?r   r   r   r   r   r   event_rational_2g  r   z%test_events.<locals>.event_rational_2c                 S   re   )Ng@r   r   r   r   r   event_rational_3j  rg   z%test_events.<locals>.event_rational_3Trz   r   r#   r"      rx   ry   )r}   eventsr   g333333@g@g333333@g@)r#   r*   r   r'   )r}   r   r~   r*         @rv   rw   r   gqq?gX<ݚ?)terminalr   r1   r   r   r   sizer   r   r?   r   isclose	directionr   r   r<   r   ru   r   allclose)
r   r   r   r   r}   r   r   r   r   rt   r   r   r   test_eventsc  s`  
&&&
(
((

(

 
((

(
(
((


  r   c                  C   s   dd } dd }| |fS )Nc                 S   s   |d |d  gS )Nr#   r   r   r   r   r   r   rO     r\   z#_get_harmonic_oscillator.<locals>.fc                 S   s   |d S rY   r   r   r   r   r   event  rg   z'_get_harmonic_oscillator.<locals>.eventr   )rO   r   r   r   r   _get_harmonic_oscillator  s   r   n_eventsr>   r7   c                 C   st   t  \}}| |_t|dddg|d}t|jd | ksJ t|jd | ks(J t|jd d d df ddd d S )Nr   r=   r#   r   )r   r   r   )r   r   r   lenr   r   r   )r   rO   r   r   r   r   r   test_event_terminal_integer#  s   
$r   c                  C   s   t  \} }| dddgf}d |_t|d|i}d|_t|d|i}t|j|j d}d|_tjt|d t|d|i W d    n1 sEw   Y  d|_tjt|d t|d|i W d    d S 1 sgw   Y  d S )	Nr   r#   r   r   zThe `terminal` attribute...r'   matchg      @)r   r   r   r   r   r   r	   
ValueError)rO   r   argsr   refmessager   r   r   test_event_terminal_iv-  s    
"r   c                 C   s  d}d}ddg}t tttttfD ]}|tu r| dkrqddgddgfD ]}tt|||d||d	d
}t|j	d |d  t|j	d |d  t
ttt|j	dk t
|jd u  t
|j t|jd t|j	}t|j|||}t
t|dk  tj| }	t|	}
||	}t||
||}t
t|dk  t||j	|jddd tt|t|d ||d dd |tur|t|d ||d ||dd}| }| }t|jd t
d|v  tt|j q#qd S )Nrv   rw   rx   ry   r#   r"   r{         ?T)rr   max_steprs   r}   r~   r   r'   g	     ?r   r   )r   g#B;)rr   rs   r   failedzstep size is less)r   r   r   r   r   r   r   r1   r   r   r   r   r   rm   diffr   r   r   r<   ru   r   r   r   r   assert_raisesr   stepRuntimeError)r   rr   rs   r   r}   r   r   rq   rt   r   r   r   solverr   r   r   r   test_max_step@  sR   
 



r   c                 C   s  d}d}ddg}d}t tttttfD ]}|tu r| dkrqddgddgfD ]}tt|||d	||d
|d	}t|j	d |d  t|j	d |d  t
|t|j	d d  t|jd u  t|j t|jd t|j	}t|j|||}	tt|	dk  tj| }
t|
}||
}t||||}	tt|	dk  t
||j	|jddd tt|t|d ||d dd tt|t|d ||d dd q%qd S )Nrv   rw   rx   ry   皙?r#   r"   r{   r   T)rr   r   rs   r}   r~   
first_stepr   r'   r   r   )r   )r   r   r   r   r   r   r   r1   r   r   r   r   rm   r   r   r   r   r<   ru   r   r   r   r   r   r   )r   rr   rs   r   r   r}   r   r   rq   rt   r   r   r   r   r   r   test_first_stepl  sF   




r   c               
   C   sl  d} d}ddg}ddgddgfD ]E}t |d |d d	}tt||| ||d
}t|j| t|jd u  t|j t|j	d t
|j}t|j|| |}tt |dk  qg d}ttddg|| ||d
}t|j| t|jd u  t|j t|j	d t
|j}t|j|| |}tt |dk  g d}ttddg|| ||d
}t|j| t|jd u  t|j t|j	d g d}ttddg|| ||d
}t|j| t|jd u  t|j t|j	d t
|j}t|j|| |}tt |dk  g d}ttddg|| ||d
}t|j| t|jd u  t|j t|j	d ddg}ttttddg|| ||d
 d S )Nrv   rw   rx   ry   r"   r{   r#   r   r:   rr   rs   t_eval)r"   
ףp=
@   r   Q @r{   )r"   (\@r>         ?皙?)\(?r#   )r   r   r   r   )r   r>   r   r   r   r7   ri   )r   r   r   r1   r   r   r   r   r   r   r<   ru   r   r   r   r   )rr   rs   r   r   r   r   rq   rt   r   r   r   test_t_eval  sr   








r   c            	   	   C   s   d} d}ddg}ddg}t |d |d d	}tt||| ||d
}tt||| ||dd}t|j| t|jd u  t|j t|j	d t|j|j t|j
|j
 t|jd u  t|j t|j	d t|j}t|j
|| |}tt |dk  d S )Nrv   rw   rx   ry   r"   r{   r   r#   r:   r   T)rr   rs   r   r~   )r   r   r   r1   r   r   r   r   r   r   r   r<   ru   r   )	rr   rs   r   r   r   r   res_drq   rt   r   r   r   test_t_eval_dense_output  s.   


r   c            	      C   s   dd } d| _ d}d}ddg}dd	g}td
d	d}dD ]a}t }|td tt||||||| td	}W d    n1 s?w   Y  |j	sIJ |j
dksPJ |jdksWJ |js]|jr_J t|jdkshJ |jd jdksrJ |jd d dks}J qd S )Nc                 S   re   )Nr   r   r   r   r   r   early_event  rg   z,test_t_eval_early_event.<locals>.early_eventTrv   rw   rx   ry   r"   r{   r      rz   r|   )rr   rs   r}   r   r   r   zA termination event occurred.r#   r   r   )r   r   r   r   r   r   r   r1   r8   r   r   r   r   r   r   r   r   )	r   rr   rs   r   r   r   r}   r   r   r   r   r   test_t_eval_early_event  s2   
r   c                 C   s$  | dkr	t d dd }d}d}dg}dd	g}d}tt||d
d||d||td}t|jd |d  t|jd |d  t|t	|jd |d   |j
sQJ t|jd t|j}t|j|||}	t|	d tj| }
t|
}||
}t||||}	t|	d t||j|jddd d S )Nr#   -LSODA does not allow for concurrent executionc                 S   s   |d d S )Nr   gOne.>r   r   r   r   r   event_lsoda  rd   z2test_event_dense_output_LSODA.<locals>.event_lsodarv   rw   rh   r6   r*   r   T)r}   r~   r   r   r   rr   rs   r   r   r'   r"   r   r   )r   r   r   rc   rf   r   r   r   r   rm   r   r   rk   ru   r   r   r   r   )r   r   rr   rs   r   r   r   r   rq   rt   r   r   r   r   r   r   test_event_dense_output_LSODA	  sF   






r   c                  C   s`   dD ]+} t dd ddgddg| dd}t|dddg t|g d	g d
g dg qd S )Nrz   c                 S   rW   r   r   r   r   r   r   <lambda>8      z%test_no_integration.<locals>.<lambda>r7   r*   r>   Tr}   r~   )r7   r"   ri   r*   r*   r*   )r>   r>   r>   )r   r   r   )r}   r   r   r   r   test_no_integration6  s   "r   c                  C   s   t tttttfD ]^} | dd dddgd}|  t|jd |	 }t|dddg t|g dg dg dg | d	d dg t
j}|  t|jd |	 }t|d
g  t|g dt
d qd S )Nc                 S   rW   r   r   r   r   r   r   r   @  r   z+test_no_integration_class.<locals>.<lambda>        g      $@finished)r   r#   r*   r:   r:   r:   )r   r   r   c                 S   rW   r   r   r   r   r   r   r   G  r         Y@r   r>   )r   r   r   r   r   r   r   r   r   r~   r   infrB   )r}   r   r   r   r   r   test_no_integration_class>  s   r  c               	   C   s   dd } t d}dD ]&}tt| ddg||dd}t|dt d t|g d	t d
 qdD ]'}tt| dt jg||dd}t|dt d t|g d	t d
 q4d S )Nc                 S   s
   t dS )Nr   )r   r   r   r   r   r   r   P  r!   ztest_empty.<locals>.funr   rz   r   r:   Tr   )r#   r*   r>   r  )r   r   r   r   r   r   r  )r   r   r}   r   r   r   r   
test_emptyO  s   
r  c                  C   s   t ddtddg} t| dddg t| g dg dg dg t ddtg } t| dtd t| g dtd d S )	Nr   r#   r*   r   )r#   r   r*   )r#   r#   r#   r   r  )r   r   r%   r   rB   )r   r   r   r   test_ConstantDenseOutputb  s   r  c                  C   s  ddg} t tttttfD ]}|td| tj}t	|j
d t	|jd t	|jtj t	|jd t	|jd t	|j|  t|jd u  |tur[t|jdk t|jdk t	|jd nt	|jd t	|jd t	|jd tt|j | }t	|jd t	|d  t	|j
d t	|jtj t	|jd t|jdk ttt|j|   t|jdk t|jdk t|jdk t|jdk | }t|d| ddd	 qd S )
Nrx   ry   r"   r*   runningr#   r   r   r   )r   r   r   r   r   r   r1   r   r  r   rC   r   t_boundr   r   r   r   	step_sizer   r   r   r   r   r~   r   r   equalr   )r   clsr   r   r   r   r   r   test_classesl  sB   
r  c                  C   s8  t jg dtd} t| d | d t dg}t| d | d t dg}t| ||g}t|ddg t|ddg t|ddg t|ddg t|ddg t|d	dg t|g d
t g dg t g d} t| d | d t dg}t| d | d t dg}t| ||g}t|ddg t|ddg t|ddg t|ddg t|ddg t|ddg t|ddg t|g dt g dg t ddg} tddt dg}t| |g}t|ddg t|ddg t|ddg t|g dt g dg d S )N)r   r*   r"   dtyper   r#   r'   r*   r>   r"   ri   )	r   ri   r6   r   g      @g      @r"   g      @r*   )	r'   r#   r'   r'   r#   r#   r#   r#   r'   )r:   r7      r:   r7   r  )   r(   r:   r  ri   r#   r7   )r'   r#   r'   r#   r'   r#   r'   )r*   r#   r   r  )r   r%   floatr   r   r   )tss1s2r   sr   r   r   test_OdeSolution  sD   "r  c            	      C   s   dd } dd }d}t g d}|||}d}| || }t| ||||d \}}t||ddd t| |||||\}}t||ddd d S )	Nc                 S   sd   t d|d  d|d  |d   d|d  d|d  |d   d|d d   d|d d  gS )Nr   r   r   r#   r*   r   r   r3   r   r   r   r   r     s
   .ztest_num_jac.<locals>.func                 S   sV   t dd|d  d|d  gdd|d  d|d   d|d  gdd|d  dggS )	Nr   r   r*   r#   r   g     g    8Ar   r$   r   r   r   r   r     s
   $ztest_num_jac.<locals>.jacr#   )r#   r   r   h㈵>r   )r   r%   ravelr   r   )	r   r   r   r   J_true	thresholdrO   J_numfactorr   r   r   test_num_jac  s   
r   c               	   C   s,  dd } dd }t jd d}t j|}||}t|}| d|d d d f  }t| d| |dd ||fd\}}t| d| |dd \}	}
t|	| d	d
d t|
|d	d
d t jj	dd	|d}t| d| |d|||fd\}}t| d| |d|\}	}
t|	| d	d
d t|
|d	d
d d S )Nc                 S   sT   |dd  d |d d d  }t |jd }t |d| ft d| |f S )Nr#   r>   r'   r*   )r   r   r?   r+   )r   r   rt   r   r   r   r   r     s    $z test_num_jac_sparse.<locals>.func                 S   sb   t j| | ftd}d|d< d|d< td| d D ]}d|||d |d f< qd|d< d|d< |S )Nr  r#   )r   r   r   r#   r*   )r'   r'   )r'   r6   )r   r   intrange)rC   ArU   r   r   r   	structure  s   z&test_num_jac_sparse.<locals>.structurer   r   :0yE>)r   -q=r   r   )r   )
r   randomseedrandnr
   r  r   r   toarrayuniform)r   r%  rC   r   r$  groupsrO   J_num_sparsefactor_sparseJ_num_densefactor_denser  r   r   r   test_num_jac_sparse  s2   



r2  c                  C   s:  dd } dd }dd }dd }d	d
 }d|_ d|_ d|_d}d}d}d}t| | d| | t| |   }	dd|	g}
d| }t| d|g|
|||gd|||fd|ddd
}|jd }|jd }|jd }t|dtj dtj g t|dtj dtj g t||g td|d d}|	|}t|d t
|| ddd t|d t||  ddd t|d dd|	 |	 t| |  d  ddd |	|}|	|}|	|}t|d t|d dd  t|d t|d  t|d t|d  t|d t|d dd  t|d |g d S )!Nc                 S   s*   |\}}}| | || || d|  gS )Nr#   r   r   womegarD   zfinalr   r   r   r   r   r   sys3  s   
 ztest_args.<locals>.sys3c           	   
   S   s>   |\}}}t d| dg|ddgdd|dd|   gg}|S )Nr   r#   r*   r$   )	r   r4  r5  rD   r6  r   r   r   r   r   r   r   sys3_jac  s   
ztest_args.<locals>.sys3_jacc                 S   s   |\}}}|S r   r   r3  r   r   r   sys3_x0decreasing     
z$test_args.<locals>.sys3_x0decreasingc                 S   s   |\}}}|S r   r   r3  r   r   r   sys3_y0increasing  r:  z$test_args.<locals>.sys3_y0increasingc                 S   s   |\}}}|| S r   r   r3  r   r   r   sys3_zfinal   s   
ztest_args.<locals>.sys3_zfinalr'   r#   Tr*   r7   r"   gGz?r   r   g|=gvIh%<=)r   r~   r   r}   r   rr   rs   r   r   g      ?g      ?   g&.>r'  r   gvIh%,=r   )r   r   r   r_   r   r   r   pir   r   r,   r-   r   rR   )r7  r8  r9  r;  r<  r5  rD   tfinalr6  z0w0tendr   
x0events_t
y0events_tzfinalevents_tr   r4  x0eventsy0eventszfinaleventsr   r   r   	test_args  sT   ,





 *


rI  c               	   C   s   dd } t | dddgddgd}ttj|jd d df td }tjt	d	d
) t | dddgddgd}ttj|jd d df td }W d    n1 sXw   Y  ||k scJ d S )Nc                 S   s   |d |d fS )Nr   r#   r   r   r   r   r   rO   ]  s   ztest_array_rtol.<locals>.fr!        ?r   r   r'   r#   zAt least one element...r   gؗҜ<)
r   r   rm   rn   ro   r   r_   r   warnsr   )rO   r   err1err2r   r   r   test_array_rtolY  s   *,rN  rz   c                 C   s`   | dkr|dkrt jdd ttddgtd| d}t|j t|j	d t
|jd	d
d d S )Nr   r#   r   r   r   r:   r>   r}   rJ  r   r   )r   r   r   r    r   onesr   r   r   r   r   r   )r}   r   resultr   r   r   test_integration_zero_rhsm  s   
rR  c                  C   sx   dd } d}t jt|d t| ddgdd W d    n1 s!w   Y  t| ddgd	d}t|jd
 td d S )Nc                 S   s   || S r   r   )r   r   ar   r   r   fun_with_argy  rg   z,test_args_single_value.<locals>.fun_with_argz#Supplied 'args' cannot be unpacked.r   )r   r   r#   r'   )r   )r'   r   r'   g)r   r	   	TypeErrorr   r   r   r   r_   )rT  r   r   r   r   r   test_args_single_valuex  s   rW  f0_fillc                 C   sP   d}t jt|d ttddgtd|  W d    d S 1 s!w   Y  d S )Nz8All components of the initial state `y0` must be finite.r   r   r:   r>   )r   r	   r   r   r    r   full)rX  msgr   r   r   test_initial_state_finiteness  s   "r[  )r   r   r   r   r   c                 C   s>   dd }t |dtdg| d}|jsJ t|jd d d S )Nc                 S   s   d| S rb   r   r   r   r   r   rO     rg   ztest_zero_interval.<locals>.f)r   r   rJ  rO  rU  )r   r   r%   r   r   r   r}   rO   r   r   r   r   test_zero_interval  s   
r]  c                    s:   d  fdd}t |d ftdg| d}|jsJ dS )zRegression test for gh-17341g-C6?c                    s   |  krt dd| S )N'Function was evaluated outside intervalr*   )r   r   SMALLr   r   rO     s   z/test_tbound_respected_small_interval.<locals>.fr   r#   rO  Nr   r   r%   r   r\  r   r_  r   $test_tbound_respected_small_interval  s   rb  c              
      sD   dd   fdd}t |dtddgdd	d
ddd}|js J d
S )zRegression test for gh-8848c                 S   s   d|  d|  d| d    S )Nr:   rh   r*   r   )rr   r   r   V  s   z0test_tbound_respected_larger_interval.<locals>.Vc                    sl   | dk s| dkrt d|d }|d }t| }|| }d| d | | d| |   }t||gS )Nr*   r^  r   r#   g       gɿ)r   r   r_   r%   )r   pPQrd  dPdrdQdrre  r   r   func  s   
$z3test_tbound_respected_larger_interval.<locals>.func)rf  r*   r#   rc  gQ?FNr&  r  )r   r   r   r   rs   rr   ra  )r}   rm  rQ  r   rl  r   %test_tbound_respected_larger_interval  s   
rn  c                    s0   dd  d
 fdd	}|ddd}|j sJ d	S )zRegression test for gh-9198c                 S   s"   | dkrt dtg d}|S )N   zCalled outside interval)ges='?gRr<>r   r   )r   r   r%   )r   r   yprimer   r   r   reactions_func  s   z8test_tbound_respected_oscillator.<locals>.reactions_funcr:   逖 c                    s4   t g d}d}d}t ||f| d|| dS )N)gLOѧ`@gCYZa@r  r   r  g      i@T)r~   r   )r   r%   r   copy)t_endn_timepointsshortest_delay_line
init_statet0t1rq  r   r   run_sim2  s   z2test_tbound_respected_oscillator.<locals>.run_sim2i  r=   N)r:   rr  )r   )r}   r{  rQ  r   rz  r    test_tbound_respected_oscillator  s   		r|  c            	      C   s   d} d}t ddg}dD ]E\}}tjtjtjddfD ]6}tt|||t jt||t 	|| || |
}|d }tt||||t||t 	|| || |
}t
|| qqd	S )
z0Verify that select_inital_step respects max_steprv   rw   rx   ry   ))r"   r{   )r"   r#   r>   r#   r*   N)r   r%   r   error_estimator_orderr   r   r   r1   r  signr   )	rr   rs   r   rx  r	  method_orderstep_no_maxr   step_with_maxr   r   r   test_inital_maxstep  s8   

r  )\	itertoolsr   numpy.testingr   r   r   r   r   r   r   r	   r   numpyr   scipy.optimize._numdiffr
   scipy.integrater   r   r   r   r   r   r   r   scipy.integrate._ivp.commonr   r   scipy.integrate._ivp.baser   scipy.sparser   r   r    r&   r)   r/   r1   r4   r8   r9   r<   rP   rV   rX   r[   r]   ra   rc   rf   rk   ru   markthread_unsafer   r   	fail_slowr   r   slowparametrizer   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r2  rI  rN  rR  rW  nanr  r[  r]  rb  rn  r|  r  r   r   r   r   <module>   s     $ 
@

,
# 7

	,'>
-
&+-S







