
    \h.                         S SK Jr  S rS rg)    wrapsc                    ^ U mU4S jnU$ )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                 `   >^  [        T 5      UU 4S j5       nU4S jUl        U4S jUl        U$ )Nc                    > [        T5      nX:  a  TU    $ [        XS-   5       H  nTR                  T" UT5      5        M     TS   $ )N   lenrangeappend)nLicachefs      S/var/www/auris/envauris/lib/python3.13/site-packages/sympy/utilities/memoization.pyg-recurrence_memo.<locals>.decorator.<locals>.g   sH    E
AuQx1!e_Qq%[) %9    c                     > [        T 5      $ N)r   )r   s   r   <lambda>4recurrence_memo.<locals>.decorator.<locals>.<lambda>$   s	    Ur   c                    > TU    $ r    )xr   s    r   r   r   %   s	    qr   )r   cache_length
fetch_item)r   r   r   s   ` r   	decorator"recurrence_memo.<locals>.decorator   s.    	q	 
	 ,)r   r   )initialr    r   s     @r   recurrence_memor#      s    * E r   c                    ^ ^ / mU U4S jnU$ )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                 6   >^  [        T 5      UUU 4S j5       nU$ )Nc                   > [        T	5      nX:  a  T	U    U   $ [        X S-   5       HO  nT" U5      nU/nT	R                  U5        [        SUS-   5       H  nT
" X6T	5      nUR                  U5        M     MQ     T	U    U   $ )Nr   r
   )r   mr   r   F_i0	F_i_cachejF_ijbase_seqr   r   s           r   r   3assoc_recurrence_memo.<locals>.decorator.<locals>.g7   s    E
AuQx{"1!e_{!F	Y' q!a%AQ5>D$$T* ) % 8A;r   r   )r   r   r,   r   s   ` r   r    (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>r1      s    #L"r   