o
    jg©  ã                   @   s’   d 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 ddlmZ d	d
d	d	d	d	d	dœZeG dd„ de	eeƒƒZeƒ ZdS )z3Implementation of :class:`ExpressionDomain` class. é    )ÚsympifyÚSympifyError)ÚDomainElement)ÚCharacteristicZero)ÚField)ÚSimpleDomain)ÚPicklableWithSlots)ÚpublicFT)ÚdeepÚmulÚ	power_expÚ
power_baseÚbasicÚmultinomialÚlogc                   @   s2  e Zd ZdZd ZZG dd„ deeƒZeZ	edƒZ
e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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/d0„ Z"d1d2„ Z#d3d4„ Z$d5d6„ Z%d7d8„ Z&d9d:„ Z'd;d<„ Z(d=d>„ Z)d?d@„ Z*dAdB„ Z+dCS )DÚExpressionDomainz#A class for arbitrary expressions. Tc                   @   sì   e 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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9S ):zExpressionDomain.ExpressionzAn arbitrary expression. ©Úexc                 C   s&   t || jƒst|ƒ| _d S |j| _d S ©N)Ú
isinstanceÚ	__class__r   r   )Úselfr   © r   ú\/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/polys/domains/expressiondomain.pyÚ__init__   s   z$ExpressionDomain.Expression.__init__c                 C   ó   dt | jƒ S ©NzEX(%s))Úreprr   ©Úfr   r   r   Ú__repr__    ó   z$ExpressionDomain.Expression.__repr__c                 C   r   r   )Ústrr   r   r   r   r   Ú__str__#   r!   z#ExpressionDomain.Expression.__str__c                 C   s   t | jj| jfƒS r   )Úhashr   Ú__name__r   ©r   r   r   r   Ú__hash__&   ó   z$ExpressionDomain.Expression.__hash__c                 C   s   t S r   )ÚEXr&   r   r   r   Úparent)   ó   z"ExpressionDomain.Expression.parentc                 C   s   | j S r   r   r   r   r   r   Úas_expr,   s   z#ExpressionDomain.Expression.as_exprc                 C   ó   |   | j ¡ d ¡S )Nr   ©r   r   Úas_numer_denomr   r   r   r   Únumer/   ó   z!ExpressionDomain.Expression.numerc                 C   r-   ©Né   r.   r   r   r   r   Údenom2   r1   z!ExpressionDomain.Expression.denomc                 C   s   |   | ¡ jdi t¤Ž¡S )Nr   )r   ÚcancelÚexpandÚeflags)r   r   r   r   r   Úsimplify5   s   z$ExpressionDomain.Expression.simplifyc                 C   s   |   t| jƒ¡S r   )r   Úabsr   r   r   r   r   Ú__abs__8   s   z#ExpressionDomain.Expression.__abs__c                 C   s   |   | j ¡S r   )r   r   r   r   r   r   Ú__neg__;   r!   z#ExpressionDomain.Expression.__neg__c                 C   s"   z|   |¡W S  ty   Y d S w r   )r   r   ©r   Úgr   r   r   Ú_to_ex>   s
   ÿz"ExpressionDomain.Expression._to_exc                 C   s   | j  ¡ |j  ¡ k S r   )r   Úsort_keyr<   r   r   r   Ú__lt__D   r1   z"ExpressionDomain.Expression.__lt__c                 C   sD   |   |¡}|d u rtS |tjkr| S | tjkr|S |  | j|j ¡S r   ©r>   ÚNotImplementedr)   Úzeror8   r   r<   r   r   r   Ú__add__G   s   


z#ExpressionDomain.Expression.__add__c                 C   s   |   |  |¡j| j ¡S r   ©r8   r   r   r<   r   r   r   Ú__radd__S   ó   z$ExpressionDomain.Expression.__radd__c                 C   sF   |   |¡}|d u rtS |tjkr| S | tjkr| S |  | j|j ¡S r   rA   r<   r   r   r   Ú__sub__V   s   


z#ExpressionDomain.Expression.__sub__c                 C   s   |   |  |¡j| j ¡S r   rE   r<   r   r   r   Ú__rsub__b   rG   z$ExpressionDomain.Expression.__rsub__c                 C   s^   |   |¡}|d u rtS tj| |fv rtjS | jjr&|jjr&|  | j|j ¡S |  | j|j ¡S r   )r>   rB   r)   rC   r   Ú	is_Numberr   r8   r<   r   r   r   Ú__mul__e   s   
z#ExpressionDomain.Expression.__mul__c                 C   s   |   |  |¡j| j ¡S r   rE   r<   r   r   r   Ú__rmul__r   rG   z$ExpressionDomain.Expression.__rmul__c                 C   s(   |   |¡}|d ur|  | j|j ¡S tS r   ©r>   r8   r   rB   )r   Únr   r   r   Ú__pow__u   ó   
z#ExpressionDomain.Expression.__pow__c                 C   s(   |   |¡}|d ur|  | j|j ¡S tS r   rM   r<   r   r   r   Ú__truediv__}   rP   z'ExpressionDomain.Expression.__truediv__c                 C   s   |   |  |¡j| j ¡S r   rE   r<   r   r   r   Ú__rtruediv__…   rG   z(ExpressionDomain.Expression.__rtruediv__c                 C   s   | j |  |¡j kS r   )r   r   r<   r   r   r   Ú__eq__ˆ   r(   z"ExpressionDomain.Expression.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   Ú__ne__‹   ó   
z"ExpressionDomain.Expression.__ne__c                 C   s
   | j j S r   )r   Úis_zeror   r   r   r   Ú__bool__Ž   rU   z$ExpressionDomain.Expression.__bool__c                 C   ó&   ddl m} |  || j|  |¡jƒ¡S )Nr   )Úgcd)Úsympy.polysrY   r   r   )r   r=   rY   r   r   r   rY   ‘   ó   zExpressionDomain.Expression.gcdc                 C   rX   )Nr   ©Úlcm)rZ   r]   r   r   )r   r=   r]   r   r   r   r]   •   r[   zExpressionDomain.Expression.lcmN) r%   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r    r#   r'   r*   r,   r0   r4   r8   r:   r;   r>   r@   rD   rF   rH   rI   rK   rL   rO   rQ   rR   rS   rT   rW   rY   r]   r   r   r   r   Ú
Expression   s<    rb   r   r3   r)   Fc                 C   s   d S r   r   r&   r   r   r   r   £   r+   zExpressionDomain.__init__c                 C   s   t |tƒrdS tS )NT)r   r   rB   )r   Úotherr   r   r   rS   ¦   s   
zExpressionDomain.__eq__c                 C   s   t dƒS )Nr)   )r$   r&   r   r   r   r'   ¬   ó   zExpressionDomain.__hash__c                 C   ó   |  ¡ S )z!Convert ``a`` to a SymPy object. )r,   ©r   Úar   r   r   Úto_sympy¯   ó   zExpressionDomain.to_sympyc                 C   s
   |   |¡S )z)Convert SymPy's expression to ``dtype``. )Údtyperf   r   r   r   Ú
from_sympy³   ó   
zExpressionDomain.from_sympyc                 C   ó   | |  |¡ƒS ©z.Convert a Python ``int`` object to ``dtype``. ©rh   ©ÚK1rg   ÚK0r   r   r   Úfrom_ZZ·   ó   zExpressionDomain.from_ZZc                 C   rm   rn   ro   rp   r   r   r   Úfrom_ZZ_python»   rt   zExpressionDomain.from_ZZ_pythonc                 C   rm   ©z3Convert a Python ``Fraction`` object to ``dtype``. ro   rp   r   r   r   Úfrom_QQ¿   rt   zExpressionDomain.from_QQc                 C   rm   rv   ro   rp   r   r   r   Úfrom_QQ_pythonÃ   rt   zExpressionDomain.from_QQ_pythonc                 C   rm   )z,Convert a GMPY ``mpz`` object to ``dtype``. ro   rp   r   r   r   Úfrom_ZZ_gmpyÇ   rt   zExpressionDomain.from_ZZ_gmpyc                 C   rm   )z,Convert a GMPY ``mpq`` object to ``dtype``. ro   rp   r   r   r   Úfrom_QQ_gmpyË   rt   zExpressionDomain.from_QQ_gmpyc                 C   rm   ©z4Convert a ``GaussianRational`` object to ``dtype``. ro   rp   r   r   r   Úfrom_GaussianIntegerRingÏ   rt   z)ExpressionDomain.from_GaussianIntegerRingc                 C   rm   r{   ro   rp   r   r   r   Úfrom_GaussianRationalFieldÓ   rt   z+ExpressionDomain.from_GaussianRationalFieldc                 C   rm   )z(Convert an ``ANP`` object to ``dtype``. ro   rp   r   r   r   Úfrom_AlgebraicField×   rt   z$ExpressionDomain.from_AlgebraicFieldc                 C   rm   )z.Convert a mpmath ``mpf`` object to ``dtype``. ro   rp   r   r   r   Úfrom_RealFieldÛ   rt   zExpressionDomain.from_RealFieldc                 C   rm   )z.Convert a mpmath ``mpc`` object to ``dtype``. ro   rp   r   r   r   Úfrom_ComplexFieldß   rt   z"ExpressionDomain.from_ComplexFieldc                 C   rm   )z'Convert a ``DMP`` object to ``dtype``. ro   rp   r   r   r   Úfrom_PolynomialRingã   rt   z$ExpressionDomain.from_PolynomialRingc                 C   rm   )z'Convert a ``DMF`` object to ``dtype``. ro   rp   r   r   r   Úfrom_FractionFieldç   rt   z#ExpressionDomain.from_FractionFieldc                 C   s   |S )z&Convert a ``EX`` object to ``dtype``. r   rp   r   r   r   Úfrom_ExpressionDomainë   ó   z&ExpressionDomain.from_ExpressionDomainc                 C   ó   | S )z)Returns a ring associated with ``self``. r   r&   r   r   r   Úget_ringï   r„   zExpressionDomain.get_ringc                 C   r…   )z*Returns a field associated with ``self``. r   r&   r   r   r   Ú	get_fieldó   r„   zExpressionDomain.get_fieldc                 C   ó   |j  ¡ d jS )z#Returns True if ``a`` is positive. r   )r   Úas_coeff_mulÚis_positiverf   r   r   r   rŠ   ÷   ó   zExpressionDomain.is_positivec                 C   s
   |j  ¡ S )z#Returns True if ``a`` is negative. )r   Úcould_extract_minus_signrf   r   r   r   Úis_negativeû   rl   zExpressionDomain.is_negativec                 C   rˆ   )z'Returns True if ``a`` is non-positive. r   )r   r‰   Úis_nonpositiverf   r   r   r   rŽ   ÿ   r‹   zExpressionDomain.is_nonpositivec                 C   rˆ   )z'Returns True if ``a`` is non-negative. r   )r   r‰   Úis_nonnegativerf   r   r   r   r     r‹   zExpressionDomain.is_nonnegativec                 C   re   )zReturns numerator of ``a``. )r0   rf   r   r   r   r0     ri   zExpressionDomain.numerc                 C   re   )zReturns denominator of ``a``. )r4   rf   r   r   r   r4     ri   zExpressionDomain.denomc                 C   s   | dƒS r2   r   ©r   rg   Úbr   r   r   rY     rd   zExpressionDomain.gcdc                 C   s
   |  |¡S r   r\   r   r   r   r   r]     rU   zExpressionDomain.lcmN),r%   r^   r_   r`   Úis_SymbolicDomainÚis_EXr   r   rb   rj   rC   ÚoneÚrepÚhas_assoc_RingÚhas_assoc_Fieldr   rS   r'   rh   rk   rs   ru   rw   rx   ry   rz   r|   r}   r~   r   r€   r   r‚   rƒ   r†   r‡   rŠ   r   rŽ   r   r0   r4   rY   r]   r   r   r   r   r      sP     r   N)r`   Ú
sympy.corer   r   Ú!sympy.polys.domains.domainelementr   Ú&sympy.polys.domains.characteristiczeror   Úsympy.polys.domains.fieldr   Ú sympy.polys.domains.simpledomainr   Úsympy.polys.polyutilsr   Úsympy.utilitiesr	   r7   r   r)   r   r   r   r   Ú<module>   s     ÿ  
