
    wg.                         d dl mZ d Zd Zy)    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                 Z     t                fd       }fd|_        fd|_        |S )Nc                     t              }| |k  r|    S t        || dz         D ]  }j                   |              d   S )N   lenrangeappend)nLicachefs      `/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/utilities/memoization.pygz-recurrence_memo.<locals>.decorator.<locals>.g   sQ    E
A1uQx1a!e_ *Qq%[)*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   s.    	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                 4     t                fd       }|S )Nc                    t        	      }| |k  r	|    |   S t        || dz         D ]M  } |      }|g}	j                  |       t        d|dz         D ]  } 
||	      }|j                  |        O 	|    |   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1uQx{"1a!e_ 
+{!F	Y' q!a% +AQ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*   *   s     E, r   N)	functoolsr   r    r*   r   r   r   <module>r,      s    #L"r   