§
    OŠtjR  ã                   óˆ   — 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d
S )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#dS )ÚFractionFieldz3A class for representing rational function fields. Tc                 ó,  — |st          d¦  «        ‚t          |¦  «        dz
  }t          |¦  «        | _        | j                             ||¦  «        | _        | j                             ||¦  «        | _        |x| _        | _        |x| _        | _	        d S )Nzgenerators not specifiedé   )
r   ÚlenÚngensÚdtypeÚzeroÚoneÚdomainÚdomÚsymbolsÚgens)Úselfr   r   Úlevs       úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/domains/old_fractionfield.pyÚ__init__zFractionField.__init__   sƒ   € Øð 	?Ý"Ð#=Ñ>Ô>Ð>å�$‰iŒi˜!‰mˆÝ˜‘Y”YˆŒ
à”J—O’O C¨Ñ-Ô-ˆŒ	Ø”:—>’> # sÑ+Ô+ˆŒà!$Ð$ˆŒ�d”hØ#'Ð'ˆŒ�t”y�y�yó    c                 ó(   —  | j         |g| j        ¢R Ž 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Ð.Ð.Ð.Ð.r   c                 ód   — |                       || j        t          | j        ¦  «        dz
  ¦  «        S )Nr   )r   r   r   r   )r   Úelements     r   ÚnewzFractionField.new&   s'   € Ø�zŠz˜' 4¤8­S°´©^¬^¸aÑ-?Ñ@Ô@Ð@r   c                 ó’   — t          | j        ¦  «        dz   d                     t          t           | j        ¦  «        ¦  «        z   dz   S )Nú(ú,ú))Ústrr   ÚjoinÚmapr   ©r   s    r   Ú__str__zFractionField.__str__)   s7   € Ý�4”8‰}Œ}˜sÑ" S§X¢X­cµ#°t´yÑ.AÔ.AÑ%BÔ%BÑBÀSÑHÐHr   c                 óZ   — 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¸$¼(ÀDÄIÐNÑOÔOÐOr   c                 óŒ   — t          |t          ¦  «        o/| j        |j        k    o| j        |j        k    o| j        |j        k    S )z0Returns ``True`` if two domains are equivalent. )Ú
isinstancer   r   r   r   )r   Úothers     r   Ú__eq__zFractionField.__eq__/   sM   € å˜%¥Ñ/Ô/ð \ØŒJ˜%œ+Ò%ð\Ø*.¬(°e´iÒ*?ð\ØDHÄIÐQVÔQ[ÒD[ð	\r   c                 óÜ   — t          |                     ¦   «                              ¦   «         g| j        ¢R Ž t          |                     ¦   «                              ¦   «         g| j        ¢R Ž z  S )z!Convert ``a`` to a SymPy object. )r   ÚnumerÚto_sympy_dictr   Údenom©r   Úas     r   Úto_sympyzFractionField.to_sympy4   s`   € å §¢¡	¤	× 7Ò 7Ñ 9Ô 9ÐF¸D¼IÐFÐFÐFÝ §¢¡	¤	× 7Ò 7Ñ 9Ô 9ÐF¸D¼IÐFÐFÐFñGð 	Hr   c                 ó®  — |                      ¦   «         \  }}t          || j        ¬¦  «        \  }}t          || j        ¬¦  «        \  }}|                     ¦   «         D ]"\  }}| j                             |¦  «        ||<   Œ#|                     ¦   «         D ]"\  }}| j                             |¦  «        ||<   Œ# | ||f¦  «                             ¦   «         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Ñ3Ô3‰ˆˆQÝ  ¨¬Ð3Ñ3Ô3‰ˆˆQà—I’I‘K”Kð 	,ð 	,‰DˆAˆqØ”X×(Ò(¨Ñ+Ô+ˆC�‰FˆFà—I’I‘K”Kð 	,ð 	,‰DˆAˆqØ”X×(Ò(¨Ñ+Ô+ˆC�‰FˆFàˆt�S˜#�JÑÔ×&Ò&Ñ(Ô(Ð(r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S ©z.Convert a Python ``int`` object to ``dtype``. ©r   Úconvert©ÚK1r9   ÚK0s      r   Úfrom_ZZzFractionField.from_ZZH   ó"   € àˆr�"”&—.’.  BÑ'Ô'Ñ(Ô(Ð(r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S rH   rI   rK   s      r   Úfrom_ZZ_pythonzFractionField.from_ZZ_pythonL   rO   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S )z3Convert a Python ``Fraction`` object to ``dtype``. rI   rK   s      r   Úfrom_QQ_pythonzFractionField.from_QQ_pythonP   rO   r   c                 ó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                 ó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                 ó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    rb‰ j        ‰j        k    r ‰ |                     ¦   «         ¦  «        S  ‰ |                     ‰ j        ¦  «                             ¦   «         ¦  «        S t	          |                     ¦   «         ‰j         ‰ j         ¦  «        \  }}‰ j        ‰j        k    rˆˆ fd„|D ¦   «         } ‰ t          t          ||¦  «        ¦  «        ¦  «        S )z'Convert a ``DMF`` object to ``dtype``. c                 óP   •— g | ]"}‰j                              |‰j         ¦  «        ‘Œ#S © rI   ©Ú.0ÚcrM   rL   s     €€r   ú
<listcomp>z;FractionField.from_GlobalPolynomialRing.<locals>.<listcomp>k   s+   ø€ ÐFÐFÐF¸˜2œ6Ÿ>š>¨!¨R¬VÑ4Ô4ÐFÐFÐFr   )r   r   Úto_listrJ   r	   Úto_dictÚdictÚzip)rL   r9   rM   ÚmonomsÚcoeffss   ` `  r   Úfrom_GlobalPolynomialRingz'FractionField.from_GlobalPolynomialRing`   sÐ   øø€ àŒ7�b”gÒÐØŒv˜œÒÐØ�r˜!Ÿ)š)™+œ+‘”Ð&à�r˜!Ÿ)š) B¤FÑ+Ô+×3Ò3Ñ5Ô5Ñ6Ô6Ð6å*¨1¯9ª9©;¬;¸¼ÀÄÑIÔI‰NˆF�FàŒv˜œÒÐØFÐFÐFÐFÐF¸fÐFÑFÔF�à�2•d�3˜v vÑ.Ô.Ñ/Ô/Ñ0Ô0Ð0r   c           	      óš  ‡ ‡— ‰ j         ‰j         k    r—‰ j        ‰j        k    r|S  ‰ |                     ¦   «                              ‰ j        ¦  «                             ¦   «         |                     ¦   «                              ‰ j        ¦  «                             ¦   «         f¦  «        S t          ‰j         ¦  «                             ‰ j         ¦  «        rõt          |                     ¦   «          	                    ¦   «         ‰j         ‰ j         ¦  «        \  }}t          |                     ¦   «          	                    ¦   «         ‰j         ‰ j         ¦  «        \  }}‰ j        ‰j        k    rˆˆ fd„|D ¦   «         }ˆˆ fd„|D ¦   «         } ‰ t          t          ||¦  «        ¦  «        t          t          ||¦  «        ¦  «        f¦  «        S dS )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)

        c                 óP   •— g | ]"}‰j                              |‰j         ¦  «        ‘Œ#S r\   rI   r]   s     €€r   r`   z4FractionField.from_FractionField.<locals>.<listcomp>�   ó+   ø€ ÐHÐHÐH¸!˜BœFŸNšN¨1¨b¬fÑ5Ô5ÐHÐHÐHr   c                 óP   •— g | ]"}‰j                              |‰j         ¦  «        ‘Œ#S r\   rI   r]   s     €€r   r`   z4FractionField.from_FractionField.<locals>.<listcomp>‘   rj   r   N)r   r   r5   rJ   ra   r7   ÚsetÚissubsetr	   rb   rc   rd   )rL   r9   rM   ÚnmonomsÚncoeffsÚdmonomsÚdcoeffss   ` `    r   Úfrom_FractionFieldz FractionField.from_FractionFieldo   s¨  øø€ ð( Œ7�b”gÒÐØŒv˜œÒÐØ�à�r˜1Ÿ7š7™9œ9×,Ò,¨R¬VÑ4Ô4×<Ò<Ñ>Ô>ØŸ7š7™9œ9×,Ò,¨R¬VÑ4Ô4×<Ò<Ñ>Ô>ð@ñ Aô Að Aå�”‰\Œ\×"Ò" 2¤7Ñ+Ô+ð 
	RÝ,Ø—’‘	”	×!Ò!Ñ#Ô# R¤W¨b¬gñ 7ô  7ÑˆG�Wå,Ø—’‘	”	×!Ò!Ñ#Ô# R¤W¨b¬gñ 7ô  7ÑˆG�Wð Œv˜œÒÐØHÐHÐHÐHÐH¸wÐHÑHÔH�ØHÐHÐHÐHÐH¸wÐHÑHÔH�à�2•t�C ¨Ñ1Ô1Ñ2Ô2µD½¸WÀgÑ9NÔ9NÑ4OÔ4OÐPÑQÔQÐQð
	Rð 
	Rr   c                 ó4   — ddl m}  || j        g| j        ¢R Ž S )z)Returns a ring associated with ``self``. r   )ÚPolynomialRing)Úsympy.polys.domainsrt   r   r   )r   rt   s     r   Úget_ringzFractionField.get_ring•   s0   € à6Ð6Ð6Ð6Ð6Ð6Øˆ~˜dœhÐ3¨¬Ð3Ð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)`. rx   ry   r{   s     r   Ú
frac_fieldzFractionField.frac_fieldž   r}   r   c                 ó~   — | j                              |                     ¦   «                              ¦   «         ¦  «        S )z#Returns True if ``a`` is positive. )r   Úis_positiver5   ÚLCr8   s     r   r�   zFractionField.is_positive¢   ó(   € àŒx×#Ò# A§G¢G¡I¤I§L¢L¡N¤NÑ3Ô3Ð3r   c                 ó~   — | j                              |                     ¦   «                              ¦   «         ¦  «        S )z#Returns True if ``a`` is negative. )r   Úis_negativer5   r‚   r8   s     r   r…   zFractionField.is_negative¦   rƒ   r   c                 ó~   — | j                              |                     ¦   «                              ¦   «         ¦  «        S )z'Returns True if ``a`` is non-positive. )r   Úis_nonpositiver5   r‚   r8   s     r   r‡   zFractionField.is_nonpositiveª   ó(   € àŒx×&Ò& q§w¢w¡y¤y§|¢|¡~¤~Ñ6Ô6Ð6r   c                 ó~   — | j                              |                     ¦   «                              ¦   «         ¦  «        S )z'Returns True if ``a`` is non-negative. )r   Úis_nonnegativer5   r‚   r8   s     r   rŠ   zFractionField.is_nonnegative®   rˆ   r   c                 ó*   — |                      ¦   «         S )zReturns numerator of ``a``. )r5   r8   s     r   r5   zFractionField.numer²   ó   € à�wŠw‰yŒyÐr   c                 ó*   — |                      ¦   «         S )zReturns denominator of ``a``. )r7   r8   s     r   r7   zFractionField.denom¶   rŒ   r   c                 ó\   — |                       | j                             |¦  «        ¦  «        S )zReturns factorial of ``a``. )r   r   Ú	factorialr8   s     r   r�   zFractionField.factorialº   s$   € à�zŠz˜$œ(×,Ò,¨QÑ/Ô/Ñ0Ô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   rg   rr   rv   r|   r   r�   r…   r‡   rŠ   r5   r7   r�   r\   r   r   r   r      sÓ  € € € € € à=Ð=à€EØ!%Ð%Ð�wà€NØ€Oð(ð (ð (ð/ð /ð /ðAð Að AðIð Ið IðPð Pð Pð\ð \ð \ð
Hð Hð Hð
)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð1ð 1ð 1ð$Rð $Rð $RðL4ð 4ð 4ð
@ð @ð @ð@ð @ð @ð4ð 4ð 4ð4ð 4ð 4ð7ð 7ð 7ð7ð 7ð 7ðð ð ðð ð ð1ð 1ð 1ð 1ð 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Ð 6ð ,Ð +Ð +Ð +Ð +Ð +Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ "Ð "Ð "Ð "Ð "Ð "àðp1ð p1ð p1ð p1ð p1�E˜?ñ p1ô p1ñ „ðp1ð p1ð p1r   