§
    «³Ùg°
  ã                   óB   — d Z ddlmZ ddlmZ ddlmZ dd„Zd„ Zd	„ Z	d
S )z)Numerical Methods for Holonomic Functionsé    ©Úsympify)ÚDMFsubs)ÚmpFÚRK4c           
      ó¬  ‡‡— | j         }|j        Š|j        j        }|                     ¦   «         }|dk    rt
          }nt          }g Š|j        D ]<}‰                     | 	                    | 
                    ¦   «         ¦  «        ¦  «         Œ=ˆˆfd„t          ‰¦  «        D ¦   «         }	| j        }
t          |
¦  «        ‰k     rt          d¦  «        ‚| j        } ||	||d         |
‰¦  «        g}t!          |dd…         ¦  «        D ]3\  }}|                      ||	||         ||d         ‰¦  «        ¦  «         Œ4|sd„ |D ¦   «         S t#          |¦  «        S )	zk
    Numerical methods for numerical integration along a given set of
    points in the complex plane.
    ÚEulerc                 ó4   •— g | ]}‰|          ‰‰         z  ‘ŒS © r   )Ú.0ÚiÚaÚdmfs     €€úO/granary/edev/quantum/lib/python3.11/site-packages/sympy/holonomic/numerical.pyú
<listcomp>z_evalf.<locals>.<listcomp>   s(   ø€ Ð
.Ð
.Ð
. ˆC�ŒFˆ7�S˜”VÑÐ
.Ð
.Ð
.ó    zNot Enough Initial Conditionsr   é   Néÿÿÿÿc                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS )r   r   ©r   r   s     r   r   z_evalf.<locals>.<listcomp>)   s"   € Ð+Ð+Ð+ !•˜˜!œ‘”Ð+Ð+Ð+r   )ÚannihilatorÚorderÚparentÚbaseÚ	get_fieldÚ_eulerÚ_rk4Ú
listofpolyÚappendÚnewÚto_listÚrangeÚy0ÚlenÚ	TypeErrorÚx0Ú	enumerater   )ÚfuncÚpointsÚderivativesÚmethodÚannÚRÚKÚmethÚjÚredr#   r&   Úsolr   r   r   s                 @@r   Ú_evalfr3   	   sg  øø€ ð Ô
€CØŒ	€AØŒ
Œ€AØ	�Š‰Œ€Aà�ÒÐÝˆˆåˆà
€CØŒ^ð 'ð 'ˆØ�
Š
�1—5’5˜Ÿš™œÑ%Ô%Ñ&Ô&Ð&Ð&à
.Ð
.Ð
.Ð
.Ð
.¥U¨1¡X¤XÐ
.Ñ
.Ô
.€Cà	Œ€BÝ
ˆ2�w„w�‚{€{ÝÐ7Ñ8Ô8Ð8Ø	Œ€BØˆ4��R˜ œ B¨Ñ*Ô*Ð
+€Cå˜&   œ*Ñ%Ô%ð 8ð 8‰ˆˆ1Ø�
Š
�4�4˜˜V AœY¨¨3¨r¬7°AÑ6Ô6Ñ7Ô7Ð7Ð7àð Ø+Ð+ sÐ+Ñ+Ô+Ð+å�s‰|Œ|Ðr   c           	      óP  — t          |¦  «                             t          j        ¦  «        }t          |¦  «                             t          j        ¦  «        }d„ |D ¦   «         }||z
  }|dd…         }	d}
t	          |¦  «        D ]P}|
t          t          | |         |d¬¦  «        ¦  «                             t          j        ¦  «        ||         z  z  }
ŒQ|	                     |
¦  «         g }t	          |¦  «        D ])}|                     ||         ||	|         z  z   ¦  «         Œ*|S )zs
    Euler's method for numerical integration.
    From x0 to x1 with initial values given at x0 as vector y0.
    c                 óf   — g | ].}t          |¦  «                             t          j        ¦  «        ‘Œ/S r   ©r   Ú
_to_mpmathr   Úprecr   s     r   r   z_euler.<locals>.<listcomp>6   ó.   € Ð
6Ð
6Ð
6¨a�7�1‰:Œ:× Ò ¥¤Ñ)Ô)Ð
6Ð
6Ð
6r   r   Nr   T©Úmpm©r   r7   r   r8   r"   r   r   )r1   r&   Úx1r#   r   ÚAÚBÚy_0ÚhÚf_0Úf_0_nr   r2   s                r   r   r   .   s  € õ 	�‰Œ×Ò�rœwÑ'Ô'€AÝ�‰Œ×Ò�rœwÑ'Ô'€AØ
6Ð
6°2Ð
6Ñ
6Ô
6€CØ	ˆA‰€AØ
ˆaˆbˆbŒ'€CØ€Eå�1‰XŒXð Tð TˆØ•�  Q¤¨°Ð5Ñ5Ô5Ñ6Ô6×AÒAÅ"Ä'ÑJÔJÈSÐQRÌVÑSÑSˆˆØ‡J‚JˆuÑÔÐà
€CÝ�1‰XŒXð (ð (ˆØ�
Š
�3�q”6˜A  A¤™JÑ&Ñ'Ô'Ð'Ð'à€Jr   c           
      ó’  ‡‡‡‡‡— t          |¦  «                             t          j        ¦  «        }t          |¦  «                             t          j        ¦  «        }d„ |D ¦   «         Š||z
  Šd}d}d}	d}
‰dd…         Št	          |¦  «        D ]P}|t          t          | |         |d¬¦  «        ¦  «                             t          j        ¦  «        ‰|         z  z  }ŒQ‰                     |¦  «         ˆˆˆfd„t	          d|¦  «        D ¦   «         Št	          |¦  «        D ]e}|t          t          | |         |‰dz  z   d¬¦  «        ¦  «                             t          j        ¦  «        ‰|         ‰|         ‰z  dz  z   z  z  }Œf‰                     |¦  «         ˆˆˆfd	„t	          d|¦  «        D ¦   «         Št	          |¦  «        D ]e}|	t          t          | |         |‰dz  z   d¬¦  «        ¦  «                             t          j        ¦  «        ‰|         ‰|         ‰z  dz  z   z  z  }	Œf‰                     |	¦  «         ˆˆˆfd
„t	          d|¦  «        D ¦   «         }t	          |¦  «        D ]_}|
t          t          | |         |‰z   d¬¦  «        ¦  «                             t          j        ¦  «        ‰|         ‰|         ‰z  z   z  z  }
Œ`|                     |
¦  «         g }t	          |¦  «        D ]M}|                     ‰|         ‰‰|         d‰|         z  z   d‰|         z  z   ||         z   z  dz  z   ¦  «         ŒN|S )z1
    Runge-Kutta 4th order numerical method.
    c                 óf   — g | ].}t          |¦  «                             t          j        ¦  «        ‘Œ/S r   r6   r   s     r   r   z_rk4.<locals>.<listcomp>M   r9   r   r   r   NTr:   c                 ó>   •— g | ]}‰|         ‰|         ‰z  d z  z   ‘ŒS ©é   r   )r   r   rB   rA   r@   s     €€€r   r   z_rk4.<locals>.<listcomp>Z   ó.   ø€ Ð
4Ð
4Ð
4 1ˆ3ˆqŒ6�C˜”F˜1‘H˜Q‘JÑÐ
4Ð
4Ð
4r   rH   c                 ó>   •— g | ]}‰|         ‰|         ‰z  d z  z   ‘ŒS rG   r   )r   r   Úf_1rA   r@   s     €€€r   r   z_rk4.<locals>.<listcomp>_   rI   r   c                 ó8   •— g | ]}‰|         ‰|         ‰z  z   ‘ŒS r   r   )r   r   Úf_2rA   r@   s     €€€r   r   z_rk4.<locals>.<listcomp>d   s*   ø€ Ð
2Ð
2Ð
2 ˆ3ˆqŒ6�C˜”F˜1‘HÑÐ
2Ð
2Ð
2r   é   r<   )r1   r&   r=   r#   r   r>   r?   rC   Úf_1_nÚf_2_nÚf_3_nr   Úf_3r2   rB   rK   rM   rA   r@   s                 @@@@@r   r   r   F   sd  øøøøø€ õ
 	�‰Œ×Ò�rœwÑ'Ô'€AÝ�‰Œ×Ò�rœwÑ'Ô'€AØ
6Ð
6°2Ð
6Ñ
6Ô
6€CØ	ˆA‰€Aà€EØ€EØ€EØ€Eà
ˆaˆbˆbŒ'€CÝ�1‰XŒXð Tð TˆØ•�  Q¤¨°Ð5Ñ5Ô5Ñ6Ô6×AÒAÅ"Ä'ÑJÔJÈSÐQRÌVÑSÑSˆˆØ‡J‚JˆuÑÔÐà
4Ð
4Ð
4Ð
4Ð
4Ð
4­¨a°©¬Ð
4Ñ
4Ô
4€CÝ�1‰XŒXð ið iˆØ•�  Q¤¨¨Q¨q©S©°dÐ;Ñ;Ô;Ñ<Ô<×GÒGÍÌÑPÔPÐTWÐXYÔTZÐ]`ÐabÔ]cÐdeÑ]eÐfgÑ]gÑTgÑhÑhˆˆØ‡J‚JˆuÑÔÐà
4Ð
4Ð
4Ð
4Ð
4Ð
4­¨a°©¬Ð
4Ñ
4Ô
4€CÝ�1‰XŒXð ið iˆØ•�  Q¤¨¨Q¨q©S©°dÐ;Ñ;Ô;Ñ<Ô<×GÒGÍÌÑPÔPÐTWÐXYÔTZÐ]`ÐabÔ]cÐdeÑ]eÐfgÑ]gÑTgÑhÑhˆˆØ‡J‚JˆuÑÔÐà
2Ð
2Ð
2Ð
2Ð
2Ð
2¥e¨A¨q¡k¤kÐ
2Ñ
2Ô
2€CÝ�1‰XŒXð eð eˆØ•�  Q¤¨¨Q©°DÐ9Ñ9Ô9Ñ:Ô:×EÒEÅbÄgÑNÔNÐRUÐVWÔRXÐ[^Ð_`Ô[aÐbcÑ[cÑRcÑdÑdˆˆØ‡J‚JˆuÑÔÐà
€CÝ�1‰XŒXð Eð EˆØ�
Š
�3�q”6˜A  Q¤¨¨#¨a¬&©¡°°3°q´6±Ñ!9¸#¸a¼&Ñ!@ÑAÀ!ÑCÑCÑDÔDÐDÐDà€Jr   N)Fr   )
Ú__doc__Úsympy.core.sympifyr   Úsympy.holonomic.holonomicr   Úmpmathr   r3   r   r   r   r   r   ú<module>rW      s~   ðØ /Ð /à &Ð &Ð &Ð &Ð &Ð &Ø -Ð -Ð -Ð -Ð -Ð -à Ð Ð Ð Ð Ð ð"ð "ð "ð "ðJð ð ð0'ð 'ð 'ð 'ð 'r   