B
    ˜‘[»	  ã               @   sT   d Z ddlmZ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ƒƒZdS )	z(Implementation of :class:`Field` class. é    )Úprint_functionÚdivision)ÚRing)ÚNotReversibleÚDomainError)Úpublicc               @   s`   e Zd ZdZdZ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S )ÚFieldzRepresents a field domain. Tc             C   s   t d|  ƒ‚dS )z)Returns a ring associated with ``self``. z#there is no ring associated with %sN)r   )Úself© r
   ú8lib/python3.7/site-packages/sympy/polys/domains/field.pyÚget_ring   s    zField.get_ringc             C   s   | S )z*Returns a field associated with ``self``. r
   )r	   r
   r
   r   Ú	get_field   s    zField.get_fieldc             C   s   || S )z9Exact quotient of ``a`` and ``b``, implies ``__div__``.  r
   )r	   ÚaÚbr
   r
   r   Úexquo   s    zField.exquoc             C   s   || S )z2Quotient of ``a`` and ``b``, implies ``__div__``. r
   )r	   r   r   r
   r
   r   Úquo   s    z	Field.quoc             C   s   | j S )z0Remainder of ``a`` and ``b``, implies nothing.  )Úzero)r	   r   r   r
   r
   r   Úrem    s    z	Field.remc             C   s   || | j fS )z2Division of ``a`` and ``b``, implies ``__div__``. )r   )r	   r   r   r
   r
   r   Údiv$   s    z	Field.divc             C   sd   y|   ¡ }W n tk
r"   | jS X | |  |¡|  |¡¡}| |  |¡|  |¡¡}|  ||¡| S )a¶  
        Returns GCD of ``a`` and ``b``.

        This definition of GCD over fields allows to clear denominators
        in `primitive()`.

        >>> from sympy.polys.domains import QQ
        >>> from sympy import S, gcd, primitive
        >>> from sympy.abc import x

        >>> QQ.gcd(QQ(2, 3), QQ(4, 9))
        2/9
        >>> gcd(S(2)/3, S(4)/9)
        2/9
        >>> primitive(2*x/3 + S(4)/9)
        (2/9, 3*x + 2)

        )r   r   ZoneÚgcdÚnumerÚlcmÚdenomÚconvert)r	   r   r   ÚringÚpÚqr
   r
   r   r   (   s    z	Field.gcdc             C   sf   y|   ¡ }W n tk
r$   || S X | |  |¡|  |¡¡}| |  |¡|  |¡¡}|  ||¡| S )zç
        Returns LCM of ``a`` and ``b``.

        >>> from sympy.polys.domains import QQ
        >>> from sympy import S, lcm

        >>> QQ.lcm(QQ(2, 3), QQ(4, 9))
        4/3
        >>> lcm(S(2)/3, S(4)/9)
        4/3

        )r   r   r   r   r   r   r   )r	   r   r   r   r   r   r
   r
   r   r   E   s    
z	Field.lcmc             C   s   |rd| S t dƒ‚dS )z!Returns ``a**(-1)`` if possible. é   zzero is not reversibleN)r   )r	   r   r
   r
   r   Úrevert]   s    zField.revertN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zis_FieldZis_PIDr   r   r   r   r   r   r   r   r   r
   r
   r
   r   r   	   s   r   N)r"   Z
__future__r   r   Zsympy.polys.domains.ringr   Zsympy.polys.polyerrorsr   r   Zsympy.utilitiesr   r   r
   r
   r
   r   Ú<module>   s   