
    Ed
                     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 ]/}                    |	                    |j
                             0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     9lib/python3.11/site-packages/sympy/holonomic/numerical.py
<listcomp>z_evalf.<locals>.<listcomp>   s(    
.
.
.CF7SV
.
.
.    zNot Enough Initial Conditionsr      Nc                 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reprangey0len	TypeErrorx0	enumerater   )funcpointsderivativesmethodannRKmethjredr#   r&   solr   r   r   s                 @@r   _evalfr3   	   sd    
C	A
A	A 
C^ ! !

155<<    
.
.
.
.
.U1XX
.
.
.C	B
2ww{ 97888	B4RB**
+C&*%% 8 81

44VAY3r7A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
6a71::  ))
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    	rw''Arw''A
6
62
6
6
6C	AA
abb'CE1XX T TQ55566AA"'JJSQRVSSJJu
C1XX ( (

3q6A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
413q6CF1HQJ
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3q6CF1H
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   
 	rw''Arw''A
6
62
6
6
6C	AAEEEE
abb'C1XX T TQ55566AA"'JJSQRVSSJJu
4
4
4
4
4
4a
4
4
4C1XX i iQQqSd;;;<<GGPPTWXYTZ]`ab]cde]efg]gTghhJJu
4
4
4
4
4
4a
4
4
4C1XX i iQQqSd;;;<<GGPPTWXYTZ]`ab]cde]efg]gTghhJJu
2
2
2
2
2
2eAqkk
2
2
2C1XX e eQQD999::EEbgNNRUVWRX[^_`[abc[cRcddJJu
C1XX E E

3q6AQ#a&3q6!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   