a
    RG5d9  ã                   @   sR   d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 e	G dd„ deeƒƒZ
dS )	z0Implementation of :class:`FractionField` class. é    )ÚCompositeDomain)ÚField)ÚCoercionFailedÚGeneratorsError)Úpublicc                   @   s:  e Zd ZdZd ZZdZdZdFdd„Zdd„ Z	e
dd	„ ƒZe
d
d„ ƒZe
dd„ ƒZe
dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)dS )GÚFractionFieldz@A class for representing multivariate rational function fields. TNc                 C   sr   ddl m} t||ƒr,|d u r,|d u r,|}n||||ƒ}|| _|j| _|j| _|j| _|j| _|j| _| j| _	d S )Nr   )Ú	FracField)
Zsympy.polys.fieldsr   Ú
isinstanceÚfieldÚdtypeÚgensÚngensÚsymbolsÚdomainÚdom)ÚselfZdomain_or_fieldr   Úorderr   r
   © r   ú]/var/www/html/django/DPS/env/lib/python3.9/site-packages/sympy/polys/domains/fractionfield.pyÚ__init__   s    zFractionField.__init__c                 C   s   | j  |¡S ©N)r
   Z	field_new)r   Úelementr   r   r   Únew%   s    zFractionField.newc                 C   s   | j jS r   )r
   Úzero©r   r   r   r   r   (   s    zFractionField.zeroc                 C   s   | j jS r   )r
   Úoner   r   r   r   r   ,   s    zFractionField.onec                 C   s   | j jS r   )r
   r   r   r   r   r   r   0   s    zFractionField.orderc                 C   s   | j jS r   )r   Úis_Exactr   r   r   r   r   4   s    zFractionField.is_Exactc                 C   s   t | j ¡ | jƒS r   )r   r   Ú	get_exactr   r   r   r   r   r   8   s    zFractionField.get_exactc                 C   s$   t | jƒd d tt | jƒ¡ d S )Nú(ú,ú))Ústrr   ÚjoinÚmapr   r   r   r   r   Ú__str__;   s    zFractionField.__str__c                 C   s   t | jj| jj| j| jfƒS r   )ÚhashÚ	__class__Ú__name__r   r
   r   r   r   r   r   r   Ú__hash__>   s    zFractionField.__hash__c                 C   s.   t |tƒo,| jj| j| jf|jj|j|jfkS )z0Returns ``True`` if two domains are equivalent. )r	   r   r   r
   r   r   )r   Úotherr   r   r   Ú__eq__A   s
    
ÿÿzFractionField.__eq__c                 C   s   |  ¡ S )z!Convert ``a`` to a SymPy object. )Úas_expr©r   Úar   r   r   Úto_sympyG   s    zFractionField.to_sympyc                 C   s   | j  |¡S )z)Convert SymPy's expression to ``dtype``. )r
   Ú	from_exprr,   r   r   r   Ú
from_sympyK   s    zFractionField.from_sympyc                 C   s   | | j  ||¡ƒS ©z.Convert a Python ``int`` object to ``dtype``. ©r   Úconvert©ÚK1r-   ÚK0r   r   r   Úfrom_ZZO   s    zFractionField.from_ZZc                 C   s   | | j  ||¡ƒS r1   r2   r4   r   r   r   Úfrom_ZZ_pythonS   s    zFractionField.from_ZZ_pythonc                 C   sL   | j }|j}|jr:| || |¡|ƒƒ| || |¡|ƒƒ S | |||ƒƒS dS )ú3Convert a Python ``Fraction`` object to ``dtype``. N)r   Úconvert_fromÚis_ZZÚnumerÚdenom)r5   r-   r6   r   Úconvr   r   r   Úfrom_QQW   s
    (zFractionField.from_QQc                 C   s   | | j  ||¡ƒS )r9   r2   r4   r   r   r   Úfrom_QQ_python`   s    zFractionField.from_QQ_pythonc                 C   s   | | j  ||¡ƒS )z,Convert a GMPY ``mpz`` object to ``dtype``. r2   r4   r   r   r   Úfrom_ZZ_gmpyd   s    zFractionField.from_ZZ_gmpyc                 C   s   | | j  ||¡ƒS )z,Convert a GMPY ``mpq`` object to ``dtype``. r2   r4   r   r   r   Úfrom_QQ_gmpyh   s    zFractionField.from_QQ_gmpyc                 C   s   | | j  ||¡ƒS )z4Convert a ``GaussianRational`` object to ``dtype``. r2   r4   r   r   r   Úfrom_GaussianRationalFieldl   s    z(FractionField.from_GaussianRationalFieldc                 C   s   | | j  ||¡ƒS )z3Convert a ``GaussianInteger`` object to ``dtype``. r2   r4   r   r   r   Úfrom_GaussianIntegerRingp   s    z&FractionField.from_GaussianIntegerRingc                 C   s   | | j  ||¡ƒS ©z.Convert a mpmath ``mpf`` object to ``dtype``. r2   r4   r   r   r   Úfrom_RealFieldt   s    zFractionField.from_RealFieldc                 C   s   | | j  ||¡ƒS rE   r2   r4   r   r   r   Úfrom_ComplexFieldx   s    zFractionField.from_ComplexFieldc                 C   s.   | j |kr| j  ||¡}|dur*|  |¡S dS )z*Convert an algebraic number to ``dtype``. N)r   r:   r   r4   r   r   r   Úfrom_AlgebraicField|   s    
z!FractionField.from_AlgebraicFieldc                 C   sx   |j r|  | d¡|j¡S z|  | | jj¡¡W S  tt	fyr   z|  |¡W  Y S  tt	fyl   Y Y dS 0 Y n0 dS )z#Convert a polynomial to ``dtype``. é   N)
Ú	is_groundr:   Úcoeffr   r   Úset_ringr
   Úringr   r   r4   r   r   r   Úfrom_PolynomialRingƒ   s    z!FractionField.from_PolynomialRingc              	   C   s,   z|  | j¡W S  ttfy&   Y dS 0 dS )z*Convert a rational function to ``dtype``. N)Z	set_fieldr
   r   r   r4   r   r   r   Úfrom_FractionField“   s    z FractionField.from_FractionFieldc                 C   s   | j  ¡  ¡ S )z*Returns a field associated with ``self``. )r
   Úto_ringÚ	to_domainr   r   r   r   Úget_ringš   s    zFractionField.get_ringc                 C   s   | j  |jj¡S )z'Returns True if ``LC(a)`` is positive. )r   Úis_positiver<   ÚLCr,   r   r   r   rS   ž   s    zFractionField.is_positivec                 C   s   | j  |jj¡S )z'Returns True if ``LC(a)`` is negative. )r   Úis_negativer<   rT   r,   r   r   r   rU   ¢   s    zFractionField.is_negativec                 C   s   | j  |jj¡S )z+Returns True if ``LC(a)`` is non-positive. )r   Úis_nonpositiver<   rT   r,   r   r   r   rV   ¦   s    zFractionField.is_nonpositivec                 C   s   | j  |jj¡S )z+Returns True if ``LC(a)`` is non-negative. )r   Úis_nonnegativer<   rT   r,   r   r   r   rW   ª   s    zFractionField.is_nonnegativec                 C   s   |j S )zReturns numerator of ``a``. )r<   r,   r   r   r   r<   ®   s    zFractionField.numerc                 C   s   |j S )zReturns denominator of ``a``. )r=   r,   r   r   r   r=   ²   s    zFractionField.denomc                 C   s   |   | j |¡¡S )zReturns factorial of ``a``. )r   r   Ú	factorialr,   r   r   r   rX   ¶   s    zFractionField.factorial)NN)*r'   Ú
__module__Ú__qualname__Ú__doc__Úis_FractionFieldÚis_FracÚhas_assoc_RingÚhas_assoc_Fieldr   r   Úpropertyr   r   r   r   r   r$   r(   r*   r.   r0   r7   r8   r?   r@   rA   rB   rC   rD   rF   rG   rH   rN   rO   rR   rS   rU   rV   rW   r<   r=   rX   r   r   r   r   r   	   sR   




	r   N)r[   Ú#sympy.polys.domains.compositedomainr   Úsympy.polys.domains.fieldr   Úsympy.polys.polyerrorsr   r   Úsympy.utilitiesr   r   r   r   r   r   Ú<module>   s   