
    S_f                     ,   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 d d	lmZ d d
lmZmZ d Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d  Z5d! Z6e	jn                  jp                  e	jn                  js                  d"g d#      d$               Z:d% Z;d& Z<e	jn                  js                  d'd(d)g      d*        Z=d+ Z>d, Z?d- Z@d. ZAd/ ZBd0 ZCd1 ZDd2 ZEd3 ZFd4 ZGd5 ZHd6 ZId7 ZJd8 ZKd9 ZLd: ZMd; ZNe	jn                  js                  d"g d<      d=        ZOd> ZPe	jn                  js                  d?ej                  ej                  g      d@        ZSy)A    )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)ConstantDenseOutput)
coo_matrix
csc_matrixc                 ,    t        j                  |      S N)np
zeros_liketys     Clib/python3.12/site-packages/scipy/integrate/_ivp/tests/test_ivp.pyfun_zeror       s    ==    c                 \    t        j                  |d    d|d   z  z
  |d   |d   z   g      S )Nr         r   arrayr   s     r   
fun_linearr'      s5    88adUQ1X%qtad{344r!   c                  8    t        j                  ddgddgg      S )Nr$   r%    r!   r   
jac_linearr,      s    88b"X1v&''r!   c                     t        j                  dt        j                  d| z        z  dt        j                  d| z        z  t        j                  d| z        z   f      S )Nr*      )r   vstacksincosr   s    r   
sol_linearr3      sP    99b266!a%=("&&Q-'"&&Q-79 : :r!   c                 ~    t        j                  |d   | z  |d   |d   d|d   z  z   dz
  z  | |d   dz
  z  z  g      S Nr$   r   r.   r%   r   s     r   fun_rationalr6       sW    88QqTAXqTQqTA!H_q01Q!A$(^DF G Gr!   c                 ~    t        j                  |d   | z  |d   |d   d|d   z  z   dz
  z  | |d   dz
  z  z  f      S r5   r   r/   r   s     r   fun_rational_vectorizedr9   %   sW    99adQhdadQ1Xo12a1Q4!8nEG H Hr!   c                     t        j                  dd| z  gd|d   dz  z  | |d   dz
  dz  z  z  |d   d|d   z  z   dz
  | |d   dz
  z  z  gg      S Nr   r$   r.      r%   r   s     r   jac_rationalr>   *   sv    88	
AE
	adai1!qQ.	/
A$QqT/A
!qtax.	1	3  r!   c                     t        dd| z  gd|d   dz  z  | |d   dz
  dz  z  z  |d   d|d   z  z   dz
  | |d   dz
  z  z  gg      S r;   )r   r   s     r   jac_rational_sparser@   2   sr    	
AE
	adai1!qQ.	/
A$QqT/A
!qtax.	1	3  r!   c                 T    t        j                  | | dz   z  d| z  | dz   dz  z  f      S )N
   r.   )r   asarrayr2   s    r   sol_rationalrD   :   s/    ::qAF|R!Vq2v!m%;<==r!   c                 "   |j                   d   dz  }d}d}| dk  rdnd}t        j                  |d||d   f      }d|z  }t        j                  |      dz   }d||z  dz
  dz  z  |dz  z  }||z  dz
  dz  |dz  z  }	d|z  dz   }
d|z  dz
  }d|z  }d|z  dz   }t        j                  d|z        }|||
   ||   z
  z  d|z  z  |	||   d||   z  z
  ||
   z   z  |dz  z  z   |||   z  ||   z  z
  |d d d<   | ||   z  ||   z  |dd d<   |S )	Nr   r.   d   r=   r#   r<   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fs                  r   fun_medazkorY   >   sw   	
aAA	AAv!1C
		31ae$%A	AA
		!qAQq  16)EEAI!a1f$DUQYFUQYFUF
a%!)C
QAqy1V9,-Q7ai!ai-/!F);<qAvEF!F)maf$%AccF b1S6kAfI%AaddGHr!   c                    g }g }t        j                  |       dz  }|j                  |dd         |j                  |dd  dz
         |j                  |       |j                  |       |j                  |       |j                  |dz          |j                  |d d        |j                  |d d dz          t        j                  |       dz  dz   }|j                  |       |j                  |       |j                  |       |j                  |dz
         t        j                  |      }t        j                  |      }t	        t        j
                  |      ||ff      S )Nr.   r$   r)   )r   rJ   appendrI   r   	ones_like)rL   colsrowsis       r   medazko_sparsityr`   Y   s   DD
		!qAKK!"KK!"	KKNKKNKKNKKAKK#2KK#2

		!q1AKKNKKNKKNKKA99T?D99T?Dr||D)D$<899r!   c                     | S r   r+   r   s     r   fun_complexrb   y   s	    2Ir!   c                 H    t        j                  |j                  d          S Nr   )r   eyerH   r   s     r   jac_complexrf   }   s    FF1771:r!   c                 ,    t        t        | |            S r   )r   rf   r   s     r   jac_complex_sparserh      s    k!Q'((r!   c                 V    dt        j                  |        z  }|j                  d      S )N      ?      ?)r$   r)   )r   expreshaper   s     r   sol_complexrm      s%    	RVVQBZA99Wr!   c                     || dz
  z  S Nr.   r+   r   s     r   fun_event_dense_output_LSODArp      s    A;r!   c                     | dz
  S ro   r+   r   s     r   jac_event_dense_output_LSODArr      s    q5Lr!   c                 v    t        j                  | dz  dz  d| z  z
  t        j                  d      z   dz
        S )Nr.   皙?   )r   rk   logr2   s    r   sol_event_dense_output_LSODArw      s4    66!q&1*q1u$rvvd|3a788r!   c                     | |z
  ||t        j                  |      z  z   z  }t         j                  j                  |d      t        j                  |j
                  d         z  S )Nr   )axis)r   abslinalgnormsqrtrH   )r   y_truertolatoles        r   compute_errorr      sO    	
VtbffVn445A99>>!!>$rwwqwwqz':::r!   c                     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               5 }|j                  t        d       t        |||| ||d||	      }	d d d        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 r-t        |	j"                  d       t        |	j$                  d       nFt        d|	j"                  cxk  xr dk  nc        t        d|	j$                  cxk  xr dk  nc        t'        |	j                        }
t)        |	j*                  |
| |      }t        t-        j.                  |dk               t-        j0                  | }t'        |      }|	j3                  |      }t)        ||| |      }t        t-        j.                  |dk               |d   |d   z   dz  }t'        |      }|	j3                  |      }t)        ||| |      }t        t-        j.                  |dk               t5        |	j3                  |	j                        |	j*                  dd        y # 1 sw Y   fxY w)NMbP?ư>UUUUUU?qq?FTr   r   r   r   r   r   r#   	   r$   AThe following arguments have no effect for a chosen solver: `jac`)r   r   methoddense_outputjac
vectorizedr   r   2   (   )r   r   r   r   rG   rB   r)   r.   V瞯<r   r   )r   r>   r@   r9   r6   r	   filterUserWarningr   r   r   r   t_eventsy_eventssuccessstatusnfevnjevnlurD   r   r   r   alllinspacesolr   )r   r   y0r   r   t_spanr   funsupresr~   r   tcyc_trueycs                  r   test_integrationr      sw   DD
sB+2DM?VaV<!45	,7 8G'
FFC )CC  	<CJJ{'( C$!%f4 #
<C		< 	SUU1Xvay)$%$%SZZ#X CHHrM"CHHrM"881%!$A$1$%A$"$%cee$#%%t4q1u[[&!r"WWR["gtT2q1uQi&*$)r"WWR["gtT2q1uEFq8G	< 	<s   +KK'	c                     d} d}dg}ddg}t        j                  |d   |d         }t        g dd t        t        g      D ]  \  }}t               5 }|j                  t        d       t        t        |||d| ||	      }d d d        t        j                  d   |d          t        |j                  d u        t        |j                  d u        t        |j                         t        |j                   d       |d
k(  r|j"                  dk  sJ |j"                  dk  sJ |dk(  r't        |j$                  d       |j&                  dk  s$J |j$                  dk(  sJ |j&                  dk(  sJ t)        |j                        }	t+        |j,                  |	| |      }
t        j.                  |
dk        sJ t)        |      }|j1                  |      }t+        ||| |      }
t        j.                  |
dk        rJ  y # 1 sw Y   xY w)Nr   r   rj   r   r$   )r   r   r   r   r   T)r   r   r   r   r   r   #      r   ru   r#   )r   r   r   rf   rh   r	   r   r   r   rb   r   r   r   r   r   r   r   r   r   r   rm   r   r   r   r   )r   r   r   r   r   r   r   r   r   r~   r   r   r   s                r   test_integration_complexr      s   DD
BVF	VAYq		*B@ $k3EFH #  	NCJJ{'( KF)-DtNC		N 	SUU1Xvay)$%$%SZZ#X88b= =88b= =U?1%77Q;;88q= =77a<<SUU##%%t4vva!e}}b/WWR["gtT2vva!e}}G#	N 	Ns   .HH	c                  :   d} ddg}t        j                  d| z        }d|dd d<   t        |       }dD ]d  }t        t        ||||      }t        |j                  d   |d          t        |j                  d u        t        |j                  d u        t        |j                         t        |j                  d       t        |j                  d   d	d
       t        |j                  d   dd       t        |j                  d   dd
       t        |j                  d   dd       t        |j                  d   dd
       t        |j                  d   dd       t        |j                  d   dd       t        |j                  d   dd
       g y )N   r      r.   r$   )r   r   )r   jac_sparsity)N   r)   gݨ'.?g{Gz?r   )O   r)   r   r   )   r)   ghen7?)   r)   )   r)   gՊ.?)   r)   ggJ	T>)   r)   )   r)   g`P^?)r   zerosr`   r   rY   r   r   r   r   r   r   r   r   r   )rL   r   r   sparsityr   r   s         r   "test_integration_sparse_differencer     sR   AWF	!a%BBqt!tH"H" >VR%-/ 	SUU1Xvay)$%$%SZZ#f{>fqt4g$?g5gTBg4@g5g	=#>r!   c                     d} d}ddg}ddg}t               }t        |      }t        ddg||g      D ]  \  }}t        t        ||| ||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                  cxk  xr d
k  nc        t        |j                        }	t!        |j"                  |	| |      }
t        t%        j&                  |
dk               t%        j(                  | }t        |      }|j+                  |      }t!        ||| |      }
t        t%        j&                  |
d
k               t-        |j+                  |j                        |j"                  dd        y )Nr   r   r   r.   r   r   T)r   r   r   r   r   rF      rB   +=r   )r,   r   r   r   r'   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   r   r   r   r   )r   r   r   r   JJ_sparser   r   r   r~   r   r   r   r   s                 r   test_integration_const_jacr   "  s   DD
QBVFA!}H/!X? G
FBT%DcCSUU1Xvay)$%$%SZZ#3SXXq!CGG b !CEE"#%%t4q2v[[&!R.WWR["gtT2q2vEF1Gr!   r   )r   r   r   c                     d}d}g d}ddg}d }t        ||||||       }|j                  dk  sJ |j                  dk  sJ y )	Nr   )     @r   r   r   g    חAc                 f    |\  }}}d|z  d|z  |z  z   d|z  d|z  |z  z
  d|z  |z  z
  d|z  |z  gS )N{Gzr   {Gz?    8|Ar+   )r   statexr   zs        r   fun_robertsonz-test_integration_stiff.<locals>.fun_robertsonM  sW    1aAIa!#1HsQw{"S1Wq[0!GaK
 	
r!   )r   r   r   i  r   )r   r   r   )r   r   r   r   tspanr   r   s          r   test_integration_stiffr   E  s\     DD	BHE
 M5"4f.C 88d??88c>>r!   c            
         d } d }d }d|_         dD ]q  }t        t        ddgdd	g|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgdd	g|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgdd	g|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   ||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        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ t        t        ddgdd	g|| d      }t        |j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                  |j                  d   |j                  d         }t        |      }|j!                  |      }t#        ||dd      }t        t        j$                  |dk               t        j&                  t        |j
                  d   d         |j                  d   d   dd      rrJ  d| _        d|_        dD ]  }t        t        ddgddg|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgddg|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgddg|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   ||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        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   ||j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ t        j                  |j                  d   |j                  d         }t        |      }|j!                  |      }t#        ||dd      }t        t        j$                  |dk               t        j&                  t        |j
                  d   d         |j                  d   d   dd      sJ t        j&                  t        |j
                  d   d         |j                  d   d   dd      rJ  y )Nc                     |d   |d   dz  z
  S )Nr   r$   gffffff?r+   r   s     r   event_rational_1z%test_events.<locals>.event_rational_1^  s    tadck!!r!   c                     |d   dz  |d   z
  S )Nr$   g333333?r   r+   r   s     r   event_rational_2z%test_events.<locals>.event_rational_2a  s    ts{QqT!!r!   c                     | dz
  S )Ng@r+   r   s     r   event_rational_3z%test_events.<locals>.event_rational_3d  s    3wr!   Tr   r#      r   r   )r   eventsr   r$   g333333@g@g333333@g@)r$   r.   r   r)   )r   r   r   r.         @r   r   r   gqq?gX<ݚ?)terminalr   r6   r   r   r   sizer   r   rH   r   isclose	directionr   r   rD   r   r   r   allclose)	r   r   r   r   r   r   r   r   r   s	            r   test_eventsr   ]  sm   "" !%E Q1q!fsCj 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**F3S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I &'"%&"q!fuenV 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**F3S\\!_**D1zzS\\!_Q/a1CDaI 	I I &("%'"q!fuenV 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI 	I I &'"%&"q!fuenV 02B 0 2@DF 	SZZ#S\\!_))1-S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**F3S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I q!fuenV/dDSZZ#S\\!_))1-cll1oa(.3./S\\!_**F3zzS\\!_Q/a1CDaI 	I I [[q3559-r"WWR["gtT2q1u {{<Q(:;S\\!_Q=O $41 	1 1aQ1h "#!"E K1q!fsEl6 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**F3S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I &("%'"q!fsEl6 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**F3S\\!_**D1zzS\\!_Q/a1CDaI 	I I &'"%&"q!fsEl6 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI 	I I &'"%&"q!fsEl6 02B 0 2@DF 	SZZ#S\\!_))1-S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**D1S\\!_**F3S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I [[rCEE!H-r"WWR["gtT2q1u{{<Q(:;S\\!_Q=O $41 	1 1{{<Q(:;S\\!_Q=O $41 	1 1UK1r!   c                      d } d }| |fS )Nc                     |d   |d    gS )Nr$   r   r+   r   s     r   rX   z#_get_harmonic_oscillator.<locals>.f  s    !qte}r!   c                     |d   S rd   r+   r   s     r   eventz'_get_harmonic_oscillator.<locals>.event  s    tr!   r+   )rX   r   s     r   _get_harmonic_oscillatorr     s     e8Or!   n_eventsrG   r=   c                    t               \  }}| |_        t        |dddg|      }t        |j                  d         | k(  sJ t        |j
                  d         | k(  sJ t        |j
                  d   d d df   dd       y )Nr   rF   r$   r   )r   r   r   )r   r   r   lenr   r   r   )r   rX   r   r   s       r   test_event_terminal_integerr     s|    ')HAuEN
Ax!Q
6Cs||A8+++s||A8+++CLLOAqD)159r!   c                     t               \  } }| dddgf}d |_        t        |d|i}d|_        t        |d|i}t        |j                  |j                         d}d|_        t        j                  t        |      5  t        |d|i d d d        d|_        t        j                  t        |      5  t        |d|i d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)	Nr   r$   r   r   zThe `terminal` attribute...r)   matchg      @)r   r   r   r   r   pytestr
   
ValueError)rX   r   argsr   refmessages         r   test_event_terminal_ivr   !  s    ')HAux!Q DEN
T
(%
(CEN
T
(%
(CCLL#,,/+GEN	z	1 '4&&'EN	z	1 '4&&' '' '' 's   =C3CCCc                     d} d}ddg}t         t        t        t        t        t
        fD ]a  }ddgddgfD ]R  }t        t        ||| d||d	
      }t        |j                  d   |d          t        |j                  d   |d          t        t        j                  t        j                  t        j                  |j                              dk               t        |j                  d u        t        |j                          t        |j"                  d       t%        |j                        }t'        |j(                  || |      }t        t        j                  |dk               t        j*                  | }t%        |      }	|j-                  |      }
t'        |
|	| |      }t        t        j                  |dk               t/        |j-                  |j                        |j(                  dd       t1        t2        |t        |d   ||d   d       |t
        us |t        |d   ||d   | |d      }|j5                         }t        |j"                  d       t        d|v        t1        t6        |j4                         U d y )Nr   r   r   r   r#   r   r$         ?T)r   max_stepr   r   r   r   r)   g	     ?r   r   )r   g#B;)r   r   r   failedzstep size is less)r   r   r   r   r   r   r   r6   r   r   r   r   r   rz   diffr   r   r   rD   r   r   r   r   r   assert_raisesr   stepRuntimeError)r   r   r   r   r   r   r~   r   r   r   r   solverr   s                r   test_max_stepr   4  s   DD
sBvuc59 #91v1v& "	9FL&"4%(tF)-/C q6!9-rF2J/BFF266"''#%%.1[@ABCLLD()CKK Q'!#%%(FceeVT48ABFF1q5M"f%B"2&GBb'46ABFF1q5M"CGGCEENCEEEJ*flF1Ir )b2 U"fQiVAY%)uF ++-V]]H5+w67lFKK8E"	9#9r!   c                  @   d} d}ddg}d}t         t        t        t        t        t
        fD ]  }ddgddgfD ]  }t        t        ||| d	||d
|	      }t        |j                  d   |d          t        |j                  d   |d          t        |t        j                  |j                  d   dz
               t        |j                  d u        t        |j                         t        |j                   d       t#        |j                        }t%        |j&                  || |      }t        t        j(                  |dk               t        j*                  | }	t#        |	      }
|j-                  |	      }t%        ||
| |      }t        t        j(                  |dk               t        |j-                  |j                        |j&                  dd       t/        t0        |t        |d   ||d   d       t/        t0        |t        |d   ||d   d         y )Nr   r   r   r   皙?r#   r   r$   r   T)r   r   r   r   r   
first_stepr   r)   r   r   )r   )r   r   r   r   r   r   r   r6   r   r   r   r   rz   r   r   r   r   rD   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r~   r   r   r   r   s               r   test_first_stepr   ^  s   DD
sBJvuc59 31v1v& 	3FL&"4%(tF)-*FC q6!9-rF2J/JsuuQx!|(<=CLLD()CKK Q'!#%%(FceeVT48ABFF1q5M"f%B"2&GBb'46ABFF1q5M"CGGCEENCEEEJ*flF1Ir )4*flF1Ir )37	33r!   c            
         d} d}ddg}ddgddgfD ]  }t        j                  |d   |d   d	      }t        t        ||| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       t        |j
                        }t        |j                  || |      }t        t        j                  |dk                g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       t        |j
                        }t        |j                  || |      }t        t        j                  |dk               g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       t        |j
                        }t        |j                  || |      }t        t        j                  |dk               g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       ddg}t        t        t        t        ddg|| ||
       y )Nr   r   r   r   r#   r   r$   r   rB   r   r   t_eval)r#   
ףp=
@   r   Q @r   )r#   (\@rG         ?皙?)\(?r$   )r  r  r   r  )r  rG   r  r	  r
  r=   ru   )r   r   r   r6   r   r   r   r   r   r   rD   r   r   r   r   r   )r   r   r   r   r  r   r~   r   s           r   test_t_evalr    s   DD
sBq6Aq6" VAYq	26fbt$%'SUUF#$%SZZ#cee$#%%t4q1u &F
L1a&"4d!#CCLLD !CKKQ#%% FceeVT40ABFF1q5M,F
L1a&"4d!#CCLLD !CKKQF
L1a&"4d!#CCLLD !CKKQ#%% FceeVT40ABFF1q5M&F
L1a&"4d!#CCLLD !CKKQVF*i1vr$v7r!   c            	         d} d}ddg}ddg}t        j                  |d   |d   d	      }t        t        ||| ||
      }t        t        ||| ||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        j                  |dk               y )Nr   r   r   r   r#   r   r   r$   rB   r  T)r   r   r  r   )r   r   r   r6   r   r   r   r   r   r   r   rD   r   r   )	r   r   r   r   r  r   res_dr~   r   s	            r   test_t_eval_dense_outputr    s(   DD
sBVF[[F1Ir2F
L&"4d!#ClFBT#$8ECLLD !CKKQ  ENNd"#EMMq! #%% FceeVT40ABFF1q5Mr!   c                  @   d } d| _         d}d}ddg}ddg}t        j                  d	dd
      }dD ]  }t               5 }|j	                  t
        d       t        t        ||||||| t        	      }d d d        j                  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  s|j                  rJ t        |j                        dk(  sJ |j                  d   j                   dk(  sJ |j                  d   d   dk(  rJ  y # 1 sw Y   xY w)Nc                     | dz
  S )Nr  r+   r   s     r   early_eventz,test_t_eval_early_event.<locals>.early_event  s    1ur!   Tr   r   r   r   r#   r   r      r   r   )r   r   r   r  r   r   zA termination event occurred.r$   r   r  )r   r   r   r	   r   r   r   r6   r>   r   r   r   r   r   r   r   r   )	r  r   r   r   r   r  r   r   r   s	            r   test_t_eval_early_eventr    s0     KDD
sBVF[[a$FE '  	.CJJ{'( L&"4d#)& ,.C		. {{{{{====zzQ55&&3<< A%%%||A##q(((||Aq!Q&&&'	. 	.s   3DD	c                     d } d}d}dg}ddg}d}t        t        ||dd| |d	||t        
      }t        |j                  d   |d          t        |j                  d   |d          t        |t        j                  |j                  d	   |d   z
               |j                  sJ t        |j                  d       t        |j                        }t        |j                  |||      }t        |d       t        j                  | }	t        |	      }
|j                  |	      }t        ||
||      }t        |d       t        |j                  |j                        |j                  dd       y )Nc                     |d   dz
  S )Nr   gOne.>r+   r   s     r   event_lsodaz2test_event_dense_output_LSODA.<locals>.event_lsoda  s    tg~r!   r   r   rt   r<   r.   r   Tr$   )r   r   r   r   r   r   r   r   r   r)   r#   r   r   )r   rp   rr   r   r   r   r   rz   r   r   rw   r   r   r   r   r   )r  r   r   r   r   r   r   r~   r   r   r   r   s               r   test_event_dense_output_LSODAr    sH    DD
B!WFJ
$
(C q6!9%rF2J'JsuuQx&)'; <=;;;Q)#%%0FceeVT40Aa	f	B*2.G	Bb'4.AaCGGCEENCEEEBr!   c                      dD ]W  } t        d ddgddg| d      }t        |j                  d      ddg       t        |j                  g d      g d	g d
g       Y y )Nr   c                     | S r   r+   r   s     r   <lambda>z%test_no_integration.<locals>.<lambda>$      aR r!   r=   r.   rG   Tr   r   )r=   r#   ru   r.   r.   r.   )rG   rG   rG   )r   r   r   )r   r   s     r   test_no_integrationr  "  s^    E A!Q!Q%D:SWWQZ!Q(SWWY')Y)?@	Ar!   c                  D   t         t        t        t        t        t
        fD ]  }  | d dddgd      }|j                          t        |j                  d       |j                         }t         |d      ddg       t         |g d      g dg dg        | d dg t        j                        }|j                          t        |j                  d       |j                         }t         |d	      g        t         |g d      t        j                  d
              y )Nc                     | S r   r+   r   s     r   r  z+test_no_integration_class.<locals>.<lambda>,  r  r!   g        g      $@finished)r   r$   r.   rB   rB   rB   )r   r   r   c                     | S r   r+   r   s     r   r  z+test_no_integration_class.<locals>.<lambda>3  r  r!   g      Y@r   rG   )r   r   r   r   r   r   r   r   r   r   r   infrK   )r   r   r   s      r   test_no_integration_classr&  *  s    vuc59 7tSk3?V]]J/!!#SXc{+S^lI%>?b"&&9V]]J/!!#SZ$S^RXXf%567r!   c            	      @   d } t        j                  d      }dD ]w  }t        t        | ddg||d      }t	        |j                  d      t        j                  d             t	        |j                  g d      t        j                  d	             y dD ]  }t        t        | dt         j                  g||d      }t	        |j                  d      t        j                  d             t	        |j                  g d      t        j                  d	              y )
Nc                 ,    t        j                  d      S )Nr   )r   r   r   s     r   r   ztest_empty.<locals>.fun<  s    xx~r!   r   r   r   rB   Tr  )r$   r.   rG   r$  )r   r   r   r   r   r   r%  )r   r   r   r   s       r   
test_emptyr)  ;  s     
$BE ; C!R"(.TCSWWR["((4.1SWWY'&)9:	; F ; C!RVVb(.TCSWWR["((4.1SWWY'&)9:	;r!   c                  |   t        ddt        j                  ddg            } t         | d      ddg       t         | g d      g dg dg       t        ddt        j                  g             } t         | d      t        j                  d             t         | g d      t        j                  d             y )	Nr   r$   r.   r  )r$   r  r.   )r$   r$   r$   r  r$  )r   r   r&   r   rK   )r   s    r   test_ConstantDenseOutputr+  N  s    
aBHHaV$4
5CCHq!f%C$y)&<=
aBHHRL
1CCHbhhqk*C$bhhv&67r!   c            	         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rGt!        |j$                  dkD         t!        |j&                  dk\         t        |j(                  d       nBt        |j$                  d       t        |j&                  d       t        |j(                  d       t+        t,        |j.                         |j1                         }t        |j                  d       t        |d        t        |j                  d       t        |j                  t        j                         t        |j                  d       t!        |j                  dkD         t!        t        j2                  t        j4                  |j                  |                     t!        |j"                  dkD         t!        |j$                  dkD         t!        |j&                  dk\         t!        |j(                  dk\         |j/                         }t7         |d      | dd	        y )
Nr   r   r#   r.   runningr$   r   r   r   )r   r   r   r   r   r   r6   r   r%  r   rL   r   t_boundr   r   r   r   	step_sizer   r   r   r   r   r   r   r   equalr   )r   clsr   r   r   s        r   test_classesr2  X  s   
BdFE36 !8\1b"&&1VXXq!V]]I.V^^RVV,V%%q)VXXq!VXXr"  D()eFKK!O$FKK1$%Q'a(a(Q'lF$7$78++-V]]I.Wd#VXXq!V^^RVV,V%%q)1BFF288FHHb1223  1$%a q !

a !!#AQ7C!8r!   c                     t        j                  g dt              } t        | d   | d   t        j                  dg            }t        | d   | d   t        j                  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        j                  g dg             t        j                  g d      } t        | d   | d   t        j                  dg            }t        | d   | d   t        j                  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        j                  g dg             t        j                  ddg      } t        ddt        j                  dg            }t	        | |g      }t         |d      dg       t         |d      dg       t         |d      dg       t         |g d      t        j                  g dg             y )N)r   r.   r#   dtyper   r$   r)   r.   rG   r#   ru   )	r   ru   r<   r  g      @g      @r#   g      @r.   )	r)   r$   r)   r)   r$   r$   r$   r$   r)   )rB   r=      rB   r=   r6  )   r*   rB   r6  ru   r$   r=   )r)   r$   r)   r$   r)   r$   r)   )r.   r$   r   r"  )r   r&   floatr   r   r   )tss1s2r   ss        r   test_OdeSolutionr?  ~  sU   	)5	)B	RUBqE288RD>	:B	RUBqE288QC=	9B
b2r(
#CR2$Q"Q"Q!Q!Q!9::;<> 
+	B	RUBqE288RD>	:B	RUBqE288QC=	9B
b2r(
#CR2$R2$Q"Q"Q!R1#R1#./4568 
1a&	BAq"((B4.1A
b1#
CQ"Q"Q"Y<.!9:r!   c                     d } d }d}t        j                  g d      } |||      }d} | ||      j                         }t        | ||||d       \  }}t	        ||dd       t        | |||||      \  }}t	        ||dd       y )Nc                     t        j                  d|d   z  d|d   z  |d   z  z   d|d   z  d|d   z  |d   z  z
  d|d   dz  z  z
  d|d   dz  z  g      S )Nr   r   r   r$   r.   r   r   r8   r   s     r   r   ztest_num_jac.<locals>.fun  sz    yyAaDL31:!,,1Q4K#!*qt++cAaDAIo=!A$!)O
  	r!   c                     t        j                  dd|d   z  d|d   z  gdd|d   z  d|d   z  z
  d|d   z  gdd|d   z  dgg      S )	Nr   r   r.   r$   r   g     g    8Ar   r%   r   s     r   r   ztest_num_jac.<locals>.jac  sk    xxC!A$Jad
+4!A$;qt+TAaD[9ad
A
  	r!   r$   )r$   r   r   gh㈵>r   )r   r&   ravelr   r   )	r   r   r   r   J_true	thresholdrX   J_numfactors	            r   test_num_jacrH    s     	
A
AAYFIAq	ACAq)T:ME6E648CAq)V<ME6E648r!   c            
         d } d }t         j                  j                  d       d}t         j                  j                  |      } ||      }t	        |      } | d|d d d f         j                         }t        | d|j                         |dd ||f      \  }}t        | d|j                         |dd       \  }	}
t        |	|j                         dd	       t        |
|dd	       t         j                  j                  dd|
      }t        | d|j                         |d|||f      \  }}t        | d|j                         |d|      \  }	}
t        |	|j                         dd	       t        |
|dd	       y )Nc                     |dd  dz  |d d dz  z
  }t        j                  |j                  d         }t        j                  |d|z  f      t        j                  d|z  |f      z   S )Nr$   rG   r)   r.   )r   r   rH   r/   )r   r   r   r   s       r   r   z test_num_jac_sparse.<locals>.fun  sc    abE1Hq"vqy HHQWWQZ yy!QU$ryy!a%'<<<r!   c                     t        j                  | | ft              }d|d<   d|d<   t        d| dz
        D ]  }d|||dz
  |dz   f<    d|d<   d|d<   |S )Nr4  r$   )r   r   r   r$   r.   )r)   r)   )r)   r<   )r   r   intrange)rL   Ar_   s      r   	structurez&test_num_jac_sparse.<locals>.structure  sr    HHaV3'$$q!a% 	#A!"AaQAo	#&	&	r!   r   r   g:0yE>)r   -q=r   r   )r   )
r   randomseedrandnr   rC  r   r   toarrayuniform)r   rP  rL   r   rO  groupsrX   J_num_sparsefactor_sparseJ_num_densefactor_denserG  s               r   test_num_jac_sparser\    sd   =
	 IINN1
A
		A!A1FAqDz  "A #*#q!'')Qd45v;#@L- 'Q	1dD IKK!5!5!7U,L-e%H YYq%a0F")#q!'')Qf45v;#@L- 'Q	1dF KKK!5!5!7U,L-e%Hr!   c                  t   d } d }d }d }d }d|_         d|_         d|_        d	}d
}d}d}t        j                  | |z        d|z
  |z  t        j                  | |z        z   z  }	dd|	g}
d	|z  }t	        | d|g|
|||gd|||fd|dd
      }|j
                  d   }|j
                  d   }|j
                  d	   }t        |dt        j                  z  dt        j                  z  g       t        |dt        j                  z  dt        j                  z  g       t        ||g       t        j                  d|d   d      }|j                  |      }t        |d   t        j                  ||z        dd       t        |d   t        j                  ||z         dd       t        |d	   dd|	z
  |	z  t        j                  | |z        z  dz   z  dd       |j                  |      }|j                  |      }|j                  |      }t        |d   t        j                  |d         d       t        |d   t        j                  |d                t        |d   t        j                  |d                t        |d   t        j                  |d         d       t        |d	   |g       y )Nc                 8    |\  }}}| |z  ||z  ||z  d|z
  z  gS )Nr$   r+   r   womegarM   zfinalr   r   r   s           r   sys3ztest_args.<locals>.sys3  s0    1aq%'1Q3A;//r!   c           
      h    |\  }}}t        j                  d| dg|ddgdd|dd|z  z
  z  gg      }|S )Nr   r$   r.   r%   )	r   r`  ra  rM   rb  r   r   r   r   s	            r   sys3_jacztest_args.<locals>.sys3_jac  sP    1aHHq5&!nam!QAaC[)+ , r!   c                     |\  }}}|S r   r+   r_  s           r   sys3_x0decreasingz$test_args.<locals>.sys3_x0decreasing      1ar!   c                     |\  }}}|S r   r+   r_  s           r   sys3_y0increasingz$test_args.<locals>.sys3_y0increasing  rh  r!   c                     |\  }}}||z
  S r   r+   r_  s           r   sys3_zfinalztest_args.<locals>.sys3_zfinal  s    1a6zr!   r)   r$   Tr.   r=   r#   gGz?r   r   g|=gvIh%<=)r   r   r   r   r   r   r   r   r  g      ?g      ?   g&.>rQ  r   gvIh%,=r   )r   r   r   rk   r   r   r   pir   r   r0   r1   r   r\   )rc  re  rg  rj  rl  ra  rM   tfinalrb  z0w0tendr   
x0events_t
y0events_tzfinalevents_tr   r`  x0eventsy0eventszfinaleventss                        r   	test_argsry    s   0
 #%"#KE	AFF 
6		QZ/"&&!F2CC	DB
RB
 V8D
D1d)R-/@+N!%UAv,>"U	,C aJaJ\\!_NJRUUCI 67JbeeT"%%Z 89NVH- 	A~a(#.A
AAaD"&&q/5AAaD266%'?*EBAaD!q2vrk2661"Q$<7!;<E+ wwz"Hwwz"H77>*LHQKx{!;%HHQKhqk!:;HQKhqk!:;HQKx{!;%HLOfX.r!   c            	      (   d } t        | dddgddg      }t        j                  t        j                  j	                  |j
                  d d df   t        j                  d      z
              }t        j                  t        d	      5  t        | dddgdd
g      }t        j                  t        j                  j	                  |j
                  d d df   t        j                  d      z
              }d d d        |k  sJ y # 1 sw Y   xY w)Nc                     |d   |d   fS )Nr   r$   r+   r   s     r   rX   ztest_array_rtol.<locals>.fH  s    tQqTzr!   rL        ?r   r   r)   r$   zAt least one element...r   gؗҜ<)
r   r   rz   r{   r|   r   rk   r   warnsr   )rX   r   err1err2s       r   test_array_rtolr  E  s     AvBxtTl
;C66"))..q"uq	!9:;D 
k)B	C @6B84-@vvbiinnSUU1b5\BFF1I%=>?@
 $;;@ @s   A-DDr   c                     t        t        ddgt        j                  d      |       }t	        |j
                         t        |j                  d       t        |j                  dd       y )Nr   rB   rG   )r   r|  r   r   )
r   r    r   onesr   r   r   r   r   r   )r   results     r   test_integration_zero_rhsr  W  sH    x!R"''!*VDFFNN"FHHc.r!   c                     d } d}t        j                  t        |      5  t        | ddgd       d d d        t        | ddgd      }t	        |j
                  d	   t        j                  d
             y # 1 sw Y   FxY w)Nc                     ||z  S r   r+   )r   r   as      r   fun_with_argz,test_args_single_value.<locals>.fun_with_arg`  s    s
r!   z#Supplied 'args' cannot be unpacked.r   )r   r   r$   r)   )r   )r)   )r   r)   g)r   r
   	TypeErrorr   r   r   r   rk   )r  r   r   s      r   test_args_single_valuer  _  so     4G	y	0 8,1#B78 L(QCe
<CCEE%L"&&,/	8 8s   A77B f0_fillc           	          d}t        j                  t        |      5  t        t        ddgt        j                  d|              d d d        y # 1 sw Y   y xY w)Nz8All components of the initial state `y0` must be finite.r   r   rB   rG   )r   r
   r   r   r    r   full)r  msgs     r   test_initial_state_finitenessr  j  sH     EC	z	- :(QGRWWQ%89: : :s   (AA)T	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   scipy.integrate._ivp.baser   scipy.sparser   r   r    r'   r,   r3   r6   r9   r>   r@   rD   rY   r`   rb   rf   rh   rm   rp   rr   rw   r   r   r   r   r   markslowparametrizer   r   r   r   r   r   r   r  r  r  r  r  r&  r)  r+  r2  r?  rH  r\  ry  r  r  r  nanr%  r  r+   r!   r   <module>r     s   P P  *  1 L L L ' / 9 /5(:
G
H
>6:@)
9;
=G@)X>6 GF #<= > ,m1` aV,: -:'&'9T"3J;7|6'8'CTA7";&8#8L(;V98*IZP/f$ #VW/ X/	0 RVVRVV$45: 6:r!   