a
    h,                     @   s   d dl mZ d dl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mZ G dd	 d	e
ed
ZejZG dd de
ed
ZdS )    N)Expr)
_sympifyit)
AtomicExpr)Number)global_parameters)S	Singletonc                       s4  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdd Zdd	 Zd
d Zededd ZeZededd Zededd Zededd ZeZededd Zdd Zdd Zdd Zdd Z fdd Zd!d" Zd#d$ Zd%d& Z d'd( Z!d)d* Z"d+d, Z#eded-d. Z$e$Z%d/d0 Z&d1d2 Z'  Z(S )3IntInfinityah  Positive integer infinite quantity.

    Integer infinity is a value in an extended integers which
    is greater than all other integers.  We distinguish it from
    sympy's existing notion of infinity in that it reports that
    it is_integer.

    Infinity is a singleton, and can be accessed by ``S.IntInfinity``,
    or can be imported as ``int_oo``.
    TF      Y@ c                 C   s
   t | S Nr   __new__clsr   r   H/var/www/auris/lib/python3.9/site-packages/torch/utils/_sympy/numbers.pyr   )   s    zIntInfinity.__new__c                 C   s   dS )Nint_oor   selfprinterr   r   r   	_sympystr,   s    zIntInfinity._sympystrc                 C   s   | |kr|S d S r   r   r   oldnewr   r   r   
_eval_subs/   s    zIntInfinity._eval_subsotherc                 C   sJ   t |tr>tjr>|tjtjfv r$|S |tjtjfv r:tjS | S t	| |S r   )

isinstancer   r   evaluater   InfinityNegativeInfinityNegativeIntInfinityNaN__add__r   r   r   r   r   r"   <   s    zIntInfinity.__add__c                 C   sV   t |trJtjrJ|tju r tjS |tju r0tjS |tjtjfv rFtjS | S t	| |S r   )
r   r   r   r   r   r   r   r	   r!   __sub__r#   r   r   r   r$   H   s    

zIntInfinity.__sub__c                 C   s   |   |S r   r"   r#   r   r   r   __rsub__T   s    zIntInfinity.__rsub__c                 C   sB   t |tr6tjr6|js |tju r&tjS |jr0| S tjS t	| |S r   )
r   r   r   r   is_zeror   r!   is_extended_positiver    __mul__r#   r   r   r   r)   X   s    zIntInfinity.__mul__c                 C   sP   t |trDtjrD|tjtjtjtjtj	fv r2tj	S |j
r>tjS tjS t| |S r   r   r   r   r   r   r   r	   r   r    r!   Zis_extended_nonnegative__truediv__r#   r   r   r   r+   d   s    zIntInfinity.__truediv__c                 C   s   t jS r   r   r	   r   r   r   r   __abs__t   s    zIntInfinity.__abs__c                 C   s   t jS r   r   r    r-   r   r   r   __neg__w   s    zIntInfinity.__neg__c                 C   s   |j rtjS |jrtjS |tju r(tjS |tju r8tjS |jdu r|jrddl	m
} ||}|jrhtjS |jrttjS |jrtjS | |  S d S )NFr   )re)r(   r   r	   is_extended_negativeZZeror!   ComplexInfinityis_extended_real	is_numberZ$sympy.functions.elementary.complexesr1   Zis_positiveZis_negativer'   Zevalf)r   exptr1   Z	expt_realr   r   r   _eval_powerz   s$    

zIntInfinity._eval_powerc                 C   s   t jS r   )mlibZfinfr   precr   r   r   _as_mpf_val   s    zIntInfinity._as_mpf_valc                    s
   t   S r   super__hash__r-   	__class__r   r   r>      s    zIntInfinity.__hash__c                 C   s
   |t ju S r   r,   r#   r   r   r   __eq__   s    zIntInfinity.__eq__c                 C   s
   |t juS r   r,   r#   r   r   r   __ne__   s    zIntInfinity.__ne__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   r   r   sympyfalser	   truer#   r   r   r   __gt__   s
    

zIntInfinity.__gt__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   rC   r#   r   r   r   __ge__   s
    

zIntInfinity.__ge__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   r   r   rD   rF   r	   rE   r#   r   r   r   __lt__   s
    

zIntInfinity.__lt__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   rI   r#   r   r   r   __le__   s
    

zIntInfinity.__le__c                 C   s   t |tstS tjS r   r   r   NotImplementedr   r!   r#   r   r   r   __mod__   s    
zIntInfinity.__mod__c                 C   s   | S r   r   r-   r   r   r   floor   s    zIntInfinity.floorc                 C   s   | S r   r   r-   r   r   r   ceiling   s    zIntInfinity.ceiling))__name__
__module____qualname____doc__
is_integeris_commutativer5   r4   is_comparabler(   is_prime_op_priority	__slots__r   r   r   r   rM   r"   __radd__r$   r&   r)   __rmul__r+   r.   r0   r7   r;   r>   rA   rB   rG   rH   rJ   rK   rN   __rmod__rO   rP   __classcell__r   r   r?   r   r	      sR   
	


	

r	   )	metaclassc                       s<  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdd Zdd	 Zd
d Zededd ZeZededd Zededd Zededd ZeZededd Zdd Zdd Zdd Zdd Z fdd Zd!d" Zd#d$ Zd%d& Z d'd( Z!d)d* Z"d+d, Z#eded-d. Z$e$Z%d/d0 Z&d1d2 Z'd3d4 Z(  Z)S )5r    zNegative integer infinite quantity.

    NegativeInfinity is a singleton, and can be accessed
    by ``S.NegativeInfinity``.

    See Also
    ========

    IntInfinity
    r
   TFr   c                 C   s
   t | S r   r   r   r   r   r   r      s    zNegativeIntInfinity.__new__c                 C   s   | |kr|S d S r   r   r   r   r   r   r      s    zNegativeIntInfinity._eval_subsc                 C   s   dS )Nz-int_oor   r   r   r   r   r      s    zNegativeIntInfinity._sympystrr   c                 C   sF   t |tr:tjr:|tju r tjS |tjtjfv r6tjS | S t| |S r   )	r   r   r   r   r   r   r	   r!   r"   r#   r   r   r   r"      s    
zNegativeIntInfinity.__add__c                 C   sF   t |tr:tjr:|tju r tjS |tjtjfv r6tjS | S t	| |S r   )
r   r   r   r   r   r   r   r    r!   r$   r#   r   r   r   r$     s    
zNegativeIntInfinity.__sub__c                 C   s   |   |S r   r%   r#   r   r   r   r&     s    zNegativeIntInfinity.__rsub__c                 C   sB   t |tr6tjr6|js |tju r&tjS |jr0| S tjS t	| |S r   )
r   r   r   r   r'   r   r!   r(   r	   r)   r#   r   r   r   r)     s    zNegativeIntInfinity.__mul__c                 C   sN   t |trBtjrB|tjtjtjtjtj	fv r2tj	S |j
r<| S tjS t| |S r   r*   r#   r   r   r   r+     s    zNegativeIntInfinity.__truediv__c                 C   s   t jS r   r,   r-   r   r   r   r.   /  s    zNegativeIntInfinity.__abs__c                 C   s   t jS r   r,   r-   r   r   r   r0   2  s    zNegativeIntInfinity.__neg__c                 C   s   |j r|tjtjtjtjtjfv r(tjS t|tj	rL|j
rL|jrFtjS tjS tj| }tj| }|dkrr|jrr|S |tju r|jr|jstjS || S d S )Nr   )r5   r   r!   r   r   r	   r    r   rD   ZIntegerr(   Zis_oddNegativeOne	is_finiter3   r'   )r   r6   Zinf_partZs_partr   r   r   r7   5  s2    

zNegativeIntInfinity._eval_powerc                 C   s   t jS r   )r8   Zfninfr9   r   r   r   r;   R  s    zNegativeIntInfinity._as_mpf_valc                    s
   t   S r   r<   r-   r?   r   r   r>   U  s    zNegativeIntInfinity.__hash__c                 C   s
   |t ju S r   r/   r#   r   r   r   rA   X  s    zNegativeIntInfinity.__eq__c                 C   s
   |t juS r   r/   r#   r   r   r   rB   [  s    zNegativeIntInfinity.__ne__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   r   r   rD   rF   r    rE   r#   r   r   r   rG   ^  s
    

zNegativeIntInfinity.__gt__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   rb   r#   r   r   r   rH   f  s
    

zNegativeIntInfinity.__ge__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   r   r   rD   rE   r    rF   r#   r   r   r   rJ   n  s
    

zNegativeIntInfinity.__lt__c                 C   s*   |t ju rtjS |t ju r tjS tjS d S r   rc   r#   r   r   r   rK   v  s
    

zNegativeIntInfinity.__le__c                 C   s   t |tstS tjS r   rL   r#   r   r   r   rN   ~  s    
zNegativeIntInfinity.__mod__c                 C   s   | S r   r   r-   r   r   r   rO     s    zNegativeIntInfinity.floorc                 C   s   | S r   r   r-   r   r   r   rP     s    zNegativeIntInfinity.ceilingc                 C   s   t jdt jdiS )N   )r   r`   r	   r-   r   r   r   as_powers_dict  s    z"NegativeIntInfinity.as_powers_dict)*rQ   rR   rS   rT   rY   rU   r4   rV   rW   r2   r5   rX   rZ   r   r   r   r   rM   r"   r[   r$   r&   r)   r\   r+   r.   r0   r7   r;   r>   rA   rB   rG   rH   rJ   rK   rN   r]   rO   rP   re   r^   r   r   r?   r   r       sT   
	
	

	

r    )Zmpmath.libmpZlibmpr8   rD   r   Zsympy.core.decoratorsr   Zsympy.core.exprr   Zsympy.core.numbersr   Zsympy.core.parametersr   Zsympy.core.singletonr   r   r	   r   r    r   r   r   r   <module>   s    @