Ë
    0Ò^j$  ã                   ó|   — 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d
„ Zd„ Zd„ Zd„ Zd„ Z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         úx/var/www/ramen.bs-engineer-server.com/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}|j                  «       g}|j                  «       r‘|j                  |k  r‚|j                  |j                  |z   «       |j                  |j                  «       |j                  |j                   j                  «       «       |j                  «       r|j                  |k  rŒ‚t        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Ú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ÚcopyÚ
successfulr   Ú	integrater!   r   Úarray)r   Úy0ÚtendÚdtÚsolverr*   Úuse_jacr)   Úbandedr+   r,   ÚrÚt0r   r   s                  r   Ú_solve_linear_sysr@   +   sR  € ñ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   r8   r   ÚlamÚvÚcÚeÚsols           r   Ú_analytical_solutionrM   p   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   ç      ð?é   )g333333ã¿çš™™™™™¹?ç        rR   rR   )gš™™™™™É?g      à¿gÍÌÌÌÌÌì?rR   rR   )rQ   rQ   gš™™™™™Ù¿rQ   rR   )rR   g333333Ó?gš™™™™™¹¿gÍÌÌÌÌÌì¿g333333Ó¿)rR   rR   rQ   rQ   gffffffæ¿r   c                 ó˜   •— ‰|    }‰|    \  }}}	t        |||d   |d   |d   z
  |||||¬«	      \  }
}t        |
|«       t        ||	«       y ©Nr   r   r   )r9   r:   r;   r*   r<   r)   r=   ©r@   r   )Úidxr;   Úmethr<   Úwith_jacr=   r   r8   Ú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 rT   rU   )rV   r;   rW   r<   rX   r=   r   r8   rY   rZ   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
   Úlinspacer7   ÚtriuÚtrilÚaranger   rM   r!   r	   ÚlenÚ	itertoolsÚproductr   )rY   Úa_realÚa_real_upperÚa_real_lowerÚa_real_diagr   r8   rZ   r]   rV   Úpr;   rW   r<   rX   r=   Ú	a_complexÚa_complex_diagrd   rb   rc   r[   r\   s                      @@@@r   Útest_banded_ode_solversrs      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   c                 óÀ   — t        j                  |d   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  |d	   g«      S )
Nr   ç{®Gáz¤¿r   ç     ˆÃ@é   é   ç{®Gáz¤?g    8œ|Aé   ©r
   r7   ©r   r   s     r   Ústiff_fr}   â   sˆ   € Ü�8‰8Ø	ˆ!‰Ø��!‘‰�s˜Q˜q™T‘z A a¡DÑ(Ñ(Øˆq�‰t‰�c˜A˜a™D‘j 1 Q¡4Ñ'Ñ'¨#°°!±°a±©-Ñ7Øˆa�‰d�A‰g‰Ø	ˆ!‰ðó ð r   c           
      óª   — t        j                  g d¢ddd|d   z  d|d   z  dgddd|d   z  d	|d   z  z
  d|d   z  dgddd	|d   z  ddgg d
¢g«      S )N)r   r   r   r   r   r   ru   rv   rx   rw   ry   ç     ˆÃÀç    8œŒA)r   r   r   r   r   r{   r|   s     r   Ú	stiff_jacr�   ë   s}   € Ü�8‰8Ú>Ø	
ˆE s¨1¨Q©4¡x°#°a¸±d±(¸AÐ>Ø	
ˆT�4˜!˜A™$‘; ¨1¨Q©4¡Ñ/°°a¸±d±¸AÐ>Ø	
� U¨1¨Q©4¡Z¸¸AÐ>Ú>ðó ð r   c           
      óª   — t        j                  dddd|d   z  dgddd|d   z  d|d   z  dgddd|d   z  d|d   z  z
  ddgdd	d|d   z  ddgg«      S )
Nr   rv   rw   rx   r   r   ru   r€   ry   r{   r|   s     r   Úbanded_stiff_jacrƒ   ô   s…   € Ü�8‰8Ø	
� a¨#¨a°©d©(°AÐ6Ø	
�˜s 1 Q¡4™x¨¨a°©d©°AÐ6Ø	
ˆE�4˜˜!™‘9˜U 1 Q¡4™ZÑ'°°AÐ6Ø	
ˆT˜U 1 Q¡4™Z°°AÐ6ð	ó ð r   c                  ó„   — t        dd¬«      \  } }dD ]+  }t        |d«      \  }}t        || «       t        ||d¬«       Œ- y )NTF)r<   r=   )TFgH¯¼šò×Š>)r-   )Ú_solve_robertson_lsodar   )ÚtfullÚyfullr<   r   r   s        r   Útest_banded_lsodarˆ   ü   sI   € ä)°$¸uÔE�L€Eˆ5à ò -ˆÜ% g¨tÓ4‰ˆˆ1Ü˜˜5Ô!ô 	˜˜5 tÖ,ñ-r   c                 óì  — | r|rt         }n	t        }nd }|rd}d}nd }d }t        t        |«      }|j	                  d||dd¬«       d}d}d}t        j                  g d	¢«      }	|j                  |	|«       |g}
|	j                  «       g}|j                  «       r‘|j                  |k  r‚|j                  |j                  |z   «       |
j                  |j                  «       |j                  |j                  j                  «       «       |j                  «       r|j                  |k  rŒ‚|j                  j                  d
   dkD  sJ ‚t        j                  |
«      }
t        j                  |«      }|
|fS )Nr   rw   r^   r'   r(   )r+   r,   r-   r.   r   é
   )rO   rO   rR   rR   rO   é   )rƒ   r�   r   r}   r0   r
   r7   r1   r4   r5   r   r6   r!   r   Ú_integratorÚiwork)r<   r=   Újacr+   r,   r>   r?   r:   r9   r8   r   r   s               r   r…   r…     s@  € áÙÜ"‰Cä‰CàˆáØˆØ‰àˆØˆäŒG�SÓ€AØ×Ñ�WØ ¨Ø Uð ô ð 
€BØ	
€BØ€DÜ	�‰Ò+Ó	,€BØ×Ñ˜˜BÔà	ˆ€AØ	�‰‹ˆ€AØ
�,‰,Œ.˜QŸS™S 4šZØ	�‰�A—C‘C˜"‘HÔØ	�‰�—‘ŒØ	�‰�—‘—‘“Ôð �,‰,Œ.˜QŸS™S 4›Zð �=‰=×Ñ˜rÑ" QÒ&Ð&Ð&ä
�‰�‹€AÜ
�‰�‹€AØˆaˆ4€Kr   )r   rQ   Nr_   TFF)rj   Únumpyr
   Únumpy.testingr   Úscipy.integrater   r   r   r   r#   r@   rM   rs   r}   r�   rƒ   rˆ   r…   r   r   r   ú<module>r’      s]   ðÛ Û Ý )Ý òò ò
ò
ð ),Ø9=Ø27óBòJò^IòFòòò	-ó)r   