Ë
    âQ(hH  ã                   ó˜   — d dl Z d dlZd dlZd dlmZ d dlmZ d„ Zd„ Z	d„ Z
d„ Z	 	 	 dd„Zd	„ Zej                  j                  d
„ «       Zy)é    N)Úassert_allclose)Úodec                 ó,  — | j                   \  }}d}t        | dz   d«      D ]+  }t        j                  | |«      j	                  «       sŒ(| } n d}t        |dz
  dd«      D ]-  }t        j                  | |«      j	                  «       sŒ(|} ||fS  ||fS )z7Returns ml and mu, the lower and upper band sizes of a.r   é   éÿÿÿÿ)ÚshapeÚrangeÚnpÚdiagÚany)ÚaÚnrowsÚncolsÚmlÚkÚmus         úk/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/integrate/tests/test_banded_ode_solvers.pyÚ_band_countr      s¥   € à—7‘7�L€Eˆ5Ø	
€BÜ�E�6˜!‘8˜QÓò ˆÜ�7‰7�1�a‹=×ÑÕØ�ˆBÙðð 
€BÜ�5˜‘7˜A˜rÓ"ò ˆÜ�7‰7�1�a‹=×ÑÕØˆBØØˆrˆ6€Mð	ð ˆrˆ6€Mó    c                 ó$   — |j                  |«      S )zLinear system dy/dt = a * y)Údot©ÚtÚyr   s      r   Ú_linear_funcr      s   € à�5‰5�‹8€Or   c                 ó   — |S )zJacobian of a * y is a.© r   s      r   Ú_linear_jacr      s   € à€Hr   c           	      ó¤  — t        |«      \  }}t        |dd«      D �cg c]/  }t        j                  dg|z  t        j                  ||«      f   ‘Œ1 }}|j                  t        j                  |«      «       t        d| dz
  d«      D ]?  }|j                  t        j                  t        j                  ||«      dg| z  f   «       ŒA |S c c}w )zBanded Jacobian.r   r   r   )r   r	   r
   Úr_r   Úappend)r   r   r   r   r   r   Úbjacs          r   Ú_linear_banded_jacr#   "   s²   € ä˜‹^�F€BˆÜ38¸¸QÀÓ3CÖD¨aŒB�E‰E�1�#˜‘'œ2Ÿ7™7 1 a›=Ð(Ó)ÐD€DÐDØ‡K�K”—‘˜“
ÔÜ�2˜�s˜1‘u˜bÓ!ò 6ˆØ�‰”B—E‘Eœ"Ÿ'™' ! Q›-¨!¨°°©Ð3Ñ4Õ5ð6à€Kùò	 Es   ž4Cc	           	      ó  — |rt        | «      \  }	}
nd}	d}
|r,|rt        t        t        «      }n$t        t        t        «      }nt        t        «      }|€t        j                  | «      rd}nd}|j                  ||||	|
dd¬«       d}|j                  ||«       |j                  | «       |j                  | «       |g}|g}|j                  «       rƒ|j                  |k  rt|j                  |j                  |z   «       |j                  |j                  «       |j                  |j                  «       |j                  «       r|j                  |k  rŒtt        j                   |«      }t        j                   |«      }||fS )aÊ  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Úvodeg•Ö&è.>g»½×Ùß|Û=)Ú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=   ,   sE  € ñ4 Ü" 1“~‰ˆ‰uàˆØˆáÙÜ”LÔ"4Ó5‰Aä”L¤+Ó.‰Aä”Óˆà€~Ü�?‰?˜1ÔØ‰FàˆFà×Ñ�VØ#0Ø"Ø ¨Ø Uð	 ô ð 
€BØ×Ñ˜˜BÔØ‡N�N�1ÔØ×Ñ�QÔà	ˆ€AØ	ˆ€AØ
�,‰,Œ.˜QŸS™S 4šZØ	�‰�A—C‘C˜"‘HÔØ	�‰�—‘ŒØ	�‰�—‘Œð �,‰,Œ.˜QŸS™S 4›Zô
 	�‰�‹€AÜ
�‰�‹€AØˆaˆ4€Kr   c                 ó  — t         j                  j                  | «      \  }}t         j                  j                  ||«      }|t        j                  ||j                  dd«      z  «      z  }|j                  |j                  «      }|S )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   r5   r   ÚlamÚvÚcÚeÚsols           r   Ú_analytical_solutionrJ   q   sg   € ô �Y‰Y�]‰]˜1Ó�F€CˆÜ
�	‰	�‰˜˜2Ó€AØ	ŒB�F‰F�3˜Ÿ™ 2 qÓ)Ñ)Ó*Ñ*€AØ
�%‰%�—‘‹*€CØ€Jr   c            
      ó  ‡‡‡‡— t        j                  ddd«      } t        j                  g d¢g d¢g d¢g d¢g d¢g«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }||||gŠg Š‰D ]I  }t        j
                  d	|j                  d   d	z   «      }t        ||| «      }‰j                  || |f«       ŒK ˆˆfd
„}t        t        ‰«      «      D ]=  }	ddgddgddgddgddgg}
t        j                  |
Ž D ]  \  }}}}} ||	|||||«       Œ Œ? |d|z  z
  }t        j                  t        j                  |«      «      }||gŠg Š‰D ]L  }t        j
                  d	|j                  d   d	z   «      dz   }t        ||| «      }‰j                  || |f«       ŒN ˆˆfd„}t        t        ‰«      «      D ]9  }	ddgddgddgddgg}
t        j                  |
Ž D ]  \  }}}} ||	d||||«       Œ Œ; y )Nr   g      ð?é   )g333333ã¿çš™™™™™¹?ç        rN   rN   )gš™™™™™É?g      à¿gÍÌÌÌÌÌì?rN   rN   )rM   rM   gš™™™™™Ù¿rM   rN   )rN   g333333Ó?gš™™™™™¹¿gÍÌÌÌÌÌì¿g333333Ó¿)rN   rN   rM   rM   gffffffæ¿r   c                 ó˜   •— ‰|    }‰|    \  }}}	t        |||d   |d   |d   z
  |||||¬«	      \  }
}t        |
|«       t        ||	«       y ©Nr   r   r   )r6   r7   r8   r(   r9   r'   r:   ©r=   r   )Úidxr8   Úmethr9   Úwith_jacr:   r   r5   Út_exactÚy_exactr   r   Úreal_matricesÚreal_solutionss               €€r   Ú
check_realz+test_banded_ode_solvers.<locals>.check_real¡   sl   ø€ Ø˜#ÑˆØ-¨cÑ2ÑˆˆG�WÜ   BØ&-¨b¡kØ$+¨A¡J°¸±Ñ$;Ø(.Ø(,Ø)0Ø/7Ø(.ô0‰ˆˆ1ô 	˜˜7Ô#Ü˜˜7Õ#r   r&   ÚlsodaÚbdfÚadamsFTy              à?y              ð?c                 ó˜   •— ‰|    }‰|    \  }}}	t        |||d   |d   |d   z
  |||||¬«	      \  }
}t        |
|«       t        ||	«       y rP   rQ   )rR   r8   rS   r9   rT   r:   r   r5   rU   rV   r   r   Úcomplex_matricesÚcomplex_solutionss               €€r   Úcheck_complexz.test_banded_ode_solvers.<locals>.check_complexÈ   sl   ø€ Ø˜SÑ!ˆØ0°Ñ5ÑˆˆG�WÜ   BØ&-¨b¡kØ$+¨A¡J°¸±Ñ$;Ø(.Ø(,Ø)0Ø/7Ø(.ô0‰ˆˆ1ô 	˜˜7Ô#Ü˜˜7Õ#r   r%   )r
   Úlinspacer4   ÚtriuÚtrilÚaranger   rJ   r!   r	   ÚlenÚ	itertoolsÚproductr   )rU   Úa_realÚa_real_upperÚa_real_lowerÚa_real_diagr   r5   rV   rY   rR   Úpr8   rS   r9   rT   r:   Ú	a_complexÚa_complex_diagr`   r^   r_   rW   rX   s                      @@@@r   Útest_banded_ode_solversro   €   sa  û€ ô
 �k‰k˜!˜S !Ó$€Gô
 �X‰XÒ1Ú1Ú1Ú3Ú1ð	3ó 4€Fô —7‘7˜6“?€Lô —7‘7˜6“?€Lô —'‘'˜,Ó'€Kà˜\¨<¸ÐE€MØ€Nàò 6ˆÜ�Y‰Y�q˜!Ÿ'™' !™* q™.Ó)ˆÜ& q¨"¨gÓ6ˆØ×Ñ˜r 7¨GÐ4Õ5ð6õ
$ô ”S˜Ó'Ó(ò EˆØ�gÐØ�WÐØ�Tˆ]Ø�Tˆ]Ø�Tˆ]ð	ˆô
 8A×7HÑ7HÈ!Ð7Lò 	EÑ3ˆF�D˜' 8¨VÙ�s˜F D¨'°8¸VÕDñ	EðEð ˜ ™Ñ&€Iô —W‘WœRŸW™W YÓ/Ó0€Nà! >Ð2ÐØÐàò 9ˆÜ�Y‰Y�q˜!Ÿ'™' !™* q™.Ó)¨BÑ.ˆÜ& q¨"¨gÓ6ˆØ× Ñ  " g¨wÐ!7Õ8ð9õ
$ô ”SÐ)Ó*Ó+ò IˆØ�WÐØ�Tˆ]Ø�Tˆ]Ø�Tˆ]ðˆô 09×/@Ñ/@À!Ð/Dò 	IÑ+ˆD�'˜8 VÙ˜#˜w¨¨g°xÀÕHñ	IñIr   )r   rM   Nr[   TFF)rf   ÚpytestÚnumpyr
   Únumpy.testingr   Úscipy.integrater   r   r   r   r#   r=   rJ   ÚmarkÚthread_unsafero   r   r   r   ú<module>rv      sa   ðÛ Û Û Ý )Ý òò ò
ò
ð ),Ø9=Ø27óBòJð ‡�×Ññ[Ió ñ[Ir   