
    = jѧ                        S SK r S SKJr  S SKJrJrJrJrJr  S SK	r	S SK	J
r  S SKrS SKJr  S SKJrJrJrJrJrJrJr  S SKJr  S SKJrJr  S S	KJr  S S
KJrJ r   S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1S r2S r3S r4\	Rj                  Rm                  SS 9S! 5       r7S" r8\	Rj                  Rs                  S#5      S$ 5       r:S% r;\	Rj                  Rx                  \	Rj                  R{                  S&/ S'Q5      S( 5       5       r>S) r?S* r@\	Rj                  R{                  S+S,S-/5      S. 5       rAS/ rBS0 rCS1 rDS2 rES3 rF\	Rj                  Rm                  SS 9S4 5       rGS5 rHS6 rIS7 rJS8 rKS9 rLS: rMS; rNS< rOS= rPS> rQS? rR\	Rj                  R{                  S&/ S@Q5      SA 5       rSSB rT\	Rj                  R{                  SC\R                  \R                  /5      SD 5       rW\	Rj                  R{                  S&/ SEQ5      SF 5       rX\	Rj                  R{                  S&/ SEQ5      SG 5       rY\	Rj                  R{                  S&/ SEQ5      SH 5       rZ\	Rj                  R{                  S&/ SEQ5      SI 5       r[SJ r\g)K    N)product)assert_assert_allcloseassert_array_lessassert_equalassert_no_warnings)raises)group_columns)	solve_ivpRK23RK45DOP853RadauBDFLSODA)OdeSolution)num_jacselect_initial_step)ConstantDenseOutput)
coo_matrix
csc_matrixc                 .    [         R                  " U5      $ N)np
zeros_liketys     t/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/scipy/integrate/_ivp/tests/test_ivp.pyfun_zeror       s    ==    c                 ^    [         R                  " US   * SUS   -  -
  US   US   -   /5      $ )Nr         r   arrayr   s     r   
fun_linearr'      s5    88adUQ1X%qtad{344r!   c                  :    [         R                  " SS/SS//5      $ )Nr$   r%    r!   r   
jac_linearr,      s    88b"X1v&''r!   c                     [         R                  " S[         R                  " SU -  5      -  S[         R                  " SU -  5      -  [         R                  " SU -  5      -   45      $ )Nr*      )r   vstacksincosr   s    r   
sol_linearr3      sP    99b266!a%=("&&Q-'"&&Q-79 : :r!   c                 ~    [         R                  " US   U -  US   US   SUS   -  -   S-
  -  XS   S-
  -  -  /5      $ Nr$   r   r.   r%   r   s     r   fun_rationalr6   #   sU    88QqTAXqTQqTA!H_q01QA$(^DF G Gr!   c                 ~    [         R                  " US   U -  US   US   SUS   -  -   S-
  -  XS   S-
  -  -  45      $ r5   r   r/   r   s     r   fun_rational_vectorizedr9   (   sU    99adQhdadQ1Xo12aQ4!8nEG H Hr!   c                     [         R                  " SSU -  /SUS   S-  -  XS   S-
  S-  -  -  US   SUS   -  -   S-
  XS   S-
  -  -  //5      $ Nr   r$   r.      r%   r   s     r   jac_rationalr>   -   sr    88	
AE
	adai1!qQ.	/
A$QqT/A
!tax.	1	3  r!   c                     [        SSU -  /SUS   S-  -  XS   S-
  S-  -  -  US   SUS   -  -   S-
  XS   S-
  -  -  //5      $ r;   )r   r   s     r   jac_rational_sparser@   5   sn    	
AE
	adai1!qQ.	/
A$QqT/A
!tax.	1	3  r!   c                 T    [         R                  " X S-   -  SU -  U S-   S-  -  45      $ )N
   r.   )r   asarrayr2   s    r   sol_rationalrD   =   s-    ::qF|R!Vq2v!m%;<==r!   c                    UR                   S   S-  nSnSnU S::  a  SOSn[        R                  " USXS   45      nSU-  n[        R                  " U5      S-   nSXv-  S-
  S-  -  US-  -  nXv-  S-
  S-  US-  -  n	SU-  S-   n
SU-  S-
  nSU-  nSU-  S-   n[        R                  " SU-  5      nXU
   X   -
  -  SU-  -  XU   SX   -  -
  X   -   -  US-  -  -   X1U   -  X   -  -
  US S S2'   U* X   -  X   -  USS S2'   U$ )	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   A   s_   	
aAA	AAv!1C
		31e$%A	AA
		!qAq  16)EEAI!a1f$DUQYFUQYFUF
a%!)C
QAy19,-Q7i!ai-/!);<qAvEFF)maf$%AccF b16kAI%AaddGHr!   c                    / n/ n[         R                  " U 5      S-  nUR                  USS  5        UR                  USS  S-
  5        UR                  U5        UR                  U5        UR                  U5        UR                  US-   5        UR                  US S 5        UR                  US S S-   5        [         R                  " U 5      S-  S-   nUR                  U5        UR                  U5        UR                  U5        UR                  US-
  5        [         R                  " U5      n[         R                  " U5      n[	        [         R
                  " U5      X445      $ )Nr.   r$   r)   )r   rJ   appendrI   r   	ones_like)rL   colsrowsis       r   medazko_sparsityr`   \   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                     U* $ r   r+   r   s     r   fun_complexrb   |   s	    2Ir!   c                 J    [         R                  " UR                  S   5      * $ Nr   )r   eyerH   r   s     r   jac_complexrf      s    FF1771:r!   c                 *    [        [        X5      5      $ r   )r   rf   r   s     r   jac_complex_sparserh      s    k!'((r!   c                 X    S[         R                  " U * 5      -  nUR                  S5      $ )N      ?      ?)r$   r)   )r   expreshaper   s     r   sol_complexrm      s%    	RVVQBZA99Wr!   c                     XS-
  -  $ Nr.   r+   r   s     r   fun_event_dense_output_LSODArp      s    A;r!   c                     U S-
  $ ro   r+   r   s     r   jac_event_dense_output_LSODArr      s    q5Lr!   c                 z    [         R                  " U S-  S-  SU -  -
  [         R                  " S5      -   S-
  5      $ )Nr.   皙?   )r   rk   logr2   s    r   sol_event_dense_output_LSODArw      s4    66!q&1*q1u$rvvd|3a788r!   c                     X-
  X2[         R                  " U5      -  -   -  n[         R                  R                  USS9[         R                  " UR
                  S   5      -  $ )Nr   )axis)r   abslinalgnormsqrtrH   )r   y_truertolatoles        r   compute_errorr      sK    	
bffVn445A99>>!!>$rwwqwwqz':::r!   c            	         S n S nSUl         SUl        [        U S[        R                  /SS/SUSS9n[        UR                  S5      [        R                  " S	S
/5      SSS9  [        UR                  [        R                  " S//5      SSS9  [        UR                  [        R                  " SS//5      /SS9  UR                  (       d   e[        UR                  S5        g )Nc                     US   S/$ )Nr$   g:#r+   r   s     r   upward_cannon0test_duplicate_timestamps.<locals>.upward_cannon   s    !hr!   c                     US   $ rd   r+   r   s     r   
hit_ground-test_duplicate_timestamps.<locals>.hit_ground       tr!   Tr)   r   {Gz?g/ҟJb>)max_stepeventsdense_outputgix9g.qGh㈵>:0yE>r   r   gl `?        g{Gz&.>r   r$   )terminal	directionr   r   infr   solrC   t_eventsy_eventssuccessr   status)r   r   r   s      r   test_duplicate_timestampsr      s      JJ
MArvv;D	3%D:C CGGDM2::{K.H#ID*CLL"**zl^"<4dSCLL2::e~.>#?"@tL;;;Qr!   zlsoda solver is not thread-safereasonc                     Sn SnSS/n[        SS// SQSS	/SS
//S [        [        /5       GH  u  p4pVU(       a  [        nO[        n[
        R                  " 5          [
        R                  " SS[        5        [        XuX XSXcS9	nS S S 5        [        WR                  S   US   5        [        UR                  S L 5        [        UR                  S L 5        [        UR                  5        [        UR                   S5        US:X  a  [        UR"                  S:  5        O[        UR"                  S:  5        US;   a-  [        UR$                  S5        [        UR&                  S5        OP[        SUR$                  s=:  =(       a    S:  Os  5        [        SUR&                  s=:  =(       a    S:  Os  5        [)        UR                  5      n	[+        UR,                  XU5      n
[        [.        R0                  " U
S:  5      5        [.        R2                  " U6 n[)        U5      nUR5                  U5      n[+        XX5      n
[        [.        R0                  " U
S:  5      5        US   US   -   S-  n[)        U5      nUR5                  U5      n[+        XX5      n
[        [.        R0                  " U
S:  5      5        [7        UR5                  UR                  5      UR,                  SSS9  GM     g ! , (       d  f       GNv= f)NMbP?ư>UUUUUU?qq?FTr   r   r   r   r   r   r#   	   r$   ignoreAThe following arguments have no effect for a chosen solver: `jac`)r   r   methodr   jac
vectorizedr   r   2   (   )r   r   r   r   rG   rB   r)   r.   V瞯<r   )r   r>   r@   r9   r6   warningscatch_warningsfilterwarningsUserWarningr   r   r   r   r   r   r   r   nfevnjevnlurD   r   r   r   alllinspacer   r   )r   r   y0r   r   t_spanr   funresr~   r   tcyc_trueycs                 r   test_integrationr      sa   DD
sB+2DM?VaV<!45	,7'
F )CC$$&##S
 C!%4 #<C ' 	SUU1Xvay)$%$%SZZ#X CHHrM"CHHrM"881%!$A$$1$%A$$"$%cee$#%%t4q1u[[&!r"WWR["t2q1uQi&*$)r"WWR["t2q1uEFu,7 '&s   *K55
L	c                  f   Sn SnS/nSS/n[         R                  " US   US   5      n[        / SQS [        [        /5       GH  u  pV[
        R                  " 5          [
        R                  " SS[        5        [        [        X2US	XUS
9nS S S 5        [        WR                  S   US   5        [        UR                  S L 5        [        UR                  S L 5        [        UR                   5        [        UR"                  S5        US:X  a  UR$                  S:  d   eOUR$                  S:  d   eUS:X  a)  [        UR&                  S5        UR(                  S:  d   eO$UR&                  S:X  d   eUR(                  S:X  d   e[+        UR                  5      n[-        UR.                  XU5      n	[         R0                  " U	S:  5      (       d   e[+        U5      n
UR3                  U5      n[-        XX5      n	[         R0                  " U	S:  5      (       a  GM   e   g ! , (       d  f       GN= f)Nr   r   rj   r   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   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   s               r   test_integration_complexr      s   DD
BVF	VAYq		*B@ $k3EFH$$&##S
 KF)-DNC ' 	SUU1Xvay)$%$%SZZ#X88b= =88b= =U?1%77Q;;88q= =77a<<SUU##%%t4vva!e}}}b/WWR["t2vva!e}}}KH&&s   /H!!
H0	r#   c            	         Sn SS/n[         R                  " SU -  5      nSUSS S2'   [        U 5      nS GHI  n[        [        XUUS9n[        UR                  S   US   5        [        UR                  S L 5        [        UR                  S L 5        [        UR                  5        [        UR                  S5        [        UR                  S   S	S
S9  [        UR                  S   SSS9  [        UR                  S   SS
S9  [        UR                  S   SSS9  [        UR                  S   SS
S9  [        UR                  S   SSS9  [        UR                  S   SSS9  [        UR                  S   SS
S9  GML     g )N   r      r.   r$   )r   r   )r   jac_sparsity)N   r)   gݨ'.?r   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   #  sK   AWF	!a%BBqt!tH"H"V%-/ 	SUU1Xvay)$%$%SZZ#f{>fqt4g$?g5gTBg4@g5g	=# #r!   c                     Sn SnSS/nSS/n[        5       n[        U5      n[        SS/XE/5       GH  u  pg[        [        X2XUSUS9n[        UR                  S   US   5        [        UR                  S L 5        [        UR                  S L 5        [        UR                  5        [        UR                  S5        [        UR                  S	:  5        [        UR                  S5        [        SUR                  s=:  =(       a    S
:  Os  5        [        UR                  5      n	[!        UR"                  XU5      n
[        [$        R&                  " U
S:  5      5        [$        R(                  " U6 n[        U5      nUR+                  U5      n[!        XX5      n
[        [$        R&                  " U
S
:  5      5        [-        UR+                  UR                  5      UR"                  SSS9  GM     g )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/!?
FT%DcCSUU1Xvay)$%$%SZZ#3SXXq!CGG  b !CEE"#%%t4q2v[[&!R.WWR["t2q2vEF1 @r!   r   )r   r   r   c           	          SnSn/ SQnSS/nU S:X  a  US:  a  [         R                  " SS9  S	 n[        XeXBX0S
9nUR                  S:  d   eUR                  S:  d   eg )Nr   )     @r   r   r   g    חAr   r$   z)LSODA does not allow for concurrent callsr   c                 d    Uu  p#nSU-  SU-  U-  -   SU-  SU-  U-  -
  SU-  U-  -
  SU-  U-  /$ )N{Gzr   {Gz?    8|Ar+   )r   statexr   zs        r   fun_robertson-test_integration_stiff.<locals>.fun_robertsonm  sU    aAIa!#1HsQw{"S1Wq[0!GaK
 	
r!   )r   r   r   i  r   )pytestskipr   r   r   )r   num_parallel_threadsr   r   r   tspanr   r   s           r   test_integration_stiffr   b  ss     DD	BHE1A5FG
 M".C 88d??88c>>r!   c           
         S nS nS nSUl         S GH  nUS:X  a  U S:  a  M  [        [        SS	/S
S/UX4S9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   e[        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   eSUl        SUl        [        [        SS	/S
S/UX4S9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   eSUl        SUl        [        [        SS	/S
S/UX4S9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   eSUl        SUl        [        [        SS	/S
S/UXU4SS9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   e[        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   e[        [        SS	/S
S/UUSS9n[        UR                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   e[        R                  " UR                  S   UR                  S   5      n[        U5      nUR!                  U5      n[#        XSS5      n	[        [        R$                  " U	S:  5      5        [        R&                  " [        UR
                  S   S   5      UR                  S   S   SSS9(       a  GM   e   SUl        SUl        S GH   nUS:X  a  U S:  a  M  [        [        S	S/SS/UX4S9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   e[        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   eSUl        SUl        [        [        S	S/SS/UX4S9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   eSUl        SUl        [        [        S	S/SS/UX4S9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   eSUl        SUl        [        [        S	S/SS/UXU4SS9n[        UR                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        UR
                  S   R                  S5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        SUR
                  S   S   s=:  =(       a    S:  Os  5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        UR                  S   R                  S5        [        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   e[        R                  " U" UR
                  S   S   UR                  S   S   5      S5      (       d   e[        R                  " UR                  S   UR                  S   5      n[        U5      nUR!                  U5      n[#        XSS5      n	[        [        R$                  " U	S:  5      5        [        R&                  " [        UR
                  S   S   5      UR                  S   S   SSS9(       d   e[        R&                  " [        UR
                  S   S   5      UR                  S   S   SSS9(       a  GM!   e   g )Nc                     US   US   S-  -
  $ )Nr   r$   gffffff?r+   r   s     r   event_rational_1%test_events.<locals>.event_rational_1~  s    tadck!!r!   c                     US   S-  US   -
  $ )Nr$   g333333?r   r+   r   s     r   event_rational_2%test_events.<locals>.event_rational_2  s    ts{QqT!!r!   c                     U S-
  $ )Ng@r+   r   s     r   event_rational_3%test_events.<locals>.event_rational_3  s    3wr!   Tr   r   r$   r#      r   r   )r   r   r   g333333@g@g333333@g@)r$   r.   r   r)   )r   r   r   r.         @r   r   r   gqq?gX<ݚ?)r   r   r6   r   r   r   sizer   r   rH   r   iscloser   r   r   rD   r   r   r   allclose)
r   r   r   r   r   r   r   r   r   r   s
             r   test_eventsr   }  s   "" !%EW!5!9q!fsCj 0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 IzzS\\!_Q/a1CDaI I 	I I &'"%&"q!fuenV 0CESZZ#S\\!_))1-S\\!_))1-cll1oa(..3./S\\!_**F3S\\!_**D1zzS\\!_Q/a1CDaI I 	I I &("%'"q!fuenV 0CESZZ#S\\!_))1-S\\!_))1-cll1oa(..3./S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI I 	I I &'"%&"q!fuenV 0 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 IzzS\\!_Q/a1CDaI I 	I I q!fuenV/dDSZZ#S\\!_))1-cll1oa(..3./S\\!_**F3zzS\\!_Q/a1CDaI I 	I I [[q3559-r"WWR["tT2q1u {{<Q(:;S\\!_Q=O $41 1 	1 1g Fn "#!"EW!5!9q!fsEl6 0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 IzzS\\!_Q/a1CDaI I 	I I &("%'"q!fsEl6 0CESZZ#S\\!_))1-S\\!_))1-cll1oa(..3./S\\!_**F3S\\!_**D1zzS\\!_Q/a1CDaI I 	I I &'"%&"q!fsEl6 0CESZZ#S\\!_))1-S\\!_))1-cll1oa(..3./S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI I 	I I &'"%&"q!fsEl6 0 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 IzzS\\!_Q/a1CDaI I 	I I [[rCEE!H-r"WWR["tT2q1u{{<Q(:;S\\!_Q=O $41 	1 1{{<Q(:;S\\!_Q=O $41 1 	1 1[ Fr!   c                      S n S nX4$ )Nc                     US   US   * /$ )Nr$   r   r+   r   s     r   rX   #_get_harmonic_oscillator.<locals>.f4  s    !qte}r!   c                     US   $ rd   r+   r   s     r   event'_get_harmonic_oscillator.<locals>.event7  r   r!   r+   )rX   r   s     r   _get_harmonic_oscillatorr  3  s     8Or!   n_eventsrG   r=   c                     [        5       u  pXl        [        USSS/US9n[        UR                  S   5      U :X  d   e[        UR
                  S   5      U :X  d   e[        UR
                  S   S S 2S4   SSS9  g )Nr   rF   r$   r   )r   r   r   )r  r   r   lenr   r   r   )r  rX   r   r   s       r   test_event_terminal_integerr  =  sx    ')HAN
Ax!Q
6Cs||A8+++s||A8+++CLLOAqD)159r!   c                     [        5       u  pU SSS/4nS Ul        [        USU06nSUl        [        USU06n[        UR                  UR                  5        SnSUl        [
        R                  " [        US9   [        USU06  S S S 5        SUl        [
        R                  " [        US9   [        USU06  S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)	Nr  r$   r   r   zThe `terminal` attribute...r)   matchg      @)r  r   r   r   r   r   r	   
ValueError)rX   r   argsr   refmessages         r   test_event_terminal_ivr  G  s    ')HAx!Q DEN
T
(%
(CEN
T
(%
(CCLL#,,/+GEN	z	14&& 
2EN	z	14&& 
2	1 
2	1 
2	1s   :C.C
C
C"c                 T   SnSnSS/n[         [        [        [        [        [
        4 GH{  nU[
        L a  U S:  a  M  SS/SS/4 GHY  n[        [        XSUSX$S	S
9n[        UR                  S   US   5        [        UR                  S   US   5        [        [        R                  " [        R                  " [        R                  " UR                  5      5      S:*  5      5        [        UR                  S L 5        [        UR                   5        [        UR"                  S5        [%        UR                  5      n['        UR(                  XqU5      n[        [        R                  " US:  5      5        [        R*                  " U6 n	[%        U	5      n
UR-                  U	5      n['        XX5      n[        [        R                  " US:  5      5        [/        UR-                  UR                  5      UR(                  SSS9  [1        [2        U[        US   UUS   SS9  U[
        Ld  GM  U" [        US   X5S   XSS9nUR5                  5       nUR5                  5       n[        UR"                  S5        [        SU;   5        [1        [6        UR4                  5        GM\     GM~     g )Nr   r   r   r   r$   r#   r         ?T)r   r   r   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   r   solverr  s                 r   test_max_stepr  Z  s   DD
sBvuc59U?3a71v1v&FL&4%(t)-/C q6!9-rF2J/BFF266"''#%%.1[@ABCLLD()CKK Q'!#%%(FceeV48ABFF1q5M"f%B"2&GBb46ABFF1q5M"CGGCEENCEEEJ*flF1Ir )b2 U"fQiAY%)uF ++- ++-V]]H5+w67lFKK8E ' :r!   c                 P   SnSnSS/nSn[         [        [        [        [        [
        4 GH  nU[
        L a  U S:  a  M  SS/SS/4 GH  n[        [        XcUS	X%S
US9	n[        UR                  S   US   5        [        UR                  S   US   5        [        U[        R                  " UR                  S   S-
  5      5        [        UR                  S L 5        [        UR                  5        [        UR                   S5        [#        UR                  5      n[%        UR&                  XU5      n	[        [        R(                  " U	S:  5      5        [        R*                  " U6 n
[#        U
5      nUR-                  U
5      n[%        XX5      n	[        [        R(                  " U	S:  5      5        [        UR-                  UR                  5      UR&                  SSS9  [/        [0        U[        US   UUS   SS9  [/        [0        U[        US   UUS   SS9  GM     GM     g )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   r   s                r   test_first_stepr    s   DD
sBJvuc59U?3a71v1v&FL&4%(t)-*FC q6!9-rF2J/JsuuQx!|(<=CLLD()CKK Q'!#%%(FceeV48ABFF1q5M"f%B"2&GBb46ABFF1q5M"CGGCEENCEEEJ*flF1Ir )4*flF1Ir )37 ' :r!   c                     Sn SnSS/nSS/SS/4 H  n[         R                  " US   US   S	5      n[        [        X2XUS
9n[	        UR
                  U5        [        UR                  S L 5        [        UR                  5        [	        UR                  S5        [        UR
                  5      n[        UR                  X`U5      n[        [         R                  " US:  5      5        M     / SQn[        [        SS/X UUS
9n[	        UR
                  U5        [        UR                  S L 5        [        UR                  5        [	        UR                  S5        [        UR
                  5      n[        UR                  X`U5      n[        [         R                  " US:  5      5        / SQn[        [        SS/X UUS
9n[	        UR
                  U5        [        UR                  S L 5        [        UR                  5        [	        UR                  S5        / SQn[        [        SS/X UUS
9n[	        UR
                  U5        [        UR                  S L 5        [        UR                  5        [	        UR                  S5        [        UR
                  5      n[        UR                  X`U5      n[        [         R                  " US:  5      5        / SQn[        [        SS/X UUS
9n[	        UR
                  U5        [        UR                  S L 5        [        UR                  5        [	        UR                  S5        SS/n[        [        [        [        SS/UXUS
9  g )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ft%'SUUF#$%SZZ#cee$#%%t4q1u # &F
L1a&"d!#CCLLD !CKKQ#%% FceeV40ABFF1q5M,F
L1a&"d!#CCLLD !CKKQF
L1a&"d!#CCLLD !CKKQ#%% FceeV40ABFF1q5M&F
L1a&"d!#CCLLD !CKKQVF*i1vrv7r!   c            
         Sn SnSS/nSS/n[         R                  " US   US   S	5      n[        [        X2XUS
9n[        [        X2XUSS9n[	        UR
                  U5        [        UR                  S L 5        [        UR                  5        [	        UR                  S5        [	        UR
                  UR
                  5        [	        UR                  UR                  5        [        UR                  S L 5        [        UR                  5        [	        UR                  S5        [        UR
                  5      n[        UR                  XpU5      n[        [         R                  " US:  5      5        g )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&4!#ClFT#$8ECLLD !CKKQ  ENNd"#EMMq! #%% FceeV40ABFF1q5Mr!   c                     S n SU l         SnSnSS/nSS/n[        R                  " S	SS
5      nS GH  n[        R                  " 5          [        R
                  " SS[        5        [        [        XCXXeU [        S9	nS S S 5        WR                  (       d   eUR                  S:X  d   eUR                  S:X  d   eUR                  (       d  UR                  (       a   e[        UR                   5      S:X  d   eUR                   S   R"                  S:X  d   eUR                   S   S   S:X  a  GM   e   g ! , (       d  f       N= f)Nc                     U S-
  $ )Nr   r+   r   s     r   early_event,test_t_eval_early_event.<locals>.early_event      1ur!   Tr   r   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   r   r6   r>   r   r  r   r   r   r  r   r   )r,  r   r   r   r   r  r   r   s           r   test_t_eval_early_eventr0    s%     KDD
sBVF[[a$FE$$&##S
 L&4#) ,.C ' {{{{{====zzQ55&&3<< A%%%||A##q(((||Aq!Q&&&! F&&s   
3D88
E	c                    U S:  a  [         R                  " S5        S nSnSnS/nSS/nSn[        [        UUS	S
UUSUU[        S9n[        UR                  S   US   5        [        UR                  S   US   5        [        U[        R                  " UR                  S   US   -
  5      5        UR                  (       d   e[        UR                  S5        [        UR                  5      n[        UR                  XU5      n	[        U	S5        [        R                   " U6 n
[        U
5      nUR#                  U
5      n[        XX#5      n	[        U	S5        [        UR#                  UR                  5      UR                  SSS9  g )Nr$   -LSODA does not allow for concurrent executionc                     US   S-
  $ )Nr   gOne.>r+   r   s     r   event_lsoda2test_event_dense_output_LSODA.<locals>.event_lsoda)  s    tg~r!   r   r   rt   r<   r.   r   T)r   r   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   r4  r   r   r   r   r  r   r~   r   r   r   r   s                r   test_event_dense_output_LSODAr6  %  sW   aCD DD
B!WFJ
$
(C q6!9%rF2J'JsuuQx&)'; <=;;;Q)#%%0FceeV40Aa	f	B*2.G	Bb4.AaCGGCEENCEEEBr!   c            	          S HU  n [        S SS/SS/U SS9n[        UR                  S5      SS/5        [        UR                  / SQ5      / S	Q/ S
Q/5        MW     g )Nr   c                     U* $ r   r+   r   s     r   <lambda>%test_no_integration.<locals>.<lambda>T      aRr!   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>  R  sX    E!Q!Q%D:SWWQZ!Q(SWWY')Y)?@	 Fr!   c                  N   [         [        [        [        [        [
        4 GH   n U " S SSS/S5      nUR                  5         [        UR                  S5        UR                  5       n[        U" S5      SS/5        [        U" / SQ5      / SQ/ SQ/5        U " S S/ [        R                  5      nUR                  5         [        UR                  S5        UR                  5       n[        U" S	5      / 5        [        U" / SQ5      [        R                  " S
5      5        GM     g )Nc                     U* $ r   r+   r   s     r   r9  +test_no_integration_class.<locals>.<lambda>\  r;  r!   r   g      $@finished)r   r$   r.   rB   rB   rB   )r   r   r   c                     U* $ r   r+   r   s     r   r9  rA  c  r;  r!         Y@r   rG   )r   r   r   r   r   r   r  r   r   r   r   r   rK   )r   r  r   s      r   test_no_integration_classrG  Z  s    vuc59tSk3?V]]J/!!#SXc{+S^lI%>?b"&&9V]]J/!!#SZ$S^RXXf%56 :r!   c            
      F   S n [         R                  " S5      nS Hw  n[        [        U SS/UUSS9n[	        UR                  S5      [         R                  " S5      5        [	        UR                  / SQ5      [         R                  " S	5      5        My     S H  n[        [        U S[         R                  /UUSS9n[	        UR                  S5      [         R                  " S5      5        [	        UR                  / SQ5      [         R                  " S	5      5        M     g )
Nc                 .    [         R                  " S5      $ )Nr   )r   r   r   s     r   r   test_empty.<locals>.funl  s    xx~r!   r   r   r   rB   Tr<  )r$   r.   rG   rF  )r   r   r   r   r   r   r   )r   r   r   r   s       r   
test_emptyrK  k  s     
$BE C!R"(.TCSWWR["((4.1SWWY'&)9:	 F F C!RVVb(.TCSWWR["((4.1SWWY'&)9:	 Fr!   c                     [        SS[        R                  " SS/5      5      n [        U " S5      SS/5        [        U " / SQ5      / SQ/ SQ/5        [        SS[        R                  " / 5      5      n [        U " S5      [        R                  " S5      5        [        U " / SQ5      [        R                  " S5      5        g )	Nr   r$   r.   r#  )r$   r#  r.   )r$   r$   r$   r=  rF  )r   r   r&   r   rK   )r   s    r   test_ConstantDenseOutputrM  ~  s    
aBHHaV$4
5CCHq!f%C$y)&<=
aBHHRL
1CCHbhhqk*C$bhhv&67r!   c            	          SS/n [         [        [        [        [        [
        4 GH  nU" [        SU [        R                  5      n[        UR                  S5        [        UR                  S5        [        UR                  [        R                  5        [        UR                  S5        [        UR                  S5        [        UR                  U 5        [!        UR"                  S L 5        U[
        LaG  [!        UR$                  S:  5        [!        UR&                  S:  5        [        UR(                  S5        OB[        UR$                  S5        [        UR&                  S5        [        UR(                  S5        [+        [,        UR.                  5        UR1                  5       n[        UR                  S5        [        US 5        [        UR                  S5        [        UR                  [        R                  5        [        UR                  S5        [!        UR                  S:  5        [!        [        R2                  " [        R4                  " UR                  U 5      5      (       + 5        [!        UR"                  S:  5        [!        UR$                  S:  5        [!        UR&                  S:  5        [!        UR(                  S:  5        UR/                  5       n[7        U" S5      U SSS	9  GM     g )
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_classesrT    s   
BdFE36\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 7r!   c                     [         R                  " / SQ[        S9n [        U S   U S   [         R                  " S/5      5      n[        U S   U S   [         R                  " S/5      5      n[	        XU/5      n[        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" S	5      S/5        [        U" / S
Q5      [         R                  " / SQ/5      5        [         R                  " / SQ5      n [        U S   U S   [         R                  " S/5      5      n[        U S   U S   [         R                  " S/5      5      n[	        XU/5      n[        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" / SQ5      [         R                  " / SQ/5      5        [         R                  " SS/5      n [        SS[         R                  " S/5      5      n[	        X/5      n[        U" S5      S/5        [        U" S5      S/5        [        U" S5      S/5        [        U" / SQ5      [         R                  " / SQ/5      5        g )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=   rX  )   r*   rB   rX  ru   r$   r=   )r)   r$   r)   r$   r)   r$   r)   )r.   r$   r   rC  )r   r&   floatr   r   r   )tss1s2r   ss        r   test_OdeSolutionra    sO   	)5	)B	RUBqE288RD>	:B	RUBqE288QC=	9B
br(
#CR2$Q"Q"Q!Q!Q!9::;<> 
+	B	RUBqE288RD>	:B	RUBqE288QC=	9B
br(
#CR2$R2$Q"Q"Q!R1#R1#./4568 
1a&	BAq"((B4.1A
b#
CQ"Q"Q"Y<.!9:r!   c                      S n S nSn[         R                  " / SQ5      nU" X#5      nSnU " X#5      R                  5       n[        XX6US 5      u  px[	        XtSSS9  [        XX6XX5      u  px[	        XtSSS9  g )Nc                     [         R                  " SUS   -  SUS   -  US   -  -   SUS   -  SUS   -  US   -  -
  SUS   S-  -  -
  SUS   S-  -  /5      $ )Nr   r   r   r$   r.   r   r   r8   r   s     r   r   test_num_jac.<locals>.fun  sz    yyAaDL31:!,,1Q4K#!*qt++cAaDAIo=!A$!)O
  	r!   c                     [         R                  " SSUS   -  SUS   -  /SSUS   -  SUS   -  -
  SUS   -  /SSUS   -  S//5      $ )	Nr   r   r.   r$   r   g     g    8Ar   r%   r   s     r   r   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   r   r   )r   r&   ravelr   r   )	r   r   r   r   J_true	thresholdrX   J_numfactors	            r   test_num_jacrl    sy     	
A
AYFIA	ACA)T:MEE48CA)<MEE48r!   c            
         S n S n[         R                  R                  S5        Sn[         R                  R                  U5      nU" U5      n[	        U5      nU " SUS S 2S 4   5      R                  5       n[        U SUR                  5       USS XE4S9u  px[        U SUR                  5       USS 5      u  p[        XR                  5       SSS	9  [        XSSS	9  [         R                  R                  SSUS
9n[        U SUR                  5       USUXE4S9u  px[        U SUR                  5       USU5      u  p[        XR                  5       SSS	9  [        XSSS	9  g )Nc                     USS  S-  US S S-  -
  n[         R                  " UR                  S   5      n[         R                  " USU-  45      [         R                  " SU-  U45      -   $ )Nr$   rG   r)   r.   )r   r   rH   r/   )r   r   r   r   s       r   r    test_num_jac_sparse.<locals>.fun  sc    abE1Hq"vqy HHQWWQZ yy!QU$ryy!a%'<<<r!   c                     [         R                  " X 4[        S9nSUS'   SUS'   [        SU S-
  5       H  nSXUS-
  US-   24'   M     SUS'   SUS'   U$ )NrV  r$   )r   r   r   r$   r.   )r)   r)   )r)   r<   )r   r   intrange)rL   Ar_   s      r   	structure&test_num_jac_sparse.<locals>.structure  si    HHaV3'$$q!a%A!"AQAo !&	&	r!   r   r   r   )r   -q=r   r   )r   )
r   randomseedrandnr
   rg  r   r   toarrayuniform)r   ru  rL   r   rt  groupsrX   J_num_sparsefactor_sparseJ_num_densefactor_denserk  s               r   test_num_jac_sparser    sP   =
	 IINN1
A
		A!A1FAqDz  "A #*#q!'')Qd45;#@L 'Q	1dD IKK!5!5!7U,Le%H YYq%a0F")#q!'')Qf45;#@L 'Q	1dF KKK!5!5!7U,Le%Hr!   c                  ^   S n S nS nS nS nSUl         SUl         SUl        S	nS
nSnSn[        R                  " U* U-  5      SU-
  U-  [        R                  " U* U-  5      -   -  n	SSU	/n
S	U-  n[	        U SU/U
X#U/SXVU4SUSSS9
nUR
                  S   nUR
                  S   nUR
                  S	   n[        US[        R                  -  S[        R                  -  /5        [        US[        R                  -  S[        R                  -  /5        [        X/5        [        R                  " SUS   S5      nUR                  U5      n[        US   [        R                  " UU-  5      SSS9  [        US   [        R                  " UU-  5      * SSS9  [        US	   SSU	-
  U	-  [        R                  " U* U-  5      -  S-   -  SSS9  UR                  U5      nUR                  U5      nUR                  U5      n[        US   [        R                  " US   5      SS9  [        US   [        R                  " US   5      5        [        US   [        R                  " US   5      5        [        US   [        R                  " US   5      SS9  [        US	   U/5        g )Nc                 2    Uu  pVnU* U-  X%-  X7-  SU-
  -  /$ )Nr$   r+   r   womegarM   zfinalr   r   r   s           r   sys3test_args.<locals>.sys3)  s*    aq%'13A;//r!   c           
      h    Uu  pVn[         R                  " SU* S/USS/SSUSSU-  -
  -  //5      nU$ )Nr   r$   r.   r%   )	r   r  r  rM   r  r   r   r   r   s	            r   sys3_jactest_args.<locals>.sys3_jac-  sN    aHHq5&!nam!QAaC[)+ , r!   c                     Uu  pVnU$ r   r+   r  s           r   sys3_x0decreasing$test_args.<locals>.sys3_x0decreasing4      ar!   c                     Uu  pVnU$ r   r+   r  s           r   sys3_y0increasing$test_args.<locals>.sys3_y0increasing8  r  r!   c                     Uu  pVnXt-
  $ r   r+   r  s           r   sys3_zfinaltest_args.<locals>.sys3_zfinal<  s    azr!   r)   r$   Tr.   r=   r#   gGz?r   r   g|=gvIh%<=)r   r   r  r   r   r   r   r  r#  g      ?g      ?   r   rw  r   gvIh%,=r   )r   r   r   rk   r   r   r   pir   r   r0   r1   r   r\   )r  r  r  r  r  r  rM   tfinalr  z0w0tendr   
x0events_t
y0events_tzfinalevents_tr   r  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!%Uv,>"U	,C aJaJ\\!_NJRUUCI 67JbeeT"%%Z 89NH- 	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            	      ,   S n [        U SSS/SS/S9n[        R                  " [        R                  R	                  UR
                  S S 2S4   [        R                  " S5      -
  5      5      n[        R                  " [        SS	9   [        U SSS/SS
/S9n[        R                  " [        R                  R	                  UR
                  S S 2S4   [        R                  " S5      -
  5      5      nS S S 5        WU:  d   eg ! , (       d  f       N= f)Nc                     US   US   4$ )Nr   r$   r+   r   s     r   rX   test_array_rtol.<locals>.fx  s    tQqTzr!   rq        ?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  u  s     AvBxtTl
;C66"))..q"uq	!9:;D 
k)B	C6B84-@vvbiinnSUU1b5\BFF1I%=>? 
D
 $;; 
D	Cs   A,D
Dr   c                    U S:X  a  US:  a  [         R                  " SS9  [        [        SS/[        R
                  " S5      U S9n[        UR                  5        [        UR                  S5        [        UR                  S	S
S9  g )Nr   r$   r2  r   r   rB   rG   r   r  r   r   )r   r   r   r    r   onesr   r   r   r   r   r   )r   r   results      r   test_integration_zero_rhsr    se    1A5JKx!R"''!*VDFFNN"FHHc.r!   c                     S n Sn[         R                  " [        US9   [        U SS/SS9  S S S 5        [        U SS/SS9n[	        UR
                  S	   [        R                  " S
5      5        g ! , (       d  f       NI= f)Nc                 
    X!-  $ r   r+   )r   r   as      r   fun_with_arg,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    sh     4G	y	0,1#B7 
1 L(QCe
<CCEE%L"&&,/	 
1	0s   A00
A>f0_fillc           	          Sn[         R                  " [        US9   [        [        SS/[
        R                  " SU 5      5        S S S 5        g ! , (       d  f       g = f)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    s?     EC	z	-(QGRWWQ%89 
.	-	-s   )A
A)r   r   r   r   r   c                     S n[        US[        R                  " S/5      U S9nUR                  (       d   e[	        UR
                  S   S5        g )Nc                     SU-  $ ro   r+   r   s     r   rX   test_zero_interval.<locals>.f  r.  r!   )r   r   r  r  r  )r   r   r&   r   r   r   )r   rX   r   s      r   test_zero_intervalr    s?    

Az288SE?6
BC;;;CEE%L#&r!   c                    ^ SmU4S jn[        UST4[        R                  " S/5      U S9nUR                  (       d   eg)zRegression test for gh-17341g-C6?c                 0   > U T:  a  [        S5      eSU-  $ )N'Function was evaluated outside intervalr.   )r
  )r   r   SMALLs     r   rX   /test_tbound_respected_small_interval.<locals>.f  s    u9FGG1ur!   r   r$   r  Nr   r   r&   r   )r   rX   r   r  s      @r   $test_tbound_respected_small_intervalr    s;     E AU|RXXqc]6
BC;;;r!   c                    ^ S mU4S jn[        US[        R                  " SS/5      SSSS	S
S9nUR                  (       d   eg)zRegression test for gh-8848c                 *    SU -  SU -  SU S-  -   -  -   $ )NrB   rt   r.   r+   )rs    r   V0test_tbound_respected_larger_interval.<locals>.V  s"    1urAv1---r!   c                    > U S:  d  U S:  a  [        S5      eUS   nUS   n[        R                  " U 5      nXC-  nSU-  ST" U5      -
  U-  SU-  U-  -   -  n[        R                  " XV/5      $ )Nr.   r  r   r$   g       gɿ)r
  r   rk   r&   )r   pPQr  dPdrdQdrr  s          r   func3test_tbound_respected_larger_interval.<locals>.func  s{    s7a!eFGGaDaDFF1IuaxD1Q4K1,q1uqy89xx%%r!   )r  r.   r$   r  gQ?FNr   r   )r   r   r   r  r   r   r  )r   r  r  r  s      @r   %test_tbound_respected_larger_intervalr    sK    .& t((As8, $"'"  "F >>>r!   c                 V   ^ S mSU4S jjnU" SSS5      nUR                   (       d   eg)zRegression test for gh-9198c                 X    U S:  a  [        S5      e[        R                  " / SQ5      nU$ )N   zCalled outside interval)ges='?gRr<>r   r   )r
  r   r&   )r   r   yprimes      r   reactions_func8test_tbound_respected_oscillator.<locals>.reactions_func  s/    G677 + , r!   c                 x   > [         R                  " / SQ5      nSnSn[        TXE4UR                  5       SXT-
  S9$ )N)gLOѧ`@gCYZa@rE  r   rE  g      i@T)r   r   )r   r&   r   copy)t_endn_timepointsshortest_delay_line
init_statet0t1r  s         r   run_sim22test_tbound_respected_oscillator.<locals>.run_sim2  sB    XXDE
#*&*"$'	+ 	+r!   i  rF   N)rB   i )r   )r   r  r  r  s      @r    test_tbound_respected_oscillatorr    s)    + dC%F>>>r!   c                     Sn Sn[         R                  " SS/5      nS H  u  p4[        R                  [        R                  [
        R                  SS4 H  n[        [        X2U[         R                  [        X25      [         R                  " XC-
  5      UX5
      nUS-  n[        [        X2UU[        X25      [         R                  " XC-
  5      UX5
      n[        Xx5        M     M     g	)
z0Verify that select_inital_step respects max_stepr   r   r   r   ))r#   r   )r#   r$   rG   r$   r.   N)r   r&   r   error_estimator_orderr   r   r   r6   r   signr   )	r   r   r   r  rP  method_orderstep_no_maxr   step_with_maxs	            r   test_inital_maxstepr    s    DD	3*	B)!77 66"88	L .lBG,.FF,8,?,.GGGL,A,8,08K #1}H/bg,4,8,@,.GGGL,A,8,08M 1' *r!   )]r   	itertoolsr   numpy.testingr   r   r   r   r   r   r	   r  numpyr   scipy.optimize._numdiffr
   scipy.integrater   r   r   r   r   r   r   r   scipy.integrate._ivp.commonr   r   scipy.integrate._ivp.baser   scipy.sparser   r   r    r'   r,   r3   r6   r9   r>   r@   rD   rY   r`   rb   rf   rh   rm   rp   rr   rw   r   r   markthread_unsafer   r   	fail_slowr   r   slowparametrizer   r   r  r  r  r  r  r&  r)  r0  r6  r>  rG  rK  rM  rT  ra  rl  r  r  r  r  r  nanr   r  r  r  r  r  r  r+   r!   r   <module>r      s    = =  *  1 L L L ' D 9 /5(:
G
H
>6:@)
9; * "CD?G E?GD+\ q> >6 GF #<= > 2s1l aV,: -:'&)9X$3N;7|6 "CD' E'<*CZA7";&8#8L(;V98*IZP/f& #VW/ X/	0 RVVRVV$45: 6: #MN' O' #MN O #MN O4 #MN O02r!   