+
    ‹°³j‰(  ã                   ó†   € R t ^ RIHt ^ RIHtHt ^ RIHt ^ RIH	t	 R t
 ! R R4      tR t ! R	 R
4      t ! R R4      tR# )zRecurrence Operators)ÚS)ÚSymbolÚsymbols)Ússtr)Úsympifyc                ó2   € \        W4      pW"P                  3# )a÷  
Returns an Algebra of Recurrence Operators and the operator for
shifting i.e. the `Sn` operator.
The first argument needs to be the base polynomial ring for the algebra
and the second argument must be a generator which can be either a
noncommutative Symbol or a string.

Examples
========

>>> from sympy import ZZ
>>> from sympy import symbols
>>> from sympy.holonomic.recurrence import RecurrenceOperators
>>> n = symbols('n', integer=True)
>>> R, Sn = RecurrenceOperators(ZZ.old_poly_ring(n), 'Sn')
)ÚRecurrenceOperatorAlgebraÚshift_operator)ÚbaseÚ	generatorÚrings   && Ú[/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/holonomic/recurrence.pyÚRecurrenceOperatorsr   	   s   € ô$ % TÓ5€DØ×%Ñ%Ð&Ð&ó    c                   ó:   a € ] tR t^t o RtR tR t]tR tRt	V t
R# )r   aŽ  
A Recurrence Operator Algebra is a set of noncommutative polynomials
in intermediate `Sn` and coefficients in a base ring A. It follows the
commutation rule:
Sn * a(n) = a(n + 1) * Sn

This class represents a Recurrence Operator Algebra and serves as the parent ring
for Recurrence Operators.

Examples
========

>>> from sympy import ZZ
>>> from sympy import symbols
>>> from sympy.holonomic.recurrence import RecurrenceOperators
>>> n = symbols('n', integer=True)
>>> R, Sn = RecurrenceOperators(ZZ.old_poly_ring(n), 'Sn')
>>> R
Univariate Recurrence Operator Algebra in intermediate Sn over the base ring
ZZ[n]

See Also
========

RecurrenceOperator
c                ó   € Wn         \        VP                  VP                  .V 4      V n        Vf   \        RRR7      V n        R # \        V\        4      '       d   \        VRR7      V n        R # \        V\        4      '       d	   W n        R # R # )NÚSnF)Úcommutative)
r
   ÚRecurrenceOperatorÚzeroÚoner	   r   Ú
gen_symbolÚ
isinstanceÚstrr   )Úselfr
   r   s   &&&r   Ú__init__Ú"RecurrenceOperatorAlgebra.__init__;   sn   € àŒ	ä0Ø�Y‰Y˜Ÿ™Ð! 4ó)ˆÔð ÒÜ% d¸Ô>ˆDŽOä˜)¤S×)Ò)Ü")¨)ÀÔ"G�–Ü˜I¤v×.Ò.Ø"+–ñ /r   c                óŠ   € R \        V P                  4      ,           R,           V P                  P                  4       ,           pV# )z7Univariate Recurrence Operator Algebra in intermediate z over the base ring )r   r   r
   Ú__str__)r   Ústrings   & r   r   Ú!RecurrenceOperatorAlgebra.__str__J   s<   € ØJÜ�4—?‘?Ó#õ$Ø&<õ=à�Y‰Y×ÑÓ!õ"ˆð ˆr   c                óv   € V P                   VP                   8X  d   V P                  VP                  8X  d   R # R# )TF)r
   r   ©r   Úothers   &&r   Ú__eq__Ú RecurrenceOperatorAlgebra.__eq__S   s)   € Ø�9‰9˜Ÿ
™
Ô" t§¡¸%×:JÑ:JÔ'JÙár   )r
   r   r	   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__repr__r$   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s%   ø‡ € ñò6,òð €H÷ð r   r   c                 ó4  € \        V 4      \        V4      8:  d;   \        W4       UUu. uF  w  r#W#,           NK  	  uppV\        V 4      R  ,           pV# \        W4       UUu. uF  w  r#W#,           NK  	  uppV \        V4      R  ,           pV# u uppi u uppi ©N)ÚlenÚzip)Úlist1Úlist2ÚaÚbÚsols   &&   r   Ú
_add_listsr9   Z   sŠ   € Ü
ˆ5ƒz”S˜“ZÔÜ!$ UÔ!2Ô3Ñ!2™˜ˆq�uˆuÑ!2Ò3°e¼CÀ»J¸KÐ6HÕHˆð €Jô "% UÔ!2Ô3Ñ!2™˜ˆq�uˆuÑ!2Ò3°e¼CÀ»J¸KÐ6HÕHˆØ€Jùó 4ùã3s   ¨BÁ"Bc                   óf   a € ] tR t^bt o Rt^tR tR tR tR t	]	t
R tR tR tR	 t]tR
 tRtV tR# )r   a  
The Recurrence Operators are defined by a list of polynomials
in the base ring and the parent ring of the Operator.

Explanation
===========

Takes a list of polynomials for each power of Sn and the
parent ring which must be an instance of RecurrenceOperatorAlgebra.

A Recurrence Operator can be created easily using
the operator `Sn`. See examples below.

Examples
========

>>> from sympy.holonomic.recurrence import RecurrenceOperator, RecurrenceOperators
>>> from sympy import ZZ
>>> from sympy import symbols
>>> n = symbols('n', integer=True)
>>> R, Sn = RecurrenceOperators(ZZ.old_poly_ring(n),'Sn')

>>> RecurrenceOperator([0, 1, n**2], R)
(1)Sn + (n**2)Sn**2

>>> Sn*n
(n + 1)Sn

>>> n*Sn*n + 1 - Sn**2*n
(1) + (n**2 + n)Sn + (-n - 2)Sn**2

See Also
========

DifferentialOperatorAlgebra
c                óô  € W n         \        V\        4      '       d»   \        V4       F¥  w  r4\        V\        4      '       d3   V P                   P
                  P                  \        V4      4      W&   KM  \        W@P                   P
                  P                  4      '       d   K~  V P                   P
                  P                  V4      W&   K§  	  Wn	        \        V P                  4      ^,
          V n        R# )é   N)Úparentr   ÚlistÚ	enumerateÚintr
   Ú
from_sympyr   ÚdtypeÚ
listofpolyr2   Úorder)r   Úlist_of_polyr=   ÚiÚjs   &&&  r   r   ÚRecurrenceOperator.__init__Š   s©   € ð Œô �l¤D×)Ò)Ü! ,Ö/‘�Ü˜a¤×%Ò%Ø&*§k¡k×&6Ñ&6×&AÑ&AÄ!ÀAÃ$Ó&G�L“OÜ# A§{¡{×'7Ñ'7×'=Ñ'=×>Ô>Ø&*§k¡k×&6Ñ&6×&AÑ&AÀ!Ó&D�L“Oñ	 0ð +ŒOÜ˜Ÿ™Ó)¨AÕ-ˆŽ
r   c                ó&  a€ V P                   pV P                  P                  o\        V\        4      '       gd   \        WP                  P                  P
                  4      '       g1   V P                  P                  P                  \        V4      4      .pMV.pMVP                   pR pV! V^ ,          V4      pV3R lp\        ^\        V4      4       F#  pV! V4      p\        WT! W',          V4      4      pK%  	  \	        WPP                  4      # )z
Multiplies two Operators and returns another
RecurrenceOperator instance using the commutation rule
Sn * a(n) = a(n + 1) * Sn
c                 óz   € \        V\        4      '       d   V Uu. uF  q"V ,          NK  	  up# W,          .# u upi r1   )r   r>   )r7   ÚlistofotherrF   s   && r   Ú_mul_dmp_diffopÚ3RecurrenceOperator.__mul__.<locals>._mul_dmp_diffop¯   s8   € Ü˜+¤t×,Ò,Ù'2Ó3¡{ !˜AŸ˜¡{Ñ3Ð3Ø•OÐ$Ð$ùò 4s   ›8c                 ó&  <€ SP                   .p\        V \        4      '       d„   V  F{  pSP                  V4      P	                  SP
                  ^ ,          SP
                  ^ ,          \        P                  ,           4      pVP                  SP                  V4      4       K}  	  V# V P	                  SP
                  ^ ,          SP
                  ^ ,          \        P                  ,           4      pVP                  SP                  V4      4       V# )é    )
r   r   r>   Úto_sympyÚsubsÚgensr   ÚOneÚappendrA   )r7   r8   rF   rG   r
   s   &   €r   Ú
_mul_Sni_bÚ.RecurrenceOperator.__mul__.<locals>._mul_Sni_b·   sº   ø€ Ø—9‘9�+ˆCä˜!œT×"Ò"Û�AØŸ™ aÓ(×-Ñ-¨d¯i©i¸­l¸D¿I¹IÀa½LÌ1Ï5É5Õ<PÓQ�AØ—J‘J˜tŸ™¨qÓ1Ö2ñ ð ˆJð —F‘F˜4Ÿ9™9 Q�<¨¯©°1­¼¿¹Õ)=Ó>�Ø—
‘
˜4Ÿ?™?¨1Ó-Ô.àˆJr   )rC   r=   r
   r   r   rB   rA   r   Úranger2   r9   )	r   r#   Ú
listofselfrK   rL   r8   rU   rF   r
   s	   &&      @r   Ú__mul__ÚRecurrenceOperator.__mul__›   sÞ   ø€ ð —_‘_ˆ
Ø�{‰{×Ñˆä˜%Ô!3×4Ò4Ü˜e§[¡[×%5Ñ%5×%;Ñ%;×<Ò<Ø#Ÿ{™{×/Ñ/×:Ñ:¼7À5»>ÓJÐK‘ð  %˜g‘à×*Ñ*ˆKò	%ñ
 ˜j¨�m¨[Ó9ˆõ	ô �qœ#˜j›/Ö*ˆAá$ [Ó1ˆKä˜S /°*µ-ÀÓ"MÓNŠCñ	 +ô " #§{¡{Ó3Ð3r   c                ó’  € \        V\        4      '       g¬   \        V\        4      '       d   \        V4      p\        WP                  P
                  P                  4      '       g&   V P                  P
                  P                  V4      pV P                   Uu. uF  q!V,          NK  	  pp\        W0P                  4      # R # u upi r1   )	r   r   r@   r   r=   r
   rB   rA   rC   )r   r#   rG   r8   s   &&  r   Ú__rmul__ÚRecurrenceOperator.__rmul__Í   s�   € Ü˜%Ô!3×4Ò4ä˜%¤×%Ò%Ü˜%›�ä˜e§[¡[×%5Ñ%5×%;Ñ%;×<Ò<ØŸ™×)Ñ)×5Ñ5°eÓ<�à&*§o¢oÓ6¡o ˜1—9�9¡oˆCÐ6Ü% c¯;©;Ó7Ð7ñ 5ùò 7s   ÂCc                ó  € \        V\        4      '       d6   \        V P                  VP                  4      p\        W P                  4      # \        V\
        4      '       d   \        V4      pV P                  p\        WP                  P                  P                  4      '       g(   V P                  P                  P                  V4      .pMV.pV^ ,          V^ ,          ,           .VR,          ,           p\        W P                  4      # )rO   ºr<   NN)
r   r   r9   rC   r=   r@   r   r
   rB   rA   )r   r#   r8   Ú	list_selfÚ
list_others   &&   r   Ú__add__ÚRecurrenceOperator.__add__Ù   sÂ   € Ü�eÔ/×0Ò0ä˜TŸ_™_¨e×.>Ñ.>Ó?ˆCÜ% c¯;©;Ó7Ð7ô ˜%¤×%Ò%Ü˜%›�ØŸ™ˆIÜ˜e§[¡[×%5Ñ%5×%;Ñ%;×<Ò<Ø $§¡×1Ñ1×=Ñ=¸eÓDÐE‘
à#˜W�
Ø˜Q•< *¨Q¥-Õ/Ð0°9¸Rµ=Õ@ˆCä% c¯;©;Ó7Ð7r   c                ó"   € V RV,          ,           # ©r<   éÿÿÿÿ© r"   s   &&r   Ú__sub__ÚRecurrenceOperator.__sub__î   s   € Ø�r˜U•lÕ"Ð"r   c                ó"   € RV ,          V,           # re   rg   r"   s   &&r   Ú__rsub__ÚRecurrenceOperator.__rsub__ñ   s   € Ø�d�{˜UÕ"Ð"r   c                ó$  € V^8X  d   V # \        V P                  P                  P                  .V P                  4      pV^ 8X  d   V# V P                  V P                  P
                  P                  8X  dd   V P                  P                  P                  .V,          V P                  P                  P                  .,           p\        W0P                  4      # T p V^,          '       d	   W$,          pV^,          pV'       g    V# WD,          pK6  )r<   )r   r=   r
   r   rC   r	   r   )r   ÚnÚresultr8   Úxs   &&   r   Ú__pow__ÚRecurrenceOperator.__pow__ô   sÒ   € Ø�Œ6ØˆKÜ# T§[¡[×%5Ñ%5×%9Ñ%9Ð$:¸D¿K¹KÓHˆØ�Œ6ØˆMà�?‰?˜dŸk™k×8Ñ8×CÑCÔCØ—;‘;×#Ñ#×(Ñ(Ð)¨AÕ-°·±×1AÑ1A×1EÑ1EÐ0FÕFˆCÜ% c¯;©;Ó7Ð7ØˆØØ�1�uŒuØ•�Ø�!�GˆAßØàˆð �FŠAr   c                ó  € V P                   pR p\        V4       Fê  w  r4W@P                  P                  P                  8X  d   K+  V P                  P                  P                  V4      pV^ 8X  d#   VR\        V4      ,           R,           ,          pKy  V'       d
   VR,          pV^8X  d#   VR\        V4      ,           R,           ,          pK³  VR\        V4      ,           R,           R,           \        V4      ,           ,          pKì  	  V# )Ú Ú(Ú)z + z)SnzSn**)rC   r?   r=   r
   r   rP   r   )r   rC   Ú	print_strrF   rG   s   &    r   r   ÚRecurrenceOperator.__str__  sÐ   € Ø—_‘_ˆ
Øˆ	ä˜jÖ)‰DˆAØ—K‘K×$Ñ$×)Ñ)Ô)Ùà—‘× Ñ ×)Ñ)¨!Ó,ˆAà�AŒvØ˜S¤4¨£7�]¨SÕ0Õ0�	ÙçØ˜UÕ"�	à�AŒvØ˜S¤4¨£7�]¨UÕ2Õ2�	Ùà˜œt A›w�¨Õ,¨vÕ5¼¸Q»Õ?Õ?ŠIñ# *ð& Ðr   c                ó˜  a € \        V\        4      '       d;   S P                  VP                  8X  d   S P                  VP                  8X  d   R # R# S P                  ^ ,          V8H  ;'       d]    \        ;QJ d0    V 3R lS P                  R,           4       F  '       d   K   R# 	  R # ! V 3R lS P                  R,           4       4      # )TFc              3   óf   <"  € T F&  qSP                   P                  P                  J x € K(  	  R # 5ir1   )r=   r
   r   )Ú.0rF   r   s   & €r   Ú	<genexpr>Ú,RecurrenceOperator.__eq__.<locals>.<genexpr>*  s&   øé € ÐHÑ4G¨q�T—[‘[×%Ñ%×*Ñ*Õ*Ó4Gùs   ƒ.1r_   )r   r   rC   r=   Úallr"   s   f&r   r$   ÚRecurrenceOperator.__eq__#  s›   ø€ Ü�eÔ/×0Ò0Ø�‰ %×"2Ñ"2Ô2°t·{±{ÀeÇlÁlÔ7RÙáØ�‰˜qÕ! UÑ*÷ Ið Iß‹CÔH°D·O±OÀBÖ4GÓH�CŒCð	IÚð	IØÔH°D·O±OÀBÖ4GÓHÓHð	Ir   )rC   rD   r=   N)r&   r'   r(   r)   r*   Ú_op_priorityr   rY   r\   rb   Ú__radd__rh   rk   rq   r   r+   r$   r,   r-   r.   s   @r   r   r   b   sU   ø‡ € ñ#ðJ €Lò.ò"04òd
8ò8ð& €Hò#ò#òò(ð2 €H÷Ið Ir   r   c                   ó@   a € ] tR tRt o Rt. 3R ltR t]tR tRt	V t
R# )ÚHolonomicSequencei-  zå
A Holonomic Sequence is a type of sequence satisfying a linear homogeneous
recurrence relation with Polynomial coefficients. Alternatively, A sequence
is Holonomic if and only if its generating function is a Holonomic Function.
c                ó  € Wn         \        V\        4      '       g
   V.V n        MW n        \	        V P                  4      ^ 8X  d	   RV n        MRV n        VP                  P                  P                  ^ ,          V n	        R# )rO   FTN)
Ú
recurrencer   r>   Úu0r2   Ú_have_init_condr=   r
   rR   rn   )r   r…   r†   s   &&&r   r   ÚHolonomicSequence.__init__4  s`   € Ø$ŒÜ˜"œd×#Ò#Ø�dˆD�GàŒGäˆt�w‰w‹<˜1ÔØ#(ˆDÕ à#'ˆDÔ Ø×"Ñ"×'Ñ'×,Ñ,¨QÕ/ˆŽr   c                ó0  € R V P                   P                  4       : R\        V P                  4      : R2pV P                  '       g   V# Rp^ pV P
                   F/  pVR\        V4      : R\        V4      : 2,          pV^,          pK1  	  W,           pV# )zHolonomicSequence(z, rv   rt   z, u(z) = )r…   r+   r   rn   r‡   r†   )r   Ústr_solÚcond_strÚseq_strrF   r8   s   &     r   r+   ÚHolonomicSequence.__repr__A  s|   � Ø26·/±/×1KÑ1KÖ1MÌtÐTX×TZÑTZÎ|Ð\ˆØ×#×#Ð#ØˆNàˆHØˆGØ—W”W�Ù¬d°7®m¼TÀ!½WÐEÕE�Ø˜1•’ñ ð Õ$ˆCØˆJr   c                óð   € V P                   VP                   8w  g   V P                  VP                  8w  d   R # V P                  '       d,   VP                  '       d   V P                  VP                  8H  # R# )FT)r…   rn   r‡   r†   r"   s   &&r   r$   ÚHolonomicSequence.__eq__Q  sS   € Ø�?‰?˜e×.Ñ.Ô.°$·&±&¸E¿G¹GÔ2CÙØ××Ð E×$9×$9Ð$9Ø—7‘7˜eŸh™hÑ&Ð&Ùr   )r‡   rn   r…   r†   N)r&   r'   r(   r)   r*   r   r+   r   r$   r,   r-   r.   s   @r   rƒ   rƒ   -  s*   ø‡ € ñð ')ô 0òð €G÷ð r   rƒ   N)r*   Úsympy.core.singletonr   Úsympy.core.symbolr   r   Úsympy.printingr   Úsympy.core.sympifyr   r   r   r9   r   rƒ   rg   r   r   Ú<module>r”      sB   ðÙ å "ß /Ý Ý &ò'÷,8ñ 8òv÷HIñ HI÷V)ó )r   