
    XhA
                     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           
      H   | j         }|j        |j        j        }|                                |dk    rt
          }nt          }fd|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                 ^    g | ])}                     |                                          *S  )newto_list).0jKs     k/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/holonomic/numerical.py
<listcomp>z_evalf.<locals>.<listcomp>   s-    
6
6
6!155
6
6
6    c                 4    g | ]}|                   z  S r   r   )r   iadmfs     r   r   z_evalf.<locals>.<listcomp>   s(    
.
.
.CF7SV
.
.
.r   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rangey0len	TypeErrorx0	enumerateappendr   )funcpointsderivativesmethodannRmethredr%   r(   solr   r   r   r   r   s                @@@r   _evalfr4   	   sD    
C	A
A	A
6
6
6
6s~
6
6
6C
.
.
.
.
.U1XX
.
.
.C	B
2ww{{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           	        	
 t          |                              t          j                  }t          |                              t          j                  }d |D             ||z
  
dd         	d}t	          |          D ]P}|t          t          | |         |d                                        t          j                  |         z  z  }Q	                    |           	
fdt	          |          D             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>3   .    
6
6
6a71::  ))
6
6
6r   r   Nr   Tmpmc                 8    g | ]}|         |         z  z   S r   r   r   r   f_0hy_0s     r   r   z_euler.<locals>.<listcomp><   s*    222ACFQQZ222r   r   r8   r   r9   r$   r   r*   )r2   r(   x1r%   r   ABf_0_nr   r?   r@   rA   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222222q2222r   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  }
`                    |
           fdt	          |          D             S )z1
    Runge-Kutta 4th order numerical method.
    c                 f    g | ].}t          |                              t          j                  /S r   r7   r   s     r   r   z_rk4.<locals>.<listcomp>F   r:   r   r   r   NTr;   c                 >    g | ]}|         |         z  d z  z   S    r   r>   s     r   r   z_rk4.<locals>.<listcomp>S   .    
4
4
413q6CF1HQJ
4
4
4r   rK   c                 >    g | ]}|         |         z  d z  z   S rJ   r   )r   r   f_1r@   rA   s     r   r   z_rk4.<locals>.<listcomp>X   rL   r   c                 8    g | ]}|         |         z  z   S r   r   )r   r   f_2r@   rA   s     r   r   z_rk4.<locals>.<listcomp>]   s*    
2
2
23q6CF1H
2
2
2r   c                     g | ]:}|         |         d |         z  z   d |         z  z   |         z   z  dz  z   ;S )rK      r   )r   r   r?   rN   rP   f_3r@   rA   s     r   r   z_rk4.<locals>.<listcomp>b   sR    MMMqCFQAqQx#a&0Q78::MMMr   rB   )r2   r(   rC   r%   r   rD   rE   rF   f_1_nf_2_nf_3_nr   r?   rN   rP   rS   r@   rA   s               @@@@@@r   r"   r"   ?   s%   
 	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MMMMMMMMME!HHMMMMr   N)Fr   )
__doc__sympy.core.sympifyr   sympy.holonomic.holonomicr   mpmathr   r4   r!   r"   r   r   r   <module>r[      s    / / & & & & & & - - - - - -         D3 3 3(#N #N #N #N #Nr   