ó
    Š*£hc!  ã                   óî   • S r SSKJrJrJrJr  SSKJrJrJ	r	J
r
  SSKJrJr  SSKJrJr  SSKJrJr  SSKJr  SSKJrJrJr  \S	 5       r\S
 5       r\S 5       r\\" S5      4S j5       r\SS j5       rg)z/High-level polynomials manipulation functions. é    )ÚSÚBasicÚsymbolsÚDummy)ÚPolificationFailedÚComputationFailedÚMultivariatePolynomialErrorÚOptionError)Úallowed_flagsÚbuild_options)Úpoly_from_exprÚPoly)Úsymmetric_polyÚinterpolating_poly)Úsring)Únumbered_symbolsÚtakeÚpublicc                 ó   • [        USS/5        Sn[        U S5      (       d  SnU /n [        U /UQ70 UD6u  p@UR                  n[	        X5      nUR                  n[        [        U5      5       Vs/ s H  n[        U5      PM     nn/ nU  HC  n	U	R                  5       u  p«nUR                  U
R                  " U6 UR                  " U6 45        ME     [        UW5       VVVs/ s H  u  nu  pïXßR                  5       4PM     nnnnUR                  (       d-  [        U5       H  u  nu  nnUR                  U5      U4X‡'   M      U(       d  Uu  nUR                  (       d  U$ U(       a  UU4$ UU4-   $ s  snf s  snnnf )a^  
Rewrite a polynomial in terms of elementary symmetric polynomials.

A symmetric polynomial is a multivariate polynomial that remains invariant
under any variable permutation, i.e., if `f = f(x_1, x_2, \dots, x_n)`,
then `f = f(x_{i_1}, x_{i_2}, \dots, x_{i_n})`, where
`(i_1, i_2, \dots, i_n)` is a permutation of `(1, 2, \dots, n)` (an
element of the group `S_n`).

Returns a tuple of symmetric polynomials ``(f1, f2, ..., fn)`` such that
``f = f1 + f2 + ... + fn``.

Examples
========

>>> from sympy.polys.polyfuncs import symmetrize
>>> from sympy.abc import x, y

>>> symmetrize(x**2 + y**2)
(-2*x*y + (x + y)**2, 0)

>>> symmetrize(x**2 + y**2, formal=True)
(s1**2 - 2*s2, 0, [(s1, x + y), (s2, x*y)])

>>> symmetrize(x**2 - y**2)
(-2*x*y + (x + y)**2, -2*y**2)

>>> symmetrize(x**2 - y**2, formal=True)
(s1**2 - 2*s2, -2*y**2, [(s1, x + y), (s2, x*y)])

Úformalr   TÚ__iter__F)r   Úhasattrr   r   r   ÚrangeÚlenÚnextÚ
symmetrizeÚappendÚas_exprÚzipr   Ú	enumerateÚsubs)ÚFÚgensÚargsÚiterableÚRÚoptr   ÚiÚresultÚfÚpÚrÚmÚsÚ_ÚgÚpolysÚsymÚnon_syms                      ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/polyfuncs.pyr   r      sc  € ôB �$˜ 9Ð-Ô.à€Hä�1�j×!Ñ!ØˆØˆCˆä�Ð"�TÒ"˜TÑ"�D€AØ�9‰9€Dä
˜Ó
#€CØ�k‰k€GÜ&+¬C°«IÔ&6Ó7Ò&6 Œt�GŽ}Ñ&6€GÐ7à€FãˆØ—,‘,“.‰ˆˆaØ�‰�q—y’y 'Ð*¨A¯IªI°tÐ,<Ð=Ö>ñ ô 03°7¸A¬Õ?ª¡) !¡V aˆa—‘“Ó©€EÒ?à�:�:Ü!*¨6Ö!2ÑˆA‰~��WØŸ™ %›¨'Ð2ˆF‹Iñ "3ö Ø‰ˆà�:�:ØˆæØ˜5�=Ð à˜U˜HÑ$Ð$ùò/ 8ùô @s   Á1E4Ã# E9c                 ó”  • [        U/ 5         [        U /UQ70 UD6u  p4[        R
                  UR                  pvUR                  (       a   UR                  5        H
  nXg-  U-   nM     U$ [        X75      USS pUR                  5        H  nXg-  [        U/UQ70 UD6-   nM     U$ ! [         a  nUR                  s SnA$ SnAff = f)aš  
Rewrite a polynomial in Horner form.

Among other applications, evaluation of a polynomial at a point is optimal
when it is applied using the Horner scheme ([1]).

Examples
========

>>> from sympy.polys.polyfuncs import horner
>>> from sympy.abc import x, y, a, b, c, d, e

>>> horner(9*x**4 + 8*x**3 + 7*x**2 + 6*x + 5)
x*(x*(x*(9*x + 8) + 7) + 6) + 5

>>> horner(a*x**4 + b*x**3 + c*x**2 + d*x + e)
e + x*(d + x*(c + x*(a*x + b)))

>>> f = 4*x**2*y**2 + 2*x**2*y + 2*x*y**2 + x*y

>>> horner(f, wrt=x)
x*(x*y*(4*y + 2) + y*(2*y + 1))

>>> horner(f, wrt=y)
y*(x*y*(4*x + 2) + x*(2*x + 1))

References
==========
[1] - https://en.wikipedia.org/wiki/Horner_scheme

Né   )r   r   r   Úexprr   ÚZeroÚgenÚis_univariateÚ
all_coeffsr   Úhorner)	r*   r#   r$   r"   r'   ÚexcÚformr9   Úcoeffs	            r4   r<   r<   W   sÅ   € ôB �$˜ÔðÜ Ð1 DÒ1¨DÑ1‰ˆô —‘˜Ÿ™ˆ#à‡‡Ø—\‘\–^ˆEØ‘8˜eÑ#ŠDñ $ð €Kô �q“,  Q R ˆ4à—\‘\–^ˆEØ‘8œf UÐ:¨TÒ:°TÑ:Ñ:ŠDñ $ð €Køô ó Ø�x‰x�ûðús   ŽB' Â'
CÂ1CÂ<CÃCc                 óŒ  • [        U 5      n[        U [        5      (       a4  X;   a  [        X   5      $ [	        [        U R                  5       6 5      u  p4O“[        U S   [        5      (       a5  [	        [        U 6 5      u  p4X;   a  [        XCR                  U5         5      $ OFU[        SUS-   5      ;   a  [        XS-
     5      $ [	        U 5      n[	        [        SUS-   5      5      n [        X!X45      R                  5       $ ! [         a6    [        5       n[        X%X45      R                  5       R                  XQ5      s $ f = f)a½  
Construct an interpolating polynomial for the data points
evaluated at point x (which can be symbolic or numeric).

Examples
========

>>> from sympy.polys.polyfuncs import interpolate
>>> from sympy.abc import a, b, x

A list is interpreted as though it were paired with a range starting
from 1:

>>> interpolate([1, 4, 9, 16], x)
x**2

This can be made explicit by giving a list of coordinates:

>>> interpolate([(1, 1), (2, 4), (3, 9)], x)
x**2

The (x, y) coordinates can also be given as keys and values of a
dictionary (and the points need not be equispaced):

>>> interpolate([(-1, 2), (1, 2), (2, 5)], x)
x**2 + 1
>>> interpolate({-1: 2, 1: 2, 2: 5}, x)
x**2 + 1

If the interpolation is going to be used only once then the
value of interest can be passed instead of passing a symbol:

>>> interpolate([1, 4, 9], 5)
25

Symbolic coordinates are also supported:

>>> [(i,interpolate((a, b), i)) for i in range(1, 4)]
[(1, a), (2, b), (3, -a + 2*b)]
r   r6   )r   Ú
isinstanceÚdictr   Úlistr   ÚitemsÚtupleÚindexr   r   ÚexpandÚ
ValueErrorr   r!   )ÚdataÚxÚnÚXÚYÚds         r4   ÚinterpolaterO   �   s  € ôT 	ˆD‹	€Aä�$œ×ÑØ‹9Ü�T‘W“:ÐÜ”C˜Ÿ™›Ð&Ó'‰ˆˆ1ä�d˜1‘gœu×%Ñ%Üœ˜T˜
Ó#‰DˆAØ‹vÜ˜Ÿ7™7 1›:™Ó'Ð'ð ð ”E˜!˜Q ™U“OÓ#Ü˜ !™e™“~Ð%Ü�T“
ˆAÜ”U˜1˜a !™e“_Ó%ˆAðBÜ! !¨Ó-×4Ñ4Ó6Ð6øÜó BÜ‹GˆÜ! !¨Ó-×4Ñ4Ó6×;Ñ;¸AÓAÒAðBús   Ã)D Ä=EÅErJ   c                 óv  ^^^
• SSK Jn  [        [        U 6 5      u  pE[	        U5      T-
  S-
  nUS:  a  [        S5      eU" TU-   S-   TU-   S-   5      n[        [        TU5      5       H-  n[        TU-   S-   5       H  n	XyU4   XI   -  XyUS-   4'   M     M/     [        US-   5       H6  n[        TU-   S-   5       H  n	XyXh-
  4   * XY   -  XyTU-   S-   U-
  4'   M      M8     UR                  5       S   m
[        UU
4S j[        TS-   5       5       5      [        UUU
4S j[        US-   5       5       5      -  $ )a  
Returns a rational interpolation, where the data points are element of
any integral domain.

The first argument  contains the data (as a list of coordinates). The
``degnum`` argument is the degree in the numerator of the rational
function. Setting it too high will decrease the maximal degree in the
denominator for the same amount of data.

Examples
========

>>> from sympy.polys.polyfuncs import rational_interpolate

>>> data = [(1, -210), (2, -35), (3, 105), (4, 231), (5, 350), (6, 465)]
>>> rational_interpolate(data, 2)
(105*x**2 - 525)/(x + 1)

Values do not need to be integers:

>>> from sympy import sympify
>>> x = [1, 2, 3, 4, 5, 6]
>>> y = sympify("[-1, 0, 2, 22/5, 7, 68/7]")
>>> rational_interpolate(zip(x, y), 2)
(3*x**2 - 7*x + 2)/(x + 1)

The symbol for the variable can be changed if needed:
>>> from sympy import symbols
>>> z = symbols('z')
>>> rational_interpolate(data, 2, X=z)
(105*z**2 - 525)/(z + 1)

References
==========

.. [1] Algorithm is adapted from:
       http://axiom-wiki.newsynthesis.org/RationalInterpolation

r   )Úonesr6   z'Too few values for the required degree.é   c              3   ó:   >#   • U  H  nTU   TU-  -  v •  M     g 7f©N© )Ú.0r(   rL   r,   s     €€r4   Ú	<genexpr>Ú'rational_interpolate.<locals>.<genexpr>  s   øé € Ð7Ò%6 ��!‘�q˜!‘t–Ò%6ùs   ƒc              3   óF   >#   • U  H  nTUT-   S -      TU-  -  v •  M     g7f)r6   NrU   )rV   r(   rL   Údegnumr,   s     €€€r4   rW   rX     s'   øé € ÐA²L¨q�!�A˜‘J ‘NÑ# a¨¡dÖ*²Lùs   ƒ!)
Úsympy.matrices.denserQ   rC   r   r   r
   r   ÚmaxÚ	nullspaceÚsum)rI   rZ   rL   rQ   ÚxdataÚydataÚkÚcÚjr(   r,   s    ``       @r4   Úrational_interpolaterd   Ï   sD  ú€ õR *äœ˜T˜
Ó#�L€EäˆE‹
�VÑ˜aÑ€AØˆ1ƒuÜÐCÓDÐDÙˆV�a‰Z˜!‰^˜V a™Z¨!™^Ó,€AÜ”3�v˜q“>Ö"ˆÜ�v ‘z A‘~Ö&ˆAØ˜q˜D™' %¡(Ñ*ˆA��Q‘ˆh‹Kó 'ñ #ô �1�q‘5Ž\ˆÜ�v ‘z A‘~Ö&ˆAØ()¨Q©U¨(© |°E±HÑ'<ˆA�˜!‘˜a‘ !Ñ#Ð#Ó$ó 'ñ ð 	
�‰‹�aÑ€AÜÕ7¤U¨6°A©:Ô%6Ó7Ó7ÜÖA´E¸!¸a¹%´LÓAÓAñBð Có    Nc                 ó€  • [        U/ 5        [        U[        5      (       a  U4U-   Sp [        U /UQ70 UD6u  pU R                  (       a  [        S5      eU R                  5       nUS:  a  [        S5      eUc
  [        SSS9n[        X5      nU[        U5      :w  a  [        SU< S	[        U5      < 35      eU R                  5       U R                  5       p‡/ S
p©[        USS 5       H0  u  p¼[!        US-   U5      nX¬U-  -  nU	R#                  XÜ45        U
* n
M2     U	$ ! [         a  n[        SSU5      eSnAff = f)zÿ
Generate Viete's formulas for ``f``.

Examples
========

>>> from sympy.polys.polyfuncs import viete
>>> from sympy import symbols

>>> x, a, b, c, r1, r2 = symbols('x,a:c,r1:3')

>>> viete(a*x**2 + b*x + c, [r1, r2], x)
[(r1 + r2, -b/a), (r1*r2, c/a)]

NÚvieter6   z(multivariate polynomials are not allowedz8Cannot derive Viete's formulas for a constant polynomialr,   )Ústartz	required z roots, got éÿÿÿÿ)r   rA   r   r   r   r   Úis_multivariater	   ÚdegreerH   r   r   r   ÚLCr;   r    r   r   )r*   Úrootsr#   r$   r'   r=   rK   ÚlcÚcoeffsr)   Úsignr(   r?   Úpolys                 r4   rg   rg     sH  € ô" �$˜Ôä�%œ×ÑØ�h ‘o tˆeð1Ü Ð1 DÒ1¨DÑ1‰ˆð 	××Ü)Ø6ó8ð 	8ð 	
�‰‹
€Aàˆ1ƒuÜØFóHð 	Hð �}Ü  ¨AÑ.ˆä�‹N€EàŒC�‹JƒÝ»¼3¸u½:ÐFÓGÐGà—‘“˜Ÿ™›ˆØ�rˆDä˜f Q R˜jÖ)‰ˆÜ˜a !™e UÓ+ˆØ˜B‘h‘ˆØ�‰�t�mÔ$ØˆuŠñ	 *ð €Møô= ó 1Ü ¨¨CÓ0Ð0ûð1ús   ªD! Ä!
D=Ä+D8Ä8D=rT   )Ú__doc__Ú
sympy.corer   r   r   r   Úsympy.polys.polyerrorsr   r   r	   r
   Úsympy.polys.polyoptionsr   r   Úsympy.polys.polytoolsr   r   Úsympy.polys.specialpolysr   r   Úsympy.polys.ringsr   Úsympy.utilitiesr   r   r   r   r<   rO   rd   rg   rU   re   r4   Ú<module>rz      s¤   ðÙ 5÷ 0Ó /÷.ó .÷ Aß 6÷(å #ß :Ñ :àñD%ó ðD%ðN ñ2ó ð2ðj ñ>Bó ð>BðB Ù)0°«ó 8Có ð8Cðv ó5ó ñ5re   