
    g.                         d dl mZ d Zd ZdS )    wrapsc                     | fd}|S )a  
    Memo decorator for sequences defined by recurrence

    Examples
    ========

    >>> from sympy.utilities.memoization import recurrence_memo
    >>> @recurrence_memo([1]) # 0! = 1
    ... def factorial(n, prev):
    ...     return n * prev[-1]
    >>> factorial(4)
    24
    >>> factorial(3) # use cache values
    6
    >>> factorial.cache_length() # cache length can be obtained
    5
    >>> factorial.fetch_item(slice(2, 4))
    [2, 6]

    c                 h     t                      fd            }fd|_        fd|_        |S )Nc                     t                    }| |k     r|          S t          || dz             D ]!}                     |                     "d         S )N   lenrangeappend)nLicachefs      W/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/utilities/memoization.pygz-recurrence_memo.<locals>.decorator.<locals>.g   sd    E

A1uuQx1a!e__ * *QQq%[[))))9    c                  "    t                     S N)r   )r   s   r   <lambda>z4recurrence_memo.<locals>.decorator.<locals>.<lambda>$   s    U r   c                     |          S r    )xr   s    r   r   z4recurrence_memo.<locals>.decorator.<locals>.<lambda>%   s    q r   )r   cache_length
fetch_item)r   r   r   s   ` r   	decoratorz"recurrence_memo.<locals>.decorator   sY    	q	 	 	 	 	 
	 ,+++))))r   r   )initialr   r   s     @r   recurrence_memor       s+    * E     r   c                      g  fd}|S )z
    Memo decorator for associated sequences defined by recurrence starting from base

    base_seq(n) -- callable to get base sequence elements

    XXX works only for Pn0 = base_seq(0) cases
    XXX works only for m <= n cases
    c                 B     t                      fd            }|S )Nc                 H   t          	          }| |k     r	|          |         S t          || dz             D ]]} |          }|g}	                    |           t          d|dz             D ]$} 
||	          }|                    |           %^	|          |         S )Nr   r
   )r   mr   r   F_i0	F_i_cachejF_ijbase_seqr   r   s           r   r   z3assoc_recurrence_memo.<locals>.decorator.<locals>.g7   s    E

A1uuQx{"1a!e__ 
+ 
+x{{!F	Y''' q!a% + +A1Q5>>D$$T****+ 8A;r   r   )r   r   r)   r   s   ` r   r   z(assoc_recurrence_memo.<locals>.decorator6   s>    	q	 	 	 	 	 	 
	& r   r   )r)   r   r   s   ` @r   assoc_recurrence_memor*   *   s1     E     , r   N)	functoolsr   r    r*   r   r   r   <module>r,      s@         # # #L" " " " "r   