§
    OŠtj
+  ã                   óò   — d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZmZmZ  ed¦  «        Z G d„ de¦  «        Zd„ Z G d„ de¦  «        ZdS )é    )ÚExpr)ÚDefinedFunctionÚArgumentIndexError)ÚIÚpi)ÚS)ÚDummy)Úassoc_legendre)Ú	factorial)ÚAbsÚ	conjugate)Úexp)Úsqrt)ÚsinÚcosÚcotÚxc                   ó\   — e Zd ZdZed„ ¦   «         Zd„ Zdd„Zd„ Zd„ Z	d„ Z
d	„ Zdd„Zd„ ZdS )ÚYnma4  
    Spherical harmonics defined as

    .. math::
        Y_n^m(\theta, \varphi) := \sqrt{\frac{(2n+1)(n-m)!}{4\pi(n+m)!}}
                                  \exp(i m \varphi)
                                  \mathrm{P}_n^m\left(\cos(\theta)\right)

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

    ``Ynm()`` gives the spherical harmonic function of order $n$ and $m$
    in $\theta$ and $\varphi$, $Y_n^m(\theta, \varphi)$. The four
    parameters are as follows: $n \geq 0$ an integer and $m$ an integer
    such that $-n \leq m \leq n$ holds. The two angles are real-valued
    with $\theta \in [0, \pi]$ and $\varphi \in [0, 2\pi]$.

    Examples
    ========

    >>> from sympy import Ynm, Symbol, simplify
    >>> from sympy.abc import n,m
    >>> theta = Symbol("theta")
    >>> phi = Symbol("phi")

    >>> Ynm(n, m, theta, phi)
    Ynm(n, m, theta, phi)

    Several symmetries are known, for the order:

    >>> Ynm(n, -m, theta, phi)
    (-1)**m*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

    As well as for the angles:

    >>> Ynm(n, m, -theta, phi)
    Ynm(n, m, theta, phi)

    >>> Ynm(n, m, theta, -phi)
    exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

    For specific integers $n$ and $m$ we can evaluate the harmonics
    to more useful expressions:

    >>> simplify(Ynm(0, 0, theta, phi).expand(func=True))
    1/(2*sqrt(pi))

    >>> simplify(Ynm(1, -1, theta, phi).expand(func=True))
    sqrt(6)*exp(-I*phi)*sin(theta)/(4*sqrt(pi))

    >>> simplify(Ynm(1, 0, theta, phi).expand(func=True))
    sqrt(3)*cos(theta)/(2*sqrt(pi))

    >>> simplify(Ynm(1, 1, theta, phi).expand(func=True))
    -sqrt(6)*exp(I*phi)*sin(theta)/(4*sqrt(pi))

    >>> simplify(Ynm(2, -2, theta, phi).expand(func=True))
    sqrt(30)*exp(-2*I*phi)*sin(theta)**2/(8*sqrt(pi))

    >>> simplify(Ynm(2, -1, theta, phi).expand(func=True))
    sqrt(30)*exp(-I*phi)*sin(2*theta)/(8*sqrt(pi))

    >>> simplify(Ynm(2, 0, theta, phi).expand(func=True))
    sqrt(5)*(3*cos(theta)**2 - 1)/(4*sqrt(pi))

    >>> simplify(Ynm(2, 1, theta, phi).expand(func=True))
    -sqrt(30)*exp(I*phi)*sin(2*theta)/(8*sqrt(pi))

    >>> simplify(Ynm(2, 2, theta, phi).expand(func=True))
    sqrt(30)*exp(2*I*phi)*sin(theta)**2/(8*sqrt(pi))

    We can differentiate the functions with respect
    to both angles:

    >>> from sympy import Ynm, Symbol, diff
    >>> from sympy.abc import n,m
    >>> theta = Symbol("theta")
    >>> phi = Symbol("phi")

    >>> diff(Ynm(n, m, theta, phi), theta)
    m*cot(theta)*Ynm(n, m, theta, phi) + sqrt((-m + n)*(m + n + 1))*exp(-I*phi)*Ynm(n, m + 1, theta, phi)

    >>> diff(Ynm(n, m, theta, phi), phi)
    I*m*Ynm(n, m, theta, phi)

    Further we can compute the complex conjugation:

    >>> from sympy import Ynm, Symbol, conjugate
    >>> from sympy.abc import n,m
    >>> theta = Symbol("theta")
    >>> phi = Symbol("phi")

    >>> conjugate(Ynm(n, m, theta, phi))
    (-1)**(2*m)*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

    To get back the well known expressions in spherical
    coordinates, we use full expansion:

    >>> from sympy import Ynm, Symbol, expand_func
    >>> from sympy.abc import n,m
    >>> theta = Symbol("theta")
    >>> phi = Symbol("phi")

    >>> expand_func(Ynm(n, m, theta, phi))
    sqrt((2*n + 1)*factorial(-m + n)/factorial(m + n))*exp(I*m*phi)*assoc_legendre(n, m, cos(theta))/(2*sqrt(pi))

    See Also
    ========

    Ynm_c, Znm

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Spherical_harmonics
    .. [2] https://mathworld.wolfram.com/SphericalHarmonic.html
    .. [3] https://functions.wolfram.com/Polynomials/SphericalHarmonicY/
    .. [4] https://dlmf.nist.gov/14.30

    c                 ó”  — |                      ¦   «         rC| }t          j        |z  t          dt          z  |z  |z  ¦  «        z  t          ||||¦  «        z  S |                      ¦   «         r| }t          ||||¦  «        S |                      ¦   «         r3| }t          dt          z  |z  |z  ¦  «        t          ||||¦  «        z  S d S )Néþÿÿÿ)Úcould_extract_minus_signr   ÚNegativeOner   r   r   )ÚclsÚnÚmÚthetaÚphis        úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/functions/special/spherical_harmonics.pyÚevalzYnm.eval‰   sÖ   € ð ×%Ò%Ñ'Ô'ð 	NØ�ˆAÝ”= !Ñ#¥c¨"­Q©$¨q©&°©*¡o¤oÑ5½¸A¸qÀ%ÈÑ8MÔ8MÑMÐMØ×)Ò)Ñ+Ô+ð 	)Ø�FˆEÝ�q˜!˜U CÑ(Ô(Ð(Ø×'Ò'Ñ)Ô)ð 	;Ø�$ˆCÝ�r�!‘t˜A‘v˜c‘z‘?”?¥S¨¨A¨u°cÑ%:Ô%:Ñ:Ð:ð	;ð 	;ó    c                 ó¢  — | j         \  }}}}t          d|z  dz   dt          z  z  t          ||z
  ¦  «        z  t          ||z   ¦  «        z  ¦  «        t	          t
          |z  |z  ¦  «        z  t          ||t          |¦  «        ¦  «        z  }|                     t          t          |¦  «        dz   dz   ¦  «        t          |¦  «        ¦  «        S ©Né   é   é   )
Úargsr   r   r   r   r   r
   r   Úsubsr   )ÚselfÚhintsr   r   r   r   Úrvs          r   Ú_eval_expand_funczYnm._eval_expand_func˜   s¸   € Øœ9Ñˆˆ1ˆe�SÝ�A�a‘C˜!‘G˜a¥™dÑ#¥i°°A±Ñ&6Ô&6Ñ6µyÀÀQÁÑ7GÔ7GÑGÑHÔHÝ•A�a‘C˜‘G‘”ñÝ-¨a°µC¸±J´JÑ?Ô?ñ@ˆð �wŠw•t�S ™ZœZ¨™]˜N¨QÑ.Ñ/Ô/µ°U±´Ñ<Ô<Ð<r!   r&   c                 óÜ  — |dk    rt          | |¦  «        ‚|dk    rt          | |¦  «        ‚|dk    r|| j        \  }}}}|t          |¦  «        z  t          ||||¦  «        z  t	          ||z
  ||z   dz   z  ¦  «        t          t           |z  ¦  «        z  t          ||dz   ||¦  «        z  z   S |dk    r)| j        \  }}}}t          |z  t          ||||¦  «        z  S t          | |¦  «        ‚)Nr%   r$   é   r&   )r   r'   r   r   r   r   r   )r)   Úargindexr   r   r   r   s         r   Úfdiffz	Ynm.fdiffŸ   s  € Ø�qŠ=ˆ=å$ T¨8Ñ4Ô4Ð4Ø˜Š]ˆ]å$ T¨8Ñ4Ô4Ð4Ø˜Š]ˆ]à#œyÑˆAˆq�%˜Ø�˜E™
œ
‘N¥S¨¨A¨u°cÑ%:Ô%:Ñ:Ý˜!˜a™% ! a¡%¨!¡)Ñ,Ñ-Ô-µµQ°B°s±F±´Ñ;½cÀ!ÀQÈÁUÈEÐSVÑ>WÔ>WÑWñXð Yà˜Š]ˆ]à#œyÑˆAˆq�%˜Ý�q‘5�3˜q ! U¨CÑ0Ô0Ñ0Ð0å$ T¨8Ñ4Ô4Ð4r!   c                 ó.   — |                       d¬¦  «        S )NT©Úfunc)Úexpand©r)   r   r   r   r   Úkwargss         r   Ú_eval_rewrite_as_polynomialzYnm._eval_rewrite_as_polynomial²   s   € ð �{Š{ ˆ{Ñ%Ô%Ð%r!   c                 ó6   — |                       t          ¦  «        S ©N)Úrewriter   r5   s         r   Ú_eval_rewrite_as_sinzYnm._eval_rewrite_as_sin·   s   € Ø�|Š|�CÑ Ô Ð r!   c                 óô   — ddl m}m}  ||                      d¬¦  «        ¦  «        }|                     t          t          |¦  «        ¦  «        t          |¦  «        i¦  «        } | ||¦  «        ¦  «        S )Nr   )ÚsimplifyÚtrigsimpTr2   )Úsympy.simplifyr=   r>   r4   Úxreplacer   r   )	r)   r   r   r   r   r6   r=   r>   Úterms	            r   Ú_eval_rewrite_as_coszYnm._eval_rewrite_as_cosº   sy   € à5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð ˆx˜Ÿš¨˜Ñ.Ô.Ñ/Ô/ˆà�}Š}�c¥# e¡*¤*™oœo­c°%©j¬jÐ9Ñ:Ô:ˆØˆx˜˜ ™œÑ'Ô'Ð'r!   c                 ól   — | j         \  }}}}t          j        |z  |                      || ||¦  «        z  S r9   )r'   r   r   r3   )r)   r   r   r   r   s        r   Ú_eval_conjugatezYnm._eval_conjugateÄ   s8   € àœ9Ñˆˆ1ˆe�SÝŒ}˜aÑ $§)¢)¨A°¨r°5¸#Ñ">Ô">Ñ>Ð>r!   Tc                 ó  — | j         \  }}}}t          d|z  dz   dt          z  z  t          ||z
  ¦  «        z  t          ||z   ¦  «        z  ¦  «        t	          ||z  ¦  «        z  t          ||t	          |¦  «        ¦  «        z  }t          d|z  dz   dt          z  z  t          ||z
  ¦  «        z  t          ||z   ¦  «        z  ¦  «        t          ||z  ¦  «        z  t          ||t	          |¦  «        ¦  «        z  }||fS r#   )r'   r   r   r   r   r
   r   )	r)   Údeepr*   r   r   r   r   ÚreÚims	            r   Úas_real_imagzYnm.as_real_imagÉ   só   € àœ9Ñˆˆ1ˆe�SÝ�A�a‘C˜!‘G˜a¥™dÑ#¥i°°A±Ñ&6Ô&6Ñ6µyÀÀQÁÑ7GÔ7GÑGÑHÔHÝ�!�C‘%‰jŒjñÝ)¨!¨Qµ°E±
´
Ñ;Ô;ñ<ˆå�A�a‘C˜!‘G˜a¥™dÑ#¥i°°A±Ñ&6Ô&6Ñ6µyÀÀQÁÑ7GÔ7GÑGÑHÔHÝ�!�C‘%‰jŒjñÝ)¨!¨Qµ°E±
´
Ñ;Ô;ñ<ˆà�Bˆxˆr!   c                 ó²  — ddl m}m} | j        d                              |¦  «        }| j        d                              |¦  «        }| j        d                              |¦  «        }| j        d                              |¦  «        } ||¦  «        5  |                     ||||¦  «        }d d d ¦  «         n# 1 swxY w Y   t          j        ||¦  «        S )Nr   )ÚmpÚworkprecr%   r$   r.   )ÚmpmathrK   rL   r'   Ú
_to_mpmathÚ	spherharmr   Ú_from_mpmath)	r)   ÚprecrK   rL   r   r   r   r   Úress	            r   Ú_eval_evalfzYnm._eval_evalfÒ   s  € ð 	(Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØŒI�aŒL×#Ò# DÑ)Ô)ˆØŒI�aŒL×#Ò# DÑ)Ô)ˆØ”	˜!”×'Ò'¨Ñ-Ô-ˆØŒi˜Œl×%Ò% dÑ+Ô+ˆØˆX�d‰^Œ^ð 	1ð 	1Ø—,’,˜q ! U¨CÑ0Ô0ˆCð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1åÔ   dÑ+Ô+Ð+s   ÂB9Â9B=Ã B=N)r&   )T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr    r,   r0   r7   r;   rB   rD   rI   rS   © r!   r   r   r      s¾   € € € € € ðwð wðr ð
;ð 
;ñ „[ð
;ð=ð =ð =ð5ð 5ð 5ð 5ð&&ð &ð &ð
!ð !ð !ð(ð (ð (ð?ð ?ð ?ð
ð ð ð ð,ð ,ð ,ð ,ð ,r!   r   c                 ó@   — t          t          | |||¦  «        ¦  «        S )a0  
    Conjugate spherical harmonics defined as

    .. math::
        \overline{Y_n^m(\theta, \varphi)} := (-1)^m Y_n^{-m}(\theta, \varphi).

    Examples
    ========

    >>> from sympy import Ynm_c, Symbol, simplify
    >>> from sympy.abc import n,m
    >>> theta = Symbol("theta")
    >>> phi = Symbol("phi")
    >>> Ynm_c(n, m, theta, phi)
    (-1)**(2*m)*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)
    >>> Ynm_c(n, m, -theta, phi)
    (-1)**(2*m)*exp(-2*I*m*phi)*Ynm(n, m, theta, phi)

    For specific integers $n$ and $m$ we can evaluate the harmonics
    to more useful expressions:

    >>> simplify(Ynm_c(0, 0, theta, phi).expand(func=True))
    1/(2*sqrt(pi))
    >>> simplify(Ynm_c(1, -1, theta, phi).expand(func=True))
    sqrt(6)*exp(I*(-phi + 2*conjugate(phi)))*sin(theta)/(4*sqrt(pi))

    See Also
    ========

    Ynm, Znm

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Spherical_harmonics
    .. [2] https://mathworld.wolfram.com/SphericalHarmonic.html
    .. [3] https://functions.wolfram.com/Polynomials/SphericalHarmonicY/

    )r   r   )r   r   r   r   s       r   ÚYnm_cr[   à   s!   € õP •S˜˜A˜u cÑ*Ô*Ñ+Ô+Ð+r!   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )ÚZnma{  
    Real spherical harmonics defined as

    .. math::

        Z_n^m(\theta, \varphi) :=
        \begin{cases}
          \frac{Y_n^m(\theta, \varphi) + \overline{Y_n^m(\theta, \varphi)}}{\sqrt{2}} &\quad m > 0 \\
          Y_n^m(\theta, \varphi) &\quad m = 0 \\
          \frac{Y_n^m(\theta, \varphi) - \overline{Y_n^m(\theta, \varphi)}}{i \sqrt{2}} &\quad m < 0 \\
        \end{cases}

    which gives in simplified form

    .. math::

        Z_n^m(\theta, \varphi) =
        \begin{cases}
          \frac{Y_n^m(\theta, \varphi) + (-1)^m Y_n^{-m}(\theta, \varphi)}{\sqrt{2}} &\quad m > 0 \\
          Y_n^m(\theta, \varphi) &\quad m = 0 \\
          \frac{Y_n^m(\theta, \varphi) - (-1)^m Y_n^{-m}(\theta, \varphi)}{i \sqrt{2}} &\quad m < 0 \\
        \end{cases}

    Examples
    ========

    >>> from sympy import Znm, Symbol, simplify
    >>> from sympy.abc import n, m
    >>> theta = Symbol("theta")
    >>> phi = Symbol("phi")
    >>> Znm(n, m, theta, phi)
    Znm(n, m, theta, phi)

    For specific integers n and m we can evaluate the harmonics
    to more useful expressions:

    >>> simplify(Znm(0, 0, theta, phi).expand(func=True))
    1/(2*sqrt(pi))
    >>> simplify(Znm(1, 1, theta, phi).expand(func=True))
    -sqrt(3)*sin(theta)*cos(phi)/(2*sqrt(pi))
    >>> simplify(Znm(2, 1, theta, phi).expand(func=True))
    -sqrt(15)*sin(2*theta)*cos(phi)/(4*sqrt(pi))

    See Also
    ========

    Ynm, Ynm_c

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Spherical_harmonics
    .. [2] https://mathworld.wolfram.com/SphericalHarmonic.html
    .. [3] https://functions.wolfram.com/Polynomials/SphericalHarmonicY/

    c                 ó@  — |j         r7t          ||||¦  «        t          ||||¦  «        z   t          d¦  «        z  }|S |j        rt          ||||¦  «        S |j        r?t          ||||¦  «        t          ||||¦  «        z
  t          d¦  «        t          z  z  }|S d S )Nr$   )Úis_positiver   r[   r   Úis_zeroÚis_negativer   )r   r   r   r   r   Úzzs         r   r    zZnm.evalE  s®   € àŒ=ð 	Ý�a˜˜E 3Ñ'Ô'­%°°1°e¸SÑ*AÔ*AÑAÅTÈ!ÁWÄWÑLˆBØˆIØŒYð 	Ý�q˜!˜U CÑ(Ô(Ð(ØŒ]ð 	Ý�a˜˜E 3Ñ'Ô'­%°°1°e¸SÑ*AÔ*AÑAÅdÈ1ÁgÄgÍaÁiÑPˆBØˆIð	ð 	r!   N)rT   rU   rV   rW   rX   r    rY   r!   r   r]   r]     s:   € € € € € ð7ð 7ðr ðð ñ „[ðð ð r!   r]   N)Úsympy.core.exprr   Úsympy.core.functionr   r   Úsympy.core.numbersr   r   Úsympy.core.singletonr   Úsympy.core.symbolr	   Úsympy.functionsr
   Ú(sympy.functions.combinatorial.factorialsr   Ú$sympy.functions.elementary.complexesr   r   Ú&sympy.functions.elementary.exponentialr   Ú(sympy.functions.elementary.miscellaneousr   Ú(sympy.functions.elementary.trigonometricr   r   r   Ú_xr   r[   r]   rY   r!   r   ú<module>ro      sw  ðØ  Ð  Ð  Ð  Ð  Ð  Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø "Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #Ø *Ð *Ð *Ð *Ð *Ð *Ø >Ð >Ð >Ð >Ð >Ð >Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà
€Uˆ3�Z„Z€ðN,ð N,ð N,ð N,ð N,ˆ/ñ N,ô N,ð N,ðb(,ð (,ð (,ðVCð Cð Cð Cð Cˆ/ñ Cô Cð Cð Cð Cr!   