
    -i#                         S SK r S SKrS SKrS SKJr  S SKJr  S rS r	S r
S r   SS jrS	 r\R                  R                  S
 5       rS rS rS r\R                  R                  S 5       rS rg)    N)assert_allclose)odec                 B   U R                   u  pSn[        U* S-   S5       H1  n[        R                  " X5      R	                  5       (       d  M.  U* n  O   Sn[        US-
  SS5       H2  n[        R                  " X5      R	                  5       (       d  M.  Un  X54$    X54$ )z7Returns ml and mu, the lower and upper band sizes of a.r      )shaperangenpdiagany)anrowsncolsmlkmus         `/var/www/html/venv/lib/python3.13/site-packages/scipy/integrate/tests/test_banded_ode_solvers.py_band_countr      s    77LE	
BE6!8Q771=B   
B57Ar"771=B6M	 # 6M    c                 $    UR                  U5      $ )zLinear system dy/dt = a * y)dottyr   s      r   _linear_funcr      s    558Or   c                     U$ )zJacobian of a * y is a. r   s      r   _linear_jacr      s    Hr   c           	         [        U5      u  p4[        USS5       Vs/ s H0  n[        R                  S/U-  [        R                  " X%5      4   PM2     nnUR                  [        R                  " U5      5        [        SU* S-
  S5       H@  nUR                  [        R                  [        R                  " X%5      S/U* -  4   5        MB     U$ s  snf )zBanded Jacobian.r   r   r   )r   r	   r
   r_r   append)r   r   r   r   r   r   bjacs          r   _linear_banded_jacr#   "   s    ^FB38Q3CD3CaBEE1#'2771=()3CDDKK
2s1ub!BEE"''!-!345 "K	 Es   7Cc	           
      D   U(       a  [        U 5      u  pOSn	Sn
U(       a1  U(       a  [        [        [        5      nO$[        [        [        5      nO[        [        5      nUc   [
        R                  " U 5      (       a  SnOSnUR                  UUUXSSS9  SnUR                  X5        UR                  U 5        UR                  U 5        U/nU/nUR                  5       (       a  UR                  U:  a{  UR                  UR                  U-   5        UR                  UR                  5        UR                  UR                  5        UR                  5       (       a  UR                  U:  a  M{  [
        R                   " U5      n[
        R                   " U5      nX4$ )av  Use scipy.integrate.ode to solve a linear system of ODEs.

a : square ndarray
    Matrix of the linear system to be solved.
y0 : ndarray
    Initial condition
tend : float
    Stop time.
dt : float
    Step size of the output.
solver : str
    If not None, this must be "vode", "lsoda" or "zvode".
method : str
    Either "bdf" or "adams".
use_jac : bool
    Determines if the jacobian function is passed to ode().
with_jacobian : bool
    Passed to ode.set_integrator().
banded : bool
    Determines whether a banded or full jacobian is used.
    If `banded` is True, `lband` and `uband` are determined by the
    values in `a`.
Nzvodevode&.>绽|=)with_jacobianmethodlbandubandrtolatolr   )r   r   r   r#   r   r
   iscomplexobjset_integratorset_initial_valueset_f_paramsset_jac_params
successfulr   	integrater!   r   array)r   y0tenddtsolverr*   use_jacr)   bandedr+   r,   rt0r   r   s                  r   _solve_linear_sysr?   ,   sF   4 "1~uL"45AL+.A~??1FFV#0" U	   
BNN1Q	A	A
,,..QSS4Z	ACC"H		 ,,..QSS4Z
 	A
A4Kr   c                    [         R                  R                  U 5      u  p4[         R                  R                  XA5      nU[         R                  " X2R                  SS5      -  5      -  nUR                  UR                  5      nU$ )z
Analytical solution to the linear differential equations dy/dt = a*y.

The solution is only valid if `a` is diagonalizable.

Returns a 2-D array with shape (len(t), len(y0)).
r   r   )r
   linalgeigsolveexpreshaper   T)r   r7   r   lamvcesols           r   _analytical_solutionrL   q   sa     YY]]1FC
		A	BFF32q))**A
%%*CJr   c            
      .  ^^^^ [         R                  " SSS5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  " U5      n[         R                  " U5      n[         R                  " U5      nXX4/m/ mT HI  n[         R
                  " S	UR                  S   S	-   5      n[        XVU 5      nTR                  X`U45        MK     UU4S
 jn[        [        T5      5       H<  n	SS/SS/SS/SS/SS//n
[        R                  " U
6  H  u  ppnU" XXX5        M     M>     USU-  -
  n[         R                  " [         R                  " U5      5      nUU/m/ mT HL  n[         R
                  " S	UR                  S   S	-   5      S-   n[        XVU 5      nTR                  X`U45        MN     UU4S jn[        [        T5      5       H9  n	SS/SS/SS/SS//n
[        R                  " U
6  H  u  ppU" U	SXX5        M     M;     g )Nr         ?   )g333333皙?        rQ   rQ   )g?g      g?rQ   rQ   )rP   rP   gٿrP   rQ   )rQ   g333333?ggg333333ӿ)rQ   rQ   rP   rP   gffffffr   c                    > TU    nTU    u  pxn	[        XgUS   US   US   -
  UUUUUS9	u  p[        X5        [        X5        g Nr   r   r   )r8   r9   r:   r*   r;   r)   r<   r?   r   )idxr:   methr;   with_jacr<   r   r7   t_exacty_exactr   r   real_matricesreal_solutionss               r   
check_real+test_banded_ode_solvers.<locals>.check_real   sb    #-c2W &-bk$+AJ$;(.(,)0/7(.0 	##r   r&   lsodabdfadamsFTy              ?y              ?c                    > TU    nTU    u  pxn	[        XgUS   US   US   -
  UUUUUS9	u  p[        X5        [        X5        g rS   rT   )rU   r:   rV   r;   rW   r<   r   r7   rX   rY   r   r   complex_matricescomplex_solutionss               r   check_complex.test_banded_ode_solvers.<locals>.check_complex   sb    S!05W &-bk$+AJ$;(.(,)0/7(.0 	##r   r%   )r
   linspacer6   triutrilaranger   rL   r!   r	   len	itertoolsproductr   )rX   a_reala_real_uppera_real_lowera_real_diagr   r7   rY   r\   rU   pr:   rV   r;   rW   r<   	a_complexa_complex_diagrd   rb   rc   rZ   r[   s                      @@@@r   test_banded_ode_solversrt      s    kk!S!$G
 XX11131	3 4F 776?L 776?L '','K<EMNYYq!''!*q.)&qg6rG45 
$ S'(gWT]T]T]	
 8A7H7H!7L3F'VsD8D 8M ) &I WWRWWY/0N!>2YYq!''!*q.)B.&qg6  "w!78 
$ S)*+WT]T]T] 09/@/@!/D+D8#wxH 0E ,r   c                     [         R                  " US   SUS   -  SUS   -  US   -  -   SUS   -  SUS   -  US   -  -
  SUS   S-  -  -
  SUS   S-  -  US	   /5      $ )
Nr   {Gzr        @      {Gz?g    8|A   r
   r6   r   r   s     r   stiff_fr~      s    88	!!sQqTzAaD((qtcAaDj1Q4''#!a-7adAg	!  r   c           
          [         R                  " / SQSSSUS   -  SUS   -  S/SSSUS   -  S	US   -  -
  SUS   -  S/SSS	US   -  SS// S
Q/5      $ )N)r   r   r   r   r   r   rv   rw   ry   rx   rz            8A)r   r   r   r   r   r|   r}   s     r   	stiff_jacr      s}    88>	
Es1Q4x#ad(A>	
T4!A$;1Q4/adA>	
U1Q4ZA>>  r   c           
          [         R                  " SSSSUS   -  S/SSSUS   -  SUS   -  S/SSSUS   -  SUS   -  -
  SS/SS	SUS   -  SS//5      $ )
Nr   rw   rx   ry   r   r   rv   r   rz   r|   r}   s     r   banded_stiff_jacr      s    88	
a#ad(A6	
s1Q4xadA6	
E4!9U1Q4Z'A6	
TU1Q4ZA6	  r   c                  v    [        SSS9u  pS H'  n[        US5      u  p4[        X05        [        XA5        M)     g )NTF)r;   r<   )TF)_solve_robertson_lsodar   )tfullyfullr;   r   r   s        r   test_banded_lsodar      s:     *$uELE %gt4!! !r   c                    U (       a  U(       a  [         nO	[        nOS nU(       a  SnSnOS nS n[        [        U5      nUR	                  SX4SSS9  SnSnSn[
        R                  " / S	Q5      n	UR                  X5        U/n
U	/nUR                  5       (       a  UR                  U:  a{  UR                  UR                  U-   5        U
R                  UR                  5        UR                  UR                  5        UR                  5       (       a  UR                  U:  a  M{  UR                  R                  S
   S:  d   e[
        R                  " U
5      n
[
        R                  " U5      nX4$ )Nr   rx   r^   r'   r(   )r+   r,   r-   r.   r   
   )rN   rN   rQ   rQ   rN      )r   r   r   r~   r0   r
   r6   r1   r4   r   r5   r!   r   _integratoriwork)r;   r<   jacr+   r,   r=   r>   r9   r8   r7   r   r   s               r   r   r     s1   "CCGSAW U   
B	
BD	+	,B	A	A
,,..QSS4Z	ACC"H		 ,,..QSS4Z ==r"Q&&&
A
A4Kr   )r   rP   Nr_   TFF)rk   pytestnumpyr
   numpy.testingr   scipy.integrater   r   r   r   r#   r?   rL   markthread_unsafert   r~   r   r   r   r   r   r   r   <module>r      s       )  

 ),9=27BJ ^I ^IF " ")r   