a
    SG5d•  ã                   @   s    d dl mZ dd„ Zdd„ ZdS )é    ©Úwrapsc                    s   | ‰ ‡ fdd„}|S )z}
    Memo decorator for sequences defined by recurrence

    See usage examples e.g. in the specfun/combinatorial module
    c                    s   t ˆ ƒ‡‡ fdd„ƒ}|S )Nc                    sH   t ˆ ƒ}| |d krˆ |  S t|| d ƒD ]}ˆ  ˆ|ˆ ƒ¡ q*ˆ d S )Né   éÿÿÿÿ©ÚlenÚrangeÚappend)ÚnÚLÚi)ÚcacheÚf© úW/var/www/html/django/DPS/env/lib/python3.9/site-packages/sympy/utilities/memoization.pyÚg   s    z-recurrence_memo.<locals>.decorator.<locals>.gr   ©r   r   ©r   ©r   r   Ú	decorator   s    z"recurrence_memo.<locals>.decoratorr   )Úinitialr   r   r   r   Úrecurrence_memo   s    
r   c                    s   g ‰‡ ‡fd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                    s   t ˆ ƒ‡‡‡ fdd„ƒ}|S )Nc                    s~   t ˆƒ}| |k rˆ|  | S t|| d ƒD ]F}ˆ |ƒ}|g}ˆ |¡ td|d ƒD ]}ˆ||ˆƒ}| |¡ qTq*ˆ|  | S )Nr   r   )r
   Úmr   r   ZF_i0Z	F_i_cacheÚjZF_ij)Úbase_seqr   r   r   r   r   &   s    
z3assoc_recurrence_memo.<locals>.decorator.<locals>.gr   r   ©r   r   r   r   r   %   s    z(assoc_recurrence_memo.<locals>.decoratorr   )r   r   r   r   r   Úassoc_recurrence_memo   s    
r   N)Ú	functoolsr   r   r   r   r   r   r   Ú<module>   s   