
    xf                        d dl mZ d dl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 Z/d Z0d Z1d Z2ejf                  jh                  ejf                  jk                  dg d       d!               Z6d" Z7d# Z8d$ Z9d% Z:d& Z;d' Z<d( Z=d) Z>d* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFejf                  jk                  dg d2      d3        ZGd4 ZHejf                  jk                  d5ej                  ej                  g      d6        ZKy)7    )product)assert_assert_allclose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     E/usr/lib/python3/dist-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_linearr2      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_rationalr5       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 r4   r   r.   r   s     r   fun_rational_vectorizedr8   %   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   asarrayr1   s    r   sol_rationalrC   :   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_medazkorX   >   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   rI   appendrH   r   	ones_like)rK   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_complexra   y   s	    2Ir    c                 H    t        j                  |j                  d          S )Nr   )r   eyerG   r   s     r   jac_complexrd   }   s    FF1771:r    c                 ,    t        t        | |            S r   )r   rd   r   s     r   jac_complex_sparserf      s    k!Q'((r    c                 V    dt        j                  |        z  }|j                  d      S )N      ?      ?)r#   r(   )r   expreshaper   s     r   sol_complexrk      s%    	RVVQBZA99Wr    c                     | |z
  ||t        j                  |      z  z   z  }t         j                  j                  |d      t        j                  |j
                  d         z  S )Nr   )axis)r   abslinalgnormsqrtrG   )r   y_truertolatoles        r   compute_errorrv      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               |dk7  st5        |	j3                  |	j                        |	j*                  dd        y # 1 sw Y   mx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`)rs   rt   methoddense_outputjac
vectorizedr   r   2   (   )r   r   r   r   rF   rA   r(   r-   r   V瞯<rs   rt   )r   r=   r?   r8   r5   r   filterUserWarningr   r   r   r   t_eventsy_eventssuccessstatusnfevnjevnlurC   rv   r   r   alllinspacesolr   )rs   rt   y0r   r   t_spanr   funsupresrr   ru   tcyc_trueycs                  r   test_integrationr      s   DD
sB+2DM?VaV<!45	,7 <K'
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
 WCGGCEENCEEEJy<K	< 	<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)Nrx   ry   rh   r   r#   )r   r   r   r   r~   T)r   r   rs   rt   r   r   #      r      r"   )r   r   r   rd   rf   r   r   r   r   ra   r   r   r   r   r   r   r   r   r   r   rk   rv   r   r   r   )rs   rt   r   r   r   r   r   r   r   rr   ru   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?rs   )O   r(   rx   rt   )   r(   ghen7?)   r(   )   r(   gՊ.?)   r(   ggJ	T>)   r(   )   r(   g`P^?)r   zerosr_   r   rX   r   r   r   r   r   r   r   r   r   )rK   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 )Nrx   ry   r   r-   r   r   T)rs   rt   r   r   r   rE      rA   +=r   )r+   r   r   r   r&   r   r   r   r   r   r   r   r   r   r   r2   rv   r   r   r   r   r   r   )rs   rt   r   r   JJ_sparser   r   r   rr   ru   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 )	Nry   )     @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_robertsonE  sW    1aAIa!#1HsQw{"S1Wq[0!GaK
 	
r    )rs   rt   r   i  r   )r   r   r   )r   rs   rt   r   tspanr   r   s          r   test_integration_stiffr   =  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_1V  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_2Y  s    ts{QqT!!r    c                     | dz
  S )Ng@r*   r   s     r   event_rational_3z%test_events.<locals>.event_rational_3\  s    3wr    Tr|   r"      rz   r{   )r   eventsr   r#   g333333@g@g333333@g@)r#   r-   r   r(   )r   r   r   r-         @rx   ry   r   gqq?gX<ݚ?)terminalr   r5   r   r   r   sizer   r   rG   r   isclose	directionr   r   rC   r   rv   r   allclose)	r   r   r   r   r   r   r   r   ru   s	            r   test_eventsr   U  sb   "" !%E Pg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=OVZaefffaPgf "#!"E Ig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=OVZaefff{{<Q(:;S\\!_Q=OVZaefffSIgr    c                  .   d} d}ddg}t         t        t        t        t        t
        fD ]i  }ddgddgfD ]Z  }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
        ur2t/        |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                         ] l y )Nrx   ry   rz   r{   r"   r}   r#         ?T)rs   max_steprt   r   r   r   r(   g	     ?r   r   )r   g#B;)rs   rt   r   failedzstep size is less)r   r   r   r   r   r   r   r5   r   r   r   r   r   rn   diffr   r   r   rC   rv   r   r   r   r   assert_raises
ValueErrorstepRuntimeError)rs   rt   r   r   r   r   rr   ru   r   r   r   solvermessages                r   test_max_stepr     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" U"EN*flF1Ir )b2 U"fQiVAY%)uF ++-V]]H5+w67lFKK8I$	9%9r    c                  P   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
        ur2t        |j-                  |j                        |j&                  dd       t/        t0        |t        |d   ||d   d       t/        t0        |t        |d   ||d   d         y )Nrx   ry   rz   r{   皙?r"   r}   r#   r   T)rs   r   rt   r   r   
first_stepr   r(   r   r   )r   )r   r   r   r   r   r   r   r5   r   r   r   r   rn   r   r   r   r   rC   rv   r   r   r   r   r   r   )rs   rt   r   r   r   r   r   rr   ru   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" U"EN*flF1Ir )4*flF1Ir )3;	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 )Nrx   ry   rz   r{   r"   r}   r#   r   rA   rs   rt   t_eval)r"   
ףp=
@   r   Q @r}   )r"   (\@rF         ?皙?)\(?r#   )r   r   r   r   )r   rF   r   r   r   r<   r   )r   r   r   r5   r   r   r   r   r   r   rC   rv   r   r   r   r   )rs   rt   r   r   r   r   rr   ru   s           r   test_t_evalr   U  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 )Nrx   ry   rz   r{   r"   r}   r   r#   rA   r   T)rs   rt   r   r   )r   r   r   r5   r   r   r   r   r   r   r   rC   rv   r   )	rs   rt   r   r   r   r   res_drr   ru   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    Trx   ry   rz   r{   r"   r}   r      r|   r~   )rs   rt   r   r   r   r   zA termination event occurred.r#   r   r   )r   r   r   r   r   r   r   r5   r=   r   r   r   r   r   lenr   r   )	r   rs   rt   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 ]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-   rF   Tr   r   )r<   r"   r   r-   r-   r-   )rF   rF   rF   )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-   rA   rA   rA   )r   r   r   c                     | S r   r*   r   s     r   r   z+test_no_integration_class.<locals>.<lambda>  r   r    g      Y@r   rF   )r   r   r   r   r   r   r   r   r   r   r   infrJ   )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   rA   Tr   )r#   r-   rF   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   rJ   )r   s    r   test_ConstantDenseOutputr    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 )
Nrz   r{   r"   r-   runningr#   r   r   r   )r   r   r   r   r   r   r5   r   r  r   rK   r   t_boundr   r   r   r   	step_sizer   r   r   r   r   r   r   r   equalr   )r   clsr   r   r   s        r   test_classesr     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-   rF   r"   r   )	r   r   r;   r   g      @g      @r"   g      @r-   )	r(   r#   r(   r(   r#   r#   r#   r#   r(   )rA   r<      rA   r<   r  )   r)   rA   r  r   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   r7   r   s     r   r   ztest_num_jac.<locals>.funR  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>.jacY  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	thresholdrW   J_numfactors	            r   test_num_jacr)  Q  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#   rF   r(   r-   )r   r   rG   r.   )r   r   ru   r   s       r   r   z test_num_jac_sparse.<locals>.funn  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 )Nr  r#   )r   r   r   r#   r-   )r(   r(   )r(   r;   )r   r   intrange)rK   Ar^   s      r   	structurez&test_num_jac_sparse.<locals>.structures  sr    HHaV3'$$q!a% 	#A!"AaQAo	#&	&	r    r   r   g:0yE>)r   -q=r   r   )r   )
r   randomseedrandnr
   r$  r   r   toarrayuniform)r   r1  rK   r   r0  groupsrW   J_num_sparsefactor_sparseJ_num_densefactor_denser(  s               r   test_num_jac_sparser=  m  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omegarL   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   rA  rB  rL   rC  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  rI  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   argsr   r   rs   rt   r   r   g      ?g      ?   g&.>r2  r   gvIh%,=r   )r   r   r   ri   r   r   r   pir   r   r/   r0   r   r[   )rD  rF  rH  rK  rM  rB  rL   tfinalrC  z0w0tendr   
x0events_t
y0events_tzfinalevents_tr   rA  x0eventsy0eventszfinaleventss                        r   	test_argsr[    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   rW   ztest_array_rtol.<locals>.f  s    tQqTzr    r-        ?r   r   r(   r#   zAt least one element...matchgؗҜ<)
r   r   rn   ro   rp   r   ri   pytestwarnsr   )rW   r   err1err2s       r   test_array_rtolre    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   rA   rF   )r   r^  r   r   )
r   r   r   onesr   r   r   r   r   r   )r   results     r   test_integration_zero_rhsri    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(   )rN  )r(   )r   r(   g)ra  r	   	TypeErrorr   r   r   r   ri   )rm  r   r   s      r   test_args_single_valuero    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   rA   rF   )ra  r	   r   r   r   r   full)rp  msgs     r   test_initial_state_finitenessrt    sH     EC	z	- :(QGRWWQ%89: : :s   (AA)L	itertoolsr   numpy.testingr   r   r   r   r   ra  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+   r2   r5   r8   r=   r?   rC   rX   r_   ra   rd   rf   rk   rv   r   r   r   r   markslowparametrizer   r   r   r   r   r   r   r   r  r
  r  r  r   r)  r=  r[  re  ri  ro  nanr  rt  r*   r    r   <module>r     s   P P  *  1 L L L ' / 9 /5(:
G
H
>6:@)
;
AKH)X>6 GF #<= > ,jgZ)9X$3N;7|6'8A7";&8#8L(;V98*IZP/f$ #VW/ X/	0 RVVRVV$45: 6:r    