+
    i                     >    R t ^ RIHtHt ^ RIHt ^ RIHt R tR t	R# )z
Recurrences
)Ssympify)iterable)as_intc                   V '       g   \         P                  # \        V 4      '       g   \        R4      h\        V4      '       g   \        R4      h\	        V4      pV^ 8  d   \        R4      hV  Uu. uF  p\        V4      NK  	  ppV Uu. uF  p\        V4      NK  	  pp\        V4      p\        V4      V8  d   \        R4      hV\         P                  .V\        V4      ,
          ,          ,          pW&8  d	   WR,          # \        \        WB4      V4       UUu. uF  w  rxWx,          NK  	  p	pp\        V	RR V	R,          4      # u upi u upi u uppi )a  
Evaluation of univariate linear recurrences of homogeneous type
having coefficients independent of the recurrence variable.

Parameters
==========

coeffs : iterable
    Coefficients of the recurrence
init : iterable
    Initial values of the recurrence
n : Integer
    Point of evaluation for the recurrence

Notes
=====

Let `y(n)` be the recurrence of given type, ``c`` be the sequence
of coefficients, ``b`` be the sequence of initial/base values of the
recurrence and ``k`` (equal to ``len(c)``) be the order of recurrence.
Then,

.. math :: y(n) = \begin{cases} b_n & 0 \le n < k \\
    c_0 y(n-1) + c_1 y(n-2) + \cdots + c_{k-1} y(n-k) & n \ge k
    \end{cases}

Let `x_0, x_1, \ldots, x_n` be a sequence and consider the transformation
that maps each polynomial `f(x)` to `T(f(x))` where each power `x^i` is
replaced by the corresponding value `x_i`. The sequence is then a solution
of the recurrence if and only if `T(x^i p(x)) = 0` for each `i \ge 0` where
`p(x) = x^k - c_0 x^(k-1) - \cdots - c_{k-1}` is the characteristic
polynomial.

Then `T(f(x)p(x)) = 0` for each polynomial `f(x)` (as it is a linear
combination of powers `x^i`). Now, if `x^n` is congruent to
`g(x) = a_0 x^0 + a_1 x^1 + \cdots + a_{k-1} x^{k-1}` modulo `p(x)`, then
`T(x^n) = x_n` is equal to
`T(g(x)) = a_0 x_0 + a_1 x_1 + \cdots + a_{k-1} x_{k-1}`.

Computation of `x^n`,
given `x^k = c_0 x^{k-1} + c_1 x^{k-2} + \cdots + c_{k-1}`
is performed using exponentiation by squaring (refer to [1_]) with
an additional reduction step performed to retain only first `k` powers
of `x` in the representation of `x^n`.

Examples
========

>>> from sympy.discrete.recurrences import linrec
>>> from sympy.abc import x, y, z

>>> linrec(coeffs=[1, 1], init=[0, 1], n=10)
55

>>> linrec(coeffs=[1, 1], init=[x, y], n=10)
34*x + 55*y

>>> linrec(coeffs=[x, y], init=[0, 1], n=5)
x**2*y + x*(x**3 + 2*x*y) + y**2

>>> linrec(coeffs=[1, 2, 3, 0, 0, 4], init=[x, y, z], n=16)
13576*x + 5676*y + 2356*z

References
==========

.. [1] https://en.wikipedia.org/wiki/Exponentiation_by_squaring
.. [2] https://en.wikipedia.org/w/index.php?title=Modular_exponentiation&section=6#Matrices

See Also
========

sympy.polys.agca.extensions.ExtensionElement.__pow__

z6Expected a sequence of coefficients for the recurrencezFExpected a sequence of values for the initialization of the recurrencez@Point of evaluation of recurrence must be a non-negative integerzECount of initial values should not exceed the order of the recurrenceN)r   Zeror   	TypeErrorr   
ValueErrorr   lenziplinrec_coeffssum)
coeffsinitnargcbkuvtermss
   &&&       z/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/discrete/recurrences.pylinrecr   
   s>   Z vvF * + 	+ D>> - . 	. 	q	A1u / 0 	0 "((#A(!%&#A&AA
1vz 2 3 	3 	
affXq3q6z""ut q!4a898TQQSS8E9uSbz59%% 	)& :s   2E	EEc                N   a aaa \        S 4      oV V3R loVVV3R loS! V4      # )an  
Compute the coefficients of n'th term in linear recursion
sequence defined by c.

`x^k = c_0 x^{k-1} + c_1 x^{k-2} + \cdots + c_{k-1}`.

It computes the coefficients by using binary exponentiation.
This function is used by `linrec` and `_eval_pow_by_cayley`.

Parameters
==========

c = coefficients of the divisor polynomial
n = exponent of x, so dividend is x^n

c                    < \         P                  .^\        V 4      ,          ^,
          V,           ,          p\        V 4       FA  w  r4\        V 4       F-  w  rVW!V,           V,           ;;,          WF,          ,          uu&   K/  	  KC  	  \	        \        V4      ^,
          S^,
          R4       FK  p\	        S4       F9  pW%V,
          ^,
          ;;,          W%,          SV,          ,          ,          uu&   K;  	  KM  	  VRS # )   Nr   )r   r   r   	enumeraterange)	r   offsetwipjqr   r   s	   &&     r   _square_and_reduce)linrec_coeffs.<locals>._square_and_reduce   s     VVHaAhlV+,aLDA!!1*q.!QS(! % ! s1vz1q5"-A1Xa%!)QqT	)  . !u    c                    < V S8  dZ   \         P                  .V ,          \         P                  .,           \         P                  .SV ,
          ^,
          ,          ,           # S! S! V ^,          4      V ^,          4      # )   )r   r   One)r   _final_coeffsr&   r   s   &r   r,   $linrec_coeffs.<locals>._final_coeffs   sY    
 q5FF8A:'166(AEAI*>>>%mAF&;QUCCr(   )r   )r   r   r,   r&   r   s   f&@@@r   r   r   w   s&    $ 	AA"D r(   N)
__doc__
sympy.corer   r   sympy.utilities.iterablesr   sympy.utilities.miscr   r   r    r(   r   <module>r3      s!    " . 'j&Z/r(   