
    MZd                         d dl mZ d Zd Zy)    wrapsc                     | fd}|S )z}
    Memo decorator for sequences defined by recurrence

    See usage examples e.g. in the specfun/combinatorial module
    c                 2     t                fd       }|S )Nc                     t              }| |dz
  k  r|    S t        || dz         D ]  }j                   |              d   S )N   lenrangeappend)nLicachefs      =/usr/lib/python3/dist-packages/sympy/utilities/memoization.pygz-recurrence_memo.<locals>.decorator.<locals>.g   sU    E
AAEzQx1a!e_ *Qq%[)*9    r   )r   r   r   s   ` r   	decoratorz"recurrence_memo.<locals>.decorator   s     	q	 
	 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>.g&   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>.decorator%   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    *"r   