Ë
    7^(hR  ã                   óz   — d 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mZ ddlmZ e G d„ d	ee«      «       Zy
)z0Implementation of :class:`FractionField` class. é    )ÚField)ÚCompositeDomain)ÚDMF)ÚGeneratorsNeeded)Údict_from_basicÚbasic_from_dictÚ_dict_reorder)Úpublicc                   óÀ   — e Zd ZdZeZdxZZdZdZ	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#y)ÚFractionFieldz3A class for representing rational function fields. Tc                 ó  — |st        d«      ‚t        |«      dz
  }t        |«      | _        | j                  j	                  ||«      | _        | j                  j                  ||«      | _        |x| _        | _        |x| _        | _	        y )Nzgenerators not specifiedé   )
r   ÚlenÚngensÚdtypeÚzeroÚoneÚdomainÚdomÚsymbolsÚgens)Úselfr   r   Úlevs       úc/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/domains/old_fractionfield.pyÚ__init__zFractionField.__init__   sq   € ÙÜ"Ð#=Ó>Ð>ä�$‹i˜!‰mˆÜ˜“YˆŒ
à—J‘J—O‘O C¨Ó-ˆŒ	Ø—:‘:—>‘> # sÓ+ˆŒà!$Ð$ˆŒ�d”hØ#'Ð'ˆŒ�t•yó    c                 ó<   —  | j                   |g| j                  ¢­Ž S )z-Make a new fraction field with given domain. )Ú	__class__r   )r   r   s     r   Ú
set_domainzFractionField.set_domain"   s   € àˆt�~‰~˜cÐ. D§I¡IÒ.Ð.r   c                 óh   — | j                  || j                  t        | j                  «      dz
  «      S )Nr   )r   r   r   r   )r   Úelements     r   ÚnewzFractionField.new&   s&   € Ø�z‰z˜' 4§8¡8¬S°·±«^¸aÑ-?Ó@Ð@r   c                 óŒ   — t        | j                  «      dz   dj                  t        t         | j                  «      «      z   dz   S )Nú(ú,ú))Ústrr   ÚjoinÚmapr   ©r   s    r   Ú__str__zFractionField.__str__)   s3   € Ü�4—8‘8‹}˜sÑ" S§X¡X¬c´#°t·y±yÓ.AÓ%BÑBÀSÑHÐHr   c                 ó„   — t        | j                  j                  | j                  | j                  | j
                  f«      S )N)Úhashr   Ú__name__r   r   r   r*   s    r   Ú__hash__zFractionField.__hash__,   s,   € Ü�T—^‘^×,Ñ,¨d¯j©j¸$¿(¹(ÀDÇIÁIÐNÓOÐOr   c                 óÄ   — t        |t        «      xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S )z0Returns ``True`` if two domains are equivalent. )Ú
isinstancer   r   r   r   )r   Úothers     r   Ú__eq__zFractionField.__eq__/   sW   € ä˜%¤Ó/ò \Ø�J‰J˜%Ÿ+™+Ñ%ò\Ø*.¯(©(°e·i±iÑ*?ò\ØDHÇIÁIÐQV×Q[ÑQ[ÑD[ð	\r   c                 óÌ   — t        |j                  «       j                  «       g| j                  ¢­Ž t        |j	                  «       j                  «       g| j                  ¢­Ž z  S )z!Convert ``a`` to a SymPy object. )r   ÚnumerÚto_sympy_dictr   Údenom©r   Úas     r   Úto_sympyzFractionField.to_sympy4   sN   € ä §¡£	× 7Ñ 7Ó 9ÐF¸D¿I¹IÒFÜ §¡£	× 7Ñ 7Ó 9ÐF¸D¿I¹IÒFñGð 	Hr   c                 ó˜  — |j                  «       \  }}t        || j                  ¬«      \  }}t        || j                  ¬«      \  }}|j                  «       D ]#  \  }}| j                  j                  |«      ||<   Œ% |j                  «       D ]#  \  }}| j                  j                  |«      ||<   Œ%  | ||f«      j                  «       S )z)Convert SymPy's expression to ``dtype``. )r   )Úas_numer_denomr   r   Úitemsr   Ú
from_sympyÚcancel)	r   r9   ÚpÚqÚnumÚ_ÚdenÚkÚvs	            r   r>   zFractionField.from_sympy9   sº   € à×ÑÓ!‰ˆˆ1ä  ¨¯©Ô3‰ˆˆQÜ  ¨¯©Ô3‰ˆˆQà—I‘I“Kò 	,‰DˆAˆqØ—X‘X×(Ñ(¨Ó+ˆC�ŠFð	,ð —I‘I“Kò 	,‰DˆAˆqØ—X‘X×(Ñ(¨Ó+ˆC�ŠFð	,ñ �S˜#�JÓ×&Ñ&Ó(Ð(r   c                 óF   —  | | j                   j                  ||«      «      S ©z.Convert a Python ``int`` object to ``dtype``. ©r   Úconvert©ÚK1r9   ÚK0s      r   Úfrom_ZZzFractionField.from_ZZH   ó   € á�"—&‘&—.‘.  BÓ'Ó(Ð(r   c                 óF   —  | | j                   j                  ||«      «      S rH   rI   rK   s      r   Úfrom_ZZ_pythonzFractionField.from_ZZ_pythonL   rO   r   c                 óF   —  | | j                   j                  ||«      «      S )z3Convert a Python ``Fraction`` object to ``dtype``. rI   rK   s      r   Úfrom_QQ_pythonzFractionField.from_QQ_pythonP   rO   r   c                 óF   —  | | j                   j                  ||«      «      S )z,Convert a GMPY ``mpz`` object to ``dtype``. rI   rK   s      r   Úfrom_ZZ_gmpyzFractionField.from_ZZ_gmpyT   rO   r   c                 óF   —  | | j                   j                  ||«      «      S )z,Convert a GMPY ``mpq`` object to ``dtype``. rI   rK   s      r   Úfrom_QQ_gmpyzFractionField.from_QQ_gmpyX   rO   r   c                 óF   —  | | j                   j                  ||«      «      S )z.Convert a mpmath ``mpf`` object to ``dtype``. rI   rK   s      r   Úfrom_RealFieldzFractionField.from_RealField\   rO   r   c                 ó,  — | j                   |j                   k(  r^| j                  |j                  k(  r | |j                  «       «      S  | |j                  | j                  «      j                  «       «      S t	        |j                  «       |j                   | j                   «      \  }}| j                  |j                  k7  r3|D �cg c](  }| j                  j                  ||j                  «      ‘Œ* }} | t        t        ||«      «      «      S c c}w )z'Convert a ``DMF`` object to ``dtype``. )r   r   Úto_listrJ   r	   Úto_dictÚdictÚzip)rL   r9   rM   ÚmonomsÚcoeffsÚcs         r   Úfrom_GlobalPolynomialRingz'FractionField.from_GlobalPolynomialRing`   sÆ   € à�7‰7�b—g‘gÒØ�v‰v˜Ÿ™ÒÙ˜!Ÿ)™)›+“Ð&á˜!Ÿ)™) B§F¡FÓ+×3Ñ3Ó5Ó6Ð6ä*¨1¯9©9«;¸¿¹ÀÇÁÓI‰NˆF�Fà�v‰v˜Ÿ™ÒØ>DÖF¸˜2Ÿ6™6Ÿ>™>¨!¨R¯V©VÕ4ÐF�ÐFá”dœ3˜v vÓ.Ó/Ó0Ð0ùò Gs   Ã-Dc           	      ó$  — | j                   |j                   k(  r�| j                  |j                  k(  r|S  | |j                  «       j                  | j                  «      j	                  «       |j                  «       j                  | j                  «      j	                  «       f«      S t        |j                   «      j                  | j                   «      �r/t        |j                  «       j                  «       |j                   | j                   «      \  }}t        |j                  «       j                  «       |j                   | j                   «      \  }}| j                  |j                  k7  rf|D �cg c](  }| j                  j                  ||j                  «      ‘Œ* }}|D �cg c](  }| j                  j                  ||j                  «      ‘Œ* }} | t        t        ||«      «      t        t        ||«      «      f«      S yc c}w c c}w )aÓ  
        Convert a fraction field element to another fraction field.

        Examples
        ========

        >>> from sympy.polys.polyclasses import DMF
        >>> from sympy.polys.domains import ZZ, QQ
        >>> from sympy.abc import x

        >>> f = DMF(([ZZ(1), ZZ(2)], [ZZ(1), ZZ(1)]), ZZ)

        >>> QQx = QQ.old_frac_field(x)
        >>> ZZx = ZZ.old_frac_field(x)

        >>> QQx.from_FractionField(f, ZZx)
        DMF([1, 2], [1, 1], QQ)

        N)r   r   r5   rJ   r[   r7   ÚsetÚissubsetr	   r\   r]   r^   )rL   r9   rM   ÚnmonomsÚncoeffsÚdmonomsÚdcoeffsra   s           r   Úfrom_FractionFieldz FractionField.from_FractionFieldo   s‡  € ð( �7‰7�b—g‘gÒØ�v‰v˜Ÿ™ÒØ�á˜1Ÿ7™7›9×,Ñ,¨R¯V©VÓ4×<Ñ<Ó>ØŸ7™7›9×,Ñ,¨R¯V©VÓ4×<Ñ<Ó>ð@ó Að Aä�—‘‹\×"Ñ" 2§7¡7Õ+Ü,Ø—‘“	×!Ñ!Ó# R§W¡W¨b¯g©gó 7ÑˆG�Wä,Ø—‘“	×!Ñ!Ó# R§W¡W¨b¯g©gó 7ÑˆG�Wð �v‰v˜Ÿ™ÒØ?FÖH¸!˜BŸF™FŸN™N¨1¨b¯f©fÕ5ÐH�ÐHØ?FÖH¸!˜BŸF™FŸN™N¨1¨b¯f©fÕ5ÐH�ÐHá”tœC ¨Ó1Ó2´D¼¸WÀgÓ9NÓ4OÐPÓQÐQð ,ùò IùÚHs   Å5-HÆ(-Hc                 óH   — ddl m}  || j                  g| j                  ¢­Ž S )z)Returns a ring associated with ``self``. r   )ÚPolynomialRing)Úsympy.polys.domainsrl   r   r   )r   rl   s     r   Úget_ringzFractionField.get_ring•   s   € å6Ù˜dŸh™hÐ3¨¯©Ò3Ð3r   c                 ó   — t        d«      ‚)z(Returns a polynomial ring, i.e. `K[X]`. únested domains not allowed©ÚNotImplementedError©r   r   s     r   Ú	poly_ringzFractionField.poly_ringš   ó   € ä!Ð">Ó?Ð?r   c                 ó   — t        d«      ‚)z'Returns a fraction field, i.e. `K(X)`. rp   rq   rs   s     r   Ú
frac_fieldzFractionField.frac_fieldž   ru   r   c                 óp   — | j                   j                  |j                  «       j                  «       «      S )z#Returns True if ``a`` is positive. )r   Úis_positiver5   ÚLCr8   s     r   ry   zFractionField.is_positive¢   ó#   € à�x‰x×#Ñ# A§G¡G£I§L¡L£NÓ3Ð3r   c                 óp   — | j                   j                  |j                  «       j                  «       «      S )z#Returns True if ``a`` is negative. )r   Úis_negativer5   rz   r8   s     r   r}   zFractionField.is_negative¦   r{   r   c                 óp   — | j                   j                  |j                  «       j                  «       «      S )z'Returns True if ``a`` is non-positive. )r   Úis_nonpositiver5   rz   r8   s     r   r   zFractionField.is_nonpositiveª   ó#   € à�x‰x×&Ñ& q§w¡w£y§|¡|£~Ó6Ð6r   c                 óp   — | j                   j                  |j                  «       j                  «       «      S )z'Returns True if ``a`` is non-negative. )r   Úis_nonnegativer5   rz   r8   s     r   r‚   zFractionField.is_nonnegative®   r€   r   c                 ó"   — |j                  «       S )zReturns numerator of ``a``. )r5   r8   s     r   r5   zFractionField.numer²   ó   € à�w‰w‹yÐr   c                 ó"   — |j                  «       S )zReturns denominator of ``a``. )r7   r8   s     r   r7   zFractionField.denom¶   r„   r   c                 óV   — | j                  | j                  j                  |«      «      S )zReturns factorial of ``a``. )r   r   Ú	factorialr8   s     r   r‡   zFractionField.factorialº   s    € à�z‰z˜$Ÿ(™(×,Ñ,¨QÓ/Ó0Ð0r   N)$r.   Ú
__module__Ú__qualname__Ú__doc__r   r   Úis_FractionFieldÚis_FracÚhas_assoc_RingÚhas_assoc_Fieldr   r   r"   r+   r/   r3   r:   r>   rN   rQ   rS   rU   rW   rY   rb   rj   rn   rt   rw   ry   r}   r   r‚   r5   r7   r‡   © r   r   r   r      sª   „ á=à€EØ!%Ð%Ð�wà€NØ€Oò(ò/òAòIòPò\ò
Hò
)ò)ò)ò)ò)ò)ò)ò1ò$RòL4ò
@ò@ò4ò4ò7ò7òòó1r   r   N)rŠ   Úsympy.polys.domains.fieldr   Ú#sympy.polys.domains.compositedomainr   Úsympy.polys.polyclassesr   Úsympy.polys.polyerrorsr   Úsympy.polys.polyutilsr   r   r	   Úsympy.utilitiesr
   r   r�   r   r   ú<module>r–      s=   ðÙ 6õ ,Ý ?Ý 'Ý 3ß QÑ QÝ "àôp1�E˜?ó p1ó ñp1r   