Ë
    7^(hÅ'  ã                   ó:  — d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ d„ Zedd	„«       Zd
„ Zdd„Zd„ Zd„ Zd„ Zd„ Zedd„«       Zedd„«       Zd„ Zd„ Zedd„«       Zedd„«       Z d„ Z!edd„«       Z"d„ Z#edd„«       Z$d„ Z%d„ Z&dd„Z'y)z:Efficient functions for generating orthogonal polynomials.é    )ÚDummy)Údup_mulÚdup_mul_groundÚ
dup_lshiftÚdup_subÚdup_addÚdup_sub_termÚdup_sub_groundÚdup_sqr)ÚZZÚQQ)Ú
named_poly)Úpublicc           	      ó@  — | dk  r|j                   gS |j                   g||z    |d«      z  |j                   z   ||z
   |d«      z  g}}t        d| dz   «      D �]B  } ||«      ||z   |z   z  ||z    |d«      |z  z    |d«      z
  z  }||z    |d«      |z  z   |j                   z
  ||z  ||z  z
  z   |d«      |z  z  }||z    |d«      |z  z   |j                   z
  ||z    |d«      |z  z    |d«      z
  z  ||z    |d«      |z  z   z   |d«      |z  z  }	||z   |j                   z
  ||z   |j                   z
  z  ||z    |d«      |z  z   z  |z  }
t        |||«      }t        t        |d|«      |	|«      }t        ||
|«      }|t	        t        |||«      ||«      }}�ŒE |S )z/Low-level implementation of Jacobi polynomials.é   é   )ÚoneÚranger   r   r   r   )ÚnÚaÚbÚKÚm2Úm1ÚiÚdenÚf0Úf1Úf2Úp0Úp1Úp2s                 úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/orthopolys.pyÚ
dup_jacobir$   	   sÇ  € àˆ1‚uØ—‘ˆwˆØ�e‰eˆW˜˜!™™Q˜q›T‘z A§E¡EÑ)¨A¨a©C±°1³©:Ð6ˆ€BÜ�1�a˜‘c‹]ó 8ˆÙ�‹d�A˜‘E˜A‘IÑ  A¡©¨!«¨Q©¡±°1³Ñ 5Ñ6ˆØ�!‰e‘a˜“d˜1‘f‰n˜qŸu™uÑ$¨¨1©¨q°©s©Ñ3±q¸³t¸C±xÑ@ˆØ�!‰e‘a˜“d˜1‘f‰n˜qŸu™uÑ$¨¨Q©±°1³°a±©¹!¸A»$Ñ)>Ñ?À1ÀqÁ5É1ÈQË4ÐPQÉ6Á>ÑRÑVWÐXYÓVZÐ[^ÑV^Ñ_ˆØ�!‰e�a—e‘e‰m˜a !™e a§e¡e™mÑ,¨a°!©e±a¸³d¸1±f©nÑ=ÀÑCˆÜ˜B  AÓ&ˆÜœJ r¨1¨aÓ0°"°aÓ8ˆÜ˜B  AÓ&ˆØ”WœW R¨¨QÓ/°°QÓ7ˆBŠð8ð €Ió    Nc           	      ó0   — t        | t        dd|||f|«      S )aŽ  Generates the Jacobi polynomial `P_n^{(a,b)}(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    a
        Lower limit of minimal domain for the list of coefficients.
    b
        Upper limit of minimal domain for the list of coefficients.
    x : optional
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    NzJacobi polynomial)r   r$   )r   r   r   ÚxÚpolyss        r#   Újacobi_polyr)      s    € ô" �aœ TÐ+>ÀÀAÀqÀ	È5ÓQÐQr%   c                 óª  — | dk  r|j                   gS |j                   g |d«      |z  |j                  g}}t        d| dz   «      D ]Š  }t        t	        |d|«       |d«      ||j                   z
  z   ||«      z   |d«      z   |«      }t        | |d«      ||j                   z
  z   ||«      z  |j                   z   |«      }|t        |||«      }}ŒŒ |S )z3Low-level implementation of Gegenbauer polynomials.r   r   ©r   Úzeror   r   r   r   )r   r   r   r   r   r   r!   r"   s           r#   Údup_gegenbauerr-   ,   sÏ   € àˆ1‚uØ—‘ˆwˆØ�e‰eˆW‘q˜“t˜A‘v˜qŸv™vÐ&ˆ€BÜ�1�a˜‘c‹]ò (ˆÜœJ r¨1¨aÓ0±!°A³$¸¸!¿%¹%¹±.ÁÀ1ÃÑ2EÉÈ!ËÑ2LÈaÓPˆÜ˜B¡ !£ a¨¯©¡g¡©q°«tÑ 3°a·e±eÑ ;¸QÓ?ˆØ”W˜R  QÓ'ˆB‰ð(ð €Ir%   c                 ó.   — t        | t        dd||f|«      S )a?  Generates the Gegenbauer polynomial `C_n^{(a)}(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    a
        Decides minimal domain for the list of coefficients.
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    NzGegenbauer polynomial)r   r-   )r   r   r'   r(   s       r#   Úgegenbauer_polyr/   7   s   € ô �aœ¨Ð/FÈÈAÈÐPUÓVÐVr%   c                 ó`   — | dk  r|j                   gS | dk  rt        | |«      S t        | |«      S )zDLow-level implementation of Chebyshev polynomials of the first kind.r   é@   )r   Ú_dup_chebyshevt_recÚ_dup_chebyshevt_prod)r   r   s     r#   Údup_chebyshevtr4   G   s5   € àˆ1‚uØ—‘ˆwˆàˆ2‚vÜ" 1 aÓ(Ð(Ü  1Ó%Ð%r%   c                 óÌ   — |j                   g|j                   |j                  g}}t        | dz
  «      D ]-  }|t        t	        t        |d|«       |d«      |«      ||«      }}Œ/ |S )aò   Chebyshev polynomials of the first kind using recurrence.

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

    Chebyshev polynomials of the first kind are defined by the recurrence
    relation:

    .. math::
        T_0(x) &= 1\\
        T_1(x) &= x\\
        T_n(x) &= 2xT_{n-1}(x) - T_{n-2}(x)

    This function calculates the Chebyshev polynomial of the first kind using
    the above recurrence relation.

    Parameters
    ==========

    n : int
        n is a nonnegative integer.
    K : domain

    r   r   ©r   r,   r   r   r   r   )r   r   r   r   Ú_s        r#   r2   r2   P   sf   € ð2 �e‰eˆW�q—u‘u˜aŸf™f�oˆ€BÜ�1�q‘5‹\ò SˆØ”Wœ^¬J°r¸1¸aÓ,@Á!ÀAÃ$ÈÓJÈBÐPQÓRˆB‰ðSà€Ir%   c           
      óà  — |j                   |j                  g |d«      |j                  |j                    g}}t        | «      dd D ]¤  }t        t	        t        |||«       |d«      |«      |j                   d|«      }|dk(  r5|t        t	        t        ||«       |d«      |«      |j                   |«      }}Œqt        t	        t        ||«       |d«      |«      |j                   |«      |}}Œ¦ |S )a§   Chebyshev polynomials of the first kind using recursive products.

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

    Computes Chebyshev polynomials of the first kind using

    .. math::
        T_{2n}(x) &= 2T_n^2(x) - 1\\
        T_{2n+1}(x) &= 2T_{n+1}(x)T_n(x) - x

    This is faster than ``_dup_chebyshevt_rec`` for large ``n``.

    Parameters
    ==========

    n : int
        n is a nonnegative integer.
    K : domain

    r   é   Nr   Ú1)r   r,   Úbinr	   r   r   r
   r   )r   r   r   r   r   Úcs         r#   r3   r3   n   sÚ   € ð, �e‰e�Q—V‘Vˆ_™q ›t Q§V¡V¨a¯e©e¨VÐ4ˆ€BÜ�‹V�A�BˆZò ZˆÜœ¬°°B¸Ó(:¹A¸a»DÀ!ÓDÀaÇeÁeÈQÐPQÓRˆØ�#ŠIØœ¤~´g¸bÀ!³nÁaÈÃdÈAÓ'NÐPQ×PUÑPUÐWXÓY�‰Bä#¤N´7¸2¸q³>Á1ÀQÃ4ÈÓ$KÈQÏUÉUÐTUÓVÐXY�‰BðZð €Ir%   c                 óê   — | dk  r|j                   gS |j                   g |d«      |j                  g}}t        d| dz   «      D ]-  }|t        t	        t        |d|«       |d«      |«      ||«      }}Œ/ |S )zELow-level implementation of Chebyshev polynomials of the second kind.r   r   r6   ©r   r   r   r   r   s        r#   Údup_chebyshevur?   �   sx   € àˆ1‚uØ—‘ˆwˆØ�e‰eˆW‘q˜“t˜QŸV™V�nˆ€BÜ�1�a˜‘c‹]ò SˆØ”Wœ^¬J°r¸1¸aÓ,@Á!ÀAÃ$ÈÓJÈBÐPQÓRˆB‰ðSà€Ir%   c                 ó4   — t        | t        t        d|f|«      S )a  Generates the Chebyshev polynomial of the first kind `T_n(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    z&Chebyshev polynomial of the first kind)r   r4   r   ©r   r'   r(   s      r#   Úchebyshevt_polyrB   –   s"   € ô �aœ¬Ø4°q°d¸EóCð Cr%   c                 ó4   — t        | t        t        d|f|«      S )a  Generates the Chebyshev polynomial of the second kind `U_n(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    z'Chebyshev polynomial of the second kind)r   r?   r   rA   s      r#   Úchebyshevu_polyrD   ¦   s"   € ô �aœ¬Ø5¸°t¸UóDð Dr%   c           	      ó  — | dk  r|j                   gS |j                   g |d«      |j                  g}}t        d| dz   «      D ]E  }t        |d|«      }t	        | ||dz
  «      |«      }|t	        t        |||«       |d«      |«      }}ŒG |S )z0Low-level implementation of Hermite polynomials.r   r   ©r   r,   r   r   r   r   ©r   r   r   r   r   r   r   s          r#   Údup_hermiterH   ¶   s’   € àˆ1‚uØ—‘ˆwˆØ�e‰eˆW‘q˜“t˜QŸV™V�nˆ€BÜ�1�a˜‘c‹]ò ?ˆÜ�r˜1˜aÓ ˆÜ˜2™q  1¡›v qÓ)ˆØ”^¤G¨A¨q°!Ó$4±a¸³d¸AÓ>ˆB‰ð?ð €Ir%   c                 ó   — | dk  r|j                   gS |j                   g|j                   |j                  g}}t        d| dz   «      D ]4  }t        |d|«      }t	        | ||dz
  «      |«      }|t        |||«      }}Œ6 |S )z>Low-level implementation of probabilist's Hermite polynomials.r   r   rF   rG   s          r#   Údup_hermite_probrJ   Á   s…   € àˆ1‚uØ—‘ˆwˆØ�e‰eˆW�q—u‘u˜aŸf™f�oˆ€BÜ�1�a˜‘c‹]ò &ˆÜ�r˜1˜aÓ ˆÜ˜2™q  1¡›v qÓ)ˆØ”W˜Q  1Ó%ˆB‰ð&ð €Ir%   c                 ó4   — t        | t        t        d|f|«      S )zóGenerates the Hermite polynomial `H_n(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    zHermite polynomial)r   rH   r   rA   s      r#   Úhermite_polyrL   Ì   s   € ô �aœ¤bÐ*>ÀÀÀeÓLÐLr%   c                 ó4   — t        | t        t        d|f|«      S )a  Generates the probabilist's Hermite polynomial `He_n(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    z probabilist's Hermite polynomial)r   rJ   r   rA   s      r#   Úhermite_prob_polyrN   Û   s!   € ô �aÔ)¬2Ø.°°°eó=ð =r%   c                 ó2  — | dk  r|j                   gS |j                   g|j                   |j                  g}}t        d| dz   «      D ]M  }t        t	        |d|«       |d|z  dz
  |«      |«      }t        | ||dz
  |«      |«      }|t        |||«      }}ŒO |S )z1Low-level implementation of Legendre polynomials.r   r   r+   rG   s          r#   Údup_legendrerP   ë   sž   € àˆ1‚uØ—‘ˆwˆØ�e‰eˆW�q—u‘u˜aŸf™f�oˆ€BÜ�1�a˜‘c‹]ò &ˆÜœ: b¨!¨QÓ/±°1°Q±3°q±5¸!³¸aÓ@ˆÜ˜2™q  1¡ a›y¨!Ó,ˆØ”W˜Q  1Ó%ˆB‰ð&ð €Ir%   c                 ó4   — t        | t        t        d|f|«      S )zôGenerates the Legendre polynomial `P_n(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    zLegendre polynomial)r   rP   r   rA   s      r#   Úlegendre_polyrR   ö   s   € ô �aœ¤rÐ+@À1À$ÈÓNÐNr%   c           	      ód  — |j                   g|j                  g}}t        d| dz   «      D ]ƒ  }t        ||j                    ||«      z  ||j                  z
   ||«      z   |d«      z   g|«      }t	        |||j                  z
   ||«      z  |j                  z   |«      }|t        |||«      }}Œ… |S )z1Low-level implementation of Laguerre polynomials.r   r   )r,   r   r   r   r   r   )r   Úalphar   r   r   r   r   r   s           r#   Údup_laguerrerU     s¬   € à�f‰fˆX˜Ÿ™�wˆ€BÜ�1�a˜‘c‹]ò &ˆÜ�B˜!Ÿ%™%˜¡ !£™ u¨Q¯U©U¡{±A°a³DÑ&8¹1¸Q»4Ñ&?Ð@À!ÓDˆÜ˜2  a§e¡e¡©Q¨q«TÑ1°A·E±EÑ9¸1Ó=ˆØ”W˜Q  1Ó%ˆB‰ð&ð €Ir%   c                 ó.   — t        | t        dd||f|«      S )aQ  Generates the Laguerre polynomial `L_n^{(\alpha)}(x)`.

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    alpha : optional
        Decides minimal domain for the list of coefficients.
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.
    NzLaguerre polynomial)r   rU   )r   r'   rT   r(   s       r#   Úlaguerre_polyrW     s   € ô �aœ tÐ-BÀQÈÀJÐPUÓVÐVr%   c                 ó*  — | dk  r|j                   |j                  gS |j                   g|j                   |j                  g}}t        d| dz   «      D ]3  }|t        t	        t        |d|«       |d|z  dz
  «      |«      ||«      }}Œ5 t        |d|«      S )z%Low-level implementation of fn(n, x).r   r   r6   r>   s        r#   Údup_spherical_bessel_fnrY     s’   € àˆ1‚uØ—‘�q—v‘vˆÐØ�e‰eˆW�q—u‘u˜aŸf™f�oˆ€BÜ�1�a˜‘c‹]ò WˆØ”Wœ^¬J°r¸1¸aÓ,@Á!ÀAÀaÁCÈÁEÃ(ÈAÓNÐPRÐTUÓVˆB‰ðWä�b˜!˜QÓÐr%   c                 óÚ   — |j                   |j                  g|j                  g}}t        d| dz   «      D ]3  }|t        t	        t        |d|«       |dd|z  z
  «      |«      ||«      }}Œ5 |S )z&Low-level implementation of fn(-n, x).r   r   r9   r6   r>   s        r#   Údup_spherical_bessel_fn_minusr[   (  so   € à�e‰e�Q—V‘Vˆ_˜qŸv™v˜hˆ€BÜ�1�a˜‘c‹]ò WˆØ”Wœ^¬J°r¸1¸aÓ,@Á!ÀAÀaÈÁcÁEÃ(ÈAÓNÐPRÐTUÓVˆB‰ðWà€Ir%   c           	      ó’   — |€t        d«      }| dk  rt        nt        }t        t	        | «      |t
        dt        d«      |z  f|«      S )aè  
    Coefficients for the spherical Bessel functions.

    These are only needed in the jn() function.

    The coefficients are calculated from:

    fn(0, z) = 1/z
    fn(1, z) = 1/z**2
    fn(n-1, z) + fn(n+1, z) == (2*n+1)/z * fn(n, z)

    Parameters
    ==========

    n : int
        Degree of the polynomial.
    x : optional
    polys : bool, optional
        If True, return a Poly, otherwise (default) return an expression.

    Examples
    ========

    >>> from sympy.polys.orthopolys import spherical_bessel_fn as fn
    >>> from sympy import Symbol
    >>> z = Symbol("z")
    >>> fn(1, z)
    z**(-2)
    >>> fn(2, z)
    -1/z + 3/z**3
    >>> fn(3, z)
    -6/z**2 + 15/z**4
    >>> fn(4, z)
    1/z - 45/z**3 + 105/z**5

    r'   r   Ú r   )r   r[   rY   r   Úabsr   r   )r   r'   r(   Úfs       r#   Úspherical_bessel_fnr`   /  sE   € ðJ 	€yÜ�#‹JˆØ)*¨QªÕ%Ô4K€AÜ”c˜!“f˜a¤ R¬"¨Q«%°©'¨°UÓ;Ð;r%   )NF)Nr   F)(Ú__doc__Úsympy.core.symbolr   Úsympy.polys.densearithr   r   r   r   r   r	   r
   r   Úsympy.polys.domainsr   r   Úsympy.polys.polytoolsr   Úsympy.utilitiesr   r$   r)   r-   r/   r4   r2   r3   r?   rB   rD   rH   rJ   rL   rN   rP   rR   rU   rW   rY   r[   r`   © r%   r#   ú<module>rh      s  ðÙ @Ý #÷I÷ Ió Iç &Ý ,Ý "òð  òRó ðRò$	óWò &òò<ò>ð òCó ðCð òDó ðDò	ò	ð òMó ðMð ò=ó ð=ò	ð òOó ðOòð òWó ðWò  òô(<r%   