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

    See usage examples e.g. in the specfun/combinatorial module
    c                 @     t                      fd            }|S )Nc                     t                    }| |dz
  k    r|          S t          || dz             D ]!}                     |                     "d         S )N   lenrangeappend)nLicachefs      ;lib/python3.11/site-packages/sympy/utilities/memoization.pygz-recurrence_memo.<locals>.decorator.<locals>.g   sk    E

AAEz  Qx1a!e__ * *QQq%[[))))9    r   )r   r   r   s   ` r   	decoratorz"recurrence_memo.<locals>.decorator   s9    	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                 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>.g&   s    E

A1u #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>.decorator%   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?           *" " " " "r   