o
    8Va/                     @   s
  d Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZmZmZ ddlmZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZ dd	l m!Z! d
dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- dd Z.e#/edd Z0e#/edd Z0e#/edd Z0e#/edd Z0e#/e	dd Z0e#1eedd Z0e#/edd Z0e$/edd Z0e$/edd Z0e%/edd Z0e%/edd Z0e%/edd Z0e%/edd Z0e%/e	dd Z0e%/edd Z0e%/edd Z0e&/edd Z0e&/ed d Z0e&/ed!d Z0e'/ed"d Z0e'/ed#d Z0d$d% Z2e(/ed&d Z0e(/ed'd Z0e(/ed(d Z0e(/ed)d Z0e(/e	d*d Z0e(/ed+d Z0e(/ed,d Z0e(/ed-d Z0e(/ed.d Z0e(/ed/d Z0e(/ed0d Z0e(/ed1d Z0e(/ed2d Z0e(/ed3d Z0e(/ed4d Z0e(/ed5d Z0e(/ed6d Z0e(/ed7d Z0e)/e3d8d Z0e-/e3d9d Z0e,/e3d:d Z0e+/e3d;d Z0e*/e3d<d Z0d=S )>z?
Handlers related to order relations: positive, negative, etc.
    )Qask)AddBasicExprMulPow)	fuzzy_not	fuzzy_andfuzzy_or)EImaginaryUnitNaN)Absacosacotasinatanexp	factoriallog)DeterminantTrace)MatrixElement)MDNotImplementedError   )NegativePredicateNonNegativePredicateNonZeroPredicateZeroPredicateNonPositivePredicatePositivePredicateExtendedNegativePredicateExtendedNonNegativePredicateExtendedNonPositivePredicateExtendedNonZeroPredicateExtendedPositivePredicatec                 C   st   |   \}}|s|d}|jdkr|dk S d S |d}|jdkr6|dkr(dS |d}|jdkr8|dk S d S d S Nr      r   Fas_real_imagevalf_precexprassumptionsri r2   B/usr/lib/python3/dist-packages/sympy/assumptions/handlers/order.py_NegativePredicate_number      





r4   c                 C      | j rt| |S d S N)	is_numberr4   r.   r/   r2   r2   r3   _+      
r:   c                 C      | j }|d u r	t|S r7   )Zis_negativer   r.   r/   retr2   r2   r3   r:   0      c                 C   s   | j rt| |S tt| |}|dur|S d}| jD ]}tt||dur9tt||du r6|d7 }q dS q|t| jk rCdS dS )zN
    Positive + Positive -> Positive,
    Negative + Negative -> Negative
    Tr   Fr(   N)	r8   r4   r   r   realargsnegativepositivelen)r.   r/   r0   Znonposargr2   r2   r3   r:   7   s   


c                 C   s^   | j rt| |S d }| jD ]}|d u rd}tt||r!| }qtt||r*q d S |S NF)r8   r4   rA   r   r   rB   rC   r.   r/   resultrE   r2   r2   r3   r:   O   s   

c                 C   s   | j tkrtt| j|rdS dS | jrt| |S tt| j |rTtt| j |r7tt| j|r7dS tt	| j|rBdS tt
| j|rVtt| j |S dS dS )zq
    Real ** Even -> NonNegative
    Real ** Odd  -> same_as_base
    NonNegative ** Positive -> NonNegative
    FN)baser   r   r   r@   r   r8   r4   rC   evenoddrB   r9   r2   r2   r3   r:   _   s    

c                 C      dS rF   r2   r9   r2   r2   r3   r:   w      c                 C   s   t t| j|rdS trF   )r   r   r@   r   r   r9   r2   r2   r3   r:   {   s   c                 C   0   | j rtt| |}|rtt| |S |S d S r7   )r8   r	   r4   r   r   r@   )r.   r/   Znotnegativer2   r2   r3   r:         c                 C   r<   r7   )Zis_nonnegativer   r=   r2   r2   r3   r:      r?   c                 C   r<   r7   )Z
is_nonzeror   r=   r2   r2   r3   r:      r?   c                    sL   t t| du rdS | jr$| d}dd  t fdd| D S d S )NFr   c                 S   s   | j dkr	| dkS d S )Nr(   r   )r,   )r1   r2   r2   r3   nonz   s   
z_.<locals>.nonzc                 3   s    | ]} |V  qd S r7   r2   ).0r1   rP   r2   r3   	<genexpr>   s    _.<locals>.<genexpr>)r   r   r@   r8   r+   r   r*   )r.   r/   r1   r2   rR   r3   r:      s   
c                    s8   t  fdd| jD st  fdd| jD rdS d S )Nc                 3        | ]}t t| V  qd S r7   )r   r   rC   rQ   xr/   r2   r3   rS          rT   c                 3   rU   r7   )r   r   rB   rV   rX   r2   r3   rS      rY   T)allrA   r9   r2   rX   r3   r:      s
   c                 C   s,   | j D ]}tt||}|rq|  S dS NT)rA   r   r   nonzero)r.   r/   rE   rH   r2   r2   r3   r:      s   
c                 C   s   t t| j|S r7   )r   r   r\   rI   r9   r2   r2   r3   r:      s   c                 C      t t| jd |S Nr   )r   r   r\   rA   r9   r2   r2   r3   r:         c                 C      d S r7   r2   r9   r2   r2   r3   r:      rM   c                 C   r<   r7   )Zis_zeror   r=   r2   r2   r3   r:      r?   c                 C   s(   t ttt| |tt| |gS r7   )r
   r	   r   r   r\   r@   r9   r2   r2   r3   r:      s   c                    s   t  fdd| jD S )Nc                 3   rU   r7   )r   r   zero)rQ   rE   rX   r2   r3   rS      rY   rT   )r   rA   r9   r2   rX   r3   r:      s   c                 C   r<   r7   )Zis_nonpositiver   r=   r2   r2   r3   r:      r?   c                 C   rN   r7   )r8   r	   _PositivePredicate_numberr   r   r@   )r.   r/   Znotpositiver2   r2   r3   r:      rO   c                 C   st   |   \}}|s|d}|jdkr|dkS d S |d}|jdkr6|dkr(dS |d}|jdkr8|dkS d S d S r'   r)   r-   r2   r2   r3   rb      r5   rb   c                 C   r<   r7   )Zis_positiver   r=   r2   r2   r3   r:     r?   c                 C   r6   r7   )r8   rb   r9   r2   r2   r3   r:   	  r;   c                 C   sT   | j rt| |S d}| jD ]}tt||rqtt||r%|dA }q d S |S r[   )r8   rb   rA   r   r   rC   rB   rG   r2   r2   r3   r:     s   


c                 C   s   | j rt| |S tt| |}|dur|S d}| jD ]}tt||dur9tt||du r6|d7 }q d S q|t| jk rCdS d S )NTr   Fr(   )	r8   rb   r   r   r@   rA   rC   rB   rD   )r.   r/   r0   ZnonnegrE   r2   r2   r3   r:     s   


c                 C   s   | j tkr0tt| j|rdS tt| j|r.ddlm}m	} tt
| j||  |S d S | jr8t| |S tt| j |rLtt| j|rLdS tt| j |rktt
| j|r`dS tt| j|rmdS d S d S )NTr   piIF)rI   r   r   r   r@   r   	imaginarysympyrd   re   rJ   r8   rb   rC   rB   rK   r.   r/   rd   re   r2   r2   r3   r:   0  s&   

c                 C   sV   t t| j|rdS t t| j|r)ddlm}m} t t| j||  |S d S )NTr   rc   )	r   r   r@   r   rf   rg   rd   re   rJ   rh   r2   r2   r3   r:   E  s   c                 C   sb   t t| jd |}|dur|S t t| jd d |r dS t t| jd d |r/dS d S )Nr   Tr(   F)r   r   r@   rA   rC   rB   )r.   r/   r0   r2   r2   r3   r:   M  s   c                 C   s,   | j d }tt|t|@ |rdS d S )Nr   T)rA   r   r   ZintegerrC   r.   r/   rW   r2   r2   r3   r:   W  s   
c                 C   rL   rF   r2   r9   r2   r2   r3   r:   ]  rM   c                 C   s   t t| |S r7   )r   r   r\   r9   r2   r2   r3   r:   a  s   c                 C      t t| j|rdS d S r[   r   r   positive_definiterE   r9   r2   r2   r3   r:   e     c                 C   rj   r[   rk   r9   r2   r2   r3   r:   j  rm   c                 C   s*   | j | jkrtt| j|rdS d S d S r[   )r1   jr   r   rl   parentr9   r2   r2   r3   r:   o  s
   c                 C   r]   r^   )r   r   rC   rA   r9   r2   r2   r3   r:   u  r_   c                 C   sR   | j d }tt|t|d @ |rdS tt|t|d @ |r'dS d S )Nr   r(   TF)rA   r   r   rC   nonpositiverB   nonnegativeri   r2   r2   r3   r:   y  s   
c                 C   s4   | j d }tt|d t|d @ |rdS d S )Nr   r(   T)rA   r   r   rp   rq   ri   r2   r2   r3   r:     s   
"c                 C   r]   r^   )r   r   r@   rA   r9   r2   r2   r3   r:     r_   c                 C   r`   r7   r2   r9   r2   r2   r3   r:     rM   c                 C      t t| t| B |S r7   )r   r   rB   negative_infiniter9   r2   r2   r3   r:        c                 C   rr   r7   )r   r   rC   positive_infiniter9   r2   r2   r3   r:     rt   c                 C   s.   t t| t| B t| B t| B |S r7   )r   r   rs   rB   rC   ru   r9   r2   r2   r3   r:     s   &c                 C   $   t t| t| B t| B |S r7   )r   r   rs   rB   ra   r9   r2   r2   r3   r:        c                 C   rv   r7   )r   r   ra   rC   ru   r9   r2   r2   r3   r:     rw   N)4__doc__Zsympy.assumptionsr   r   Z
sympy.corer   r   r   r   r   Zsympy.core.logicr	   r
   r   Zsympy.core.numbersr   r   r   Zsympy.functionsr   r   r   r   r   r   r   r   Zsympy.matricesr   r   Z"sympy.matrices.expressions.matexprr   Zsympy.multipledispatchr   Zpredicates.orderr   r   r   r   r    r!   r"   r#   r$   r%   r&   r4   registerr:   Zregister_manyrb   objectr2   r2   r2   r3   <module>   s    (4	









	


















	














