K i.ddlmZdZdZy)wrapsc|fd}|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] cZtfd}fd|_fd|_|S)Nct}||kr|St||dzD]}j|dS)Nlenrangeappend)nLicachefs a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/utilities/memoization.pygz-recurrence_memo..decorator..gsQE A1uQx1a!e_ * Qq%[) *9 ctSN)r )rsrz4recurrence_memo..decorator..$s Urc|Sr)xrs rrz4recurrence_memo..decorator..%s qr)r cache_length fetch_item)rrrs` r decoratorz"recurrence_memo..decorators. q   ,) rr)initialrrs @rrecurrence_memor s* E  rcgfd}|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 c4tfd}|S)Nct }||kr ||St||dzD]M}|}|g} j|td|dzD]} || }|j|O ||S)Nrr ) rmrrF_i0 F_i_cachejF_ijbase_seqrrs rrz3assoc_recurrence_memo..decorator..g7sE A1uQx{"1a!e_ +{!F  Y'q!a%+AQ5>D$$T*+ +8A; rr)rrr)rs` rrz(assoc_recurrence_memo..decorator6s q   &rr)r)rrs` @rassoc_recurrence_memor**s E, rN) functoolsrr r*rrrr,s#L"r