ó
¡¼™\c           @  sæ   d  Z  d d l m Z m Z d d l m Z m Z d d l m Z d d l	 m
 Z
 m Z m Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   sB   
AskHandlers related to order relations: positive, negative, etc.
iÿÿÿÿ(   t   print_functiont   division(   t   Qt   ask(   t   CommonHandler(   t	   fuzzy_nott	   fuzzy_andt   fuzzy_ort   AskNegativeHandlerc           B  s“   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e e
 j ƒ g d \ Z Z e d „  ƒ Z RS(	   sI  
    This is called by ask() when key='negative'

    Test that an expression is less (strict) than zero.

    Examples
    ========

    >>> from sympy import ask, Q, pi
    >>> ask(Q.negative(pi+1)) # this calls AskNegativeHandler.Add
    False
    >>> ask(Q.negative(pi**2)) # this calls AskNegativeHandler.Pow
    False

    c         C  s   |  j  S(   N(   t   is_negative(   t   exprt   assumptions(    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   Expr   s    c         C  s    |  j  ƒ  \ } } | sC | j d ƒ } | j d k rœ | d k  SnY | j d ƒ } | j d k rœ | d k rq t S| j d ƒ } | j d k rœ | d k  Sn  d  S(   Ni   i   i    (   t   as_real_imagt   evalft   _prect   False(   R
   R   t   rt   i(    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   _number    s    c         C  s   |  j  r t j |  | ƒ Sd  S(   N(   t	   is_numberR   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   Basic4   s    	c         C  sÅ   |  j  r t j |  | ƒ St t j |  ƒ | ƒ } | t k	 rA | Sd } xw |  j D]S } t t j | ƒ | ƒ t k	 rQ t t j	 | ƒ | ƒ t
 k r  | d 7} q¤ PqQ qQ W| t |  j ƒ k  rÁ t Sd S(   sZ   
        Positive + Positive -> Positive,
        Negative + Negative -> Negative
        i    i   N(   R   R   R   R   R   t   realt   Truet   argst   negativet   positiveR   t   len(   R
   R   R   t   nonpost   arg(    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   Add9   s    	c         C  s   |  j  r t j |  | ƒ Sd  } xg |  j D]\ } | d  k rD t } n  t t j | ƒ | ƒ rf | } q) t t j	 | ƒ | ƒ r q) d  Sq) W| S(   N(
   R   R   R   t   NoneR   R   R   R   R   R   (   R
   R   t   resultR   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   MulQ   s    		
c         C  sË   |  j  r t j |  | ƒ St t j |  j ƒ | ƒ rÇ t t j |  j ƒ | ƒ rq t t j |  j ƒ | ƒ rq t	 Sn  t t j
 |  j ƒ | ƒ r t	 St t j |  j ƒ | ƒ rÇ t t j |  j ƒ | ƒ Sn  d S(   s   
        Real ** Even -> NonNegative
        Real ** Odd  -> same_as_base
        NonNegative ** Positive -> NonNegative
        N(   R   R   R   R   R   R   t   baseR   t   expR   t   event   oddR   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   Powa   s    	i   c         C  s'   t  t j |  j d ƒ | ƒ r# t Sd  S(   Ni    (   R   R   R   R   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR#   u   s    (   t   __name__t
   __module__t   __doc__t   staticmethodR   R   R   R   R!   R&   R   t   AlwaysFalset   ImaginaryUnitt   AbsR#   (    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR      s   t   AskNonNegativeHandlerc           B  s&   e  Z e d  „  ƒ Z e d „  ƒ Z RS(   c         C  s   |  j  S(   N(   t   is_nonnegative(   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   }   s    c         C  sH   |  j  rD t t j |  | ƒ ƒ } | r= t t j |  ƒ | ƒ S| Sn  d  S(   N(   R   R   R   R   R   R   R   (   R
   R   t   notnegative(    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR      s
    	(   R'   R(   R*   R   R   (    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR.   {   s   t   AskNonZeroHandlerc           B  sw   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e	 j
 ƒ Z e d „  ƒ Z RS(   sT   
    Handler for key 'zero'
    Test that an expression is not identically zero
    c         C  s   |  j  S(   N(   t
   is_nonzero(   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   ‘   s    c           sd   t  t j |  ƒ ƒ t k r t S|  j r` |  j d ƒ } d „  ‰  t ‡  f d †  | j ƒ  Dƒ ƒ Sd  S(   Ni   c         S  s   |  j  d k r |  d k Sd  S(   Ni   i    (   R   (   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   nonzœ   s    c         3  s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   t   .0R   (   R3   (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pys	   <genexpr>Ÿ   s    (   R   R   R   R   R   R   R   R   (   R
   R   R   (    (   R3   s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   •   s    		c           sF   t  ‡  f d †  |  j Dƒ ƒ s> t  ‡  f d †  |  j Dƒ ƒ rB t Sd  S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   R   (   R4   t   x(   R   (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pys	   <genexpr>£   s    c         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   R   (   R4   R5   (   R   (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pys	   <genexpr>¤   s    (   t   allR   R   (   R
   R   (    (   R   s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   ¡   s    c         C  s=   x6 |  j  D]+ } t t j | ƒ | ƒ } | r4 q
 n  | SWt S(   N(   R   R   R   t   nonzeroR   (   R
   R   R   R    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR!   §   s    c         C  s   t  t j |  j ƒ | ƒ S(   N(   R   R   R7   R"   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR&   °   s    c         C  s   t  t j |  j d ƒ | ƒ S(   Ni    (   R   R   R7   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR-   ¶   s    (   R'   R(   R)   R*   R   R   R   R!   R&   R   t
   AlwaysTruet   NaNR-   (    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR1   ‹   s   	t   AskZeroHandlerc           B  s5   e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   c         C  s   |  j  S(   N(   t   is_zero(   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   ¼   s    c         C  s:   t  t t t j |  ƒ | ƒ ƒ t t j |  ƒ | ƒ g ƒ S(   N(   R   R   R   R   R7   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   À   s    c           s   t  ‡  f d †  |  j Dƒ ƒ S(   Nc         3  s'   |  ] } t  t j | ƒ ˆ  ƒ Vq d  S(   N(   R   R   t   zero(   R4   R   (   R   (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pys	   <genexpr>È   s    (   R   R   (   R
   R   (    (   R   s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR!   Å   s    (   R'   R(   R*   R   R   R!   (    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR:   º   s   t   AskNonPositiveHandlerc           B  s&   e  Z e d  „  ƒ Z e d „  ƒ Z RS(   c         C  s   |  j  S(   N(   t   is_nonpositive(   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   Ì   s    c         C  sH   |  j  rD t t j |  | ƒ ƒ } | r= t t j |  ƒ | ƒ S| Sn  d  S(   N(   R   R   t   AskPositiveHandlerR   R   R   R   (   R
   R   t   notpositive(    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   Ð   s
    	(   R'   R(   R*   R   R   (    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR=   Ê   s   R?   c           B  s  e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d	 „  ƒ Z e e j ƒ Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   s^   
    Handler for key 'positive'
    Test that an expression is greater (strict) than zero
    c         C  s   |  j  S(   N(   t   is_positive(   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   ß   s    c         C  s    |  j  ƒ  \ } } | sC | j d ƒ } | j d k rœ | d k SnY | j d ƒ } | j d k rœ | d k rq t S| j d ƒ } | j d k rœ | d k Sn  d  S(   Ni   i   i    (   R   R   R   R   (   R
   R   R   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   ã   s    c         C  s   |  j  r t j |  | ƒ Sd  S(   N(   R   R?   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   ÷   s    	c         C  s~   |  j  r t j |  | ƒ St } xX |  j D]M } t t j | ƒ | ƒ rM q) q) t t j | ƒ | ƒ rr | t A} q) d  Sq) W| S(   N(	   R   R?   R   R   R   R   R   R   R   (   R
   R   R    R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR!   ü   s    	c         C  sÅ   |  j  r t j |  | ƒ St t j |  ƒ | ƒ } | t k	 rA | Sd } xw |  j D]S } t t j | ƒ | ƒ t k	 rQ t t j	 | ƒ | ƒ t
 k r  | d 7} q¤ PqQ qQ W| t |  j ƒ k  rÁ t Sd  S(   Ni    i   (   R   R?   R   R   R   R   R   R   R   R   R   R   (   R
   R   R   t   nonnegR   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR   
  s    	c         C  s¶   |  j  r t j |  | ƒ St t j |  j ƒ | ƒ rV t t j |  j ƒ | ƒ rV t	 Sn  t t j
 |  j ƒ | ƒ r² t t j |  j ƒ | ƒ r t	 St t j |  j ƒ | ƒ r² t Sn  d  S(   N(   R   R?   R   R   R   R   R"   R   R#   R   R   R$   R%   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR&     s    	c         C  s   t  t j |  j d ƒ | ƒ r# t St  t j |  j d ƒ | ƒ r} d d l m } m } t  t j	 |  j d | | ƒ | ƒ Sd  S(   Ni    iÿÿÿÿ(   t   pit   I(
   R   R   R   R   R   t	   imaginaryt   sympyRC   RD   R$   (   R
   R   RC   RD   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR#   +  s
    c         C  s   t  t j |  j d ƒ | ƒ } | t k	 r/ | St  t j |  j d d ƒ | ƒ rV t St  t j |  j d d ƒ | ƒ r} t Sd  S(   Ni    i   (   R   R   R   R   R   R   R   R   (   R
   R   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   log3  s    ##c         C  s:   |  j  d } t t j | ƒ t j | ƒ @| ƒ r6 t Sd  S(   Ni    (   R   R   R   t   integerR   R   (   R
   R   R5   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt	   factorial=  s    %c         C  s   t  t j |  ƒ | ƒ S(   N(   R   R   R7   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR-   E  s    c         C  s#   t  t j |  j ƒ | ƒ r t Sd  S(   N(   R   R   t   positive_definiteR   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   TraceI  s    c         C  s#   t  t j |  j ƒ | ƒ r t Sd  S(   N(   R   R   RJ   R   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   DeterminantN  s    c         C  s5   |  j  |  j k r1 t t j |  j ƒ | ƒ r1 t Sd  S(   N(   R   t   jR   R   RJ   t   parentR   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   MatrixElementS  s    c         C  s   t  t j |  j d ƒ | ƒ S(   Ni    (   R   R   R   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   atanY  s    c         C  sk   |  j  d } t t j | ƒ t j | d ƒ @| ƒ r: t St t j | ƒ t j | d ƒ @| ƒ rg t Sd  S(   Ni    i   (	   R   R   R   R   t   nonpositiveR   R   t   nonnegativeR   (   R
   R   R5   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   asin]  s
    ))c         C  sB   |  j  d } t t j | d ƒ t j | d ƒ @| ƒ r> t Sd  S(   Ni    i   (   R   R   R   RQ   RR   R   (   R
   R   R5   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   acose  s    -c         C  s   t  t j |  j d ƒ | ƒ S(   Ni    (   R   R   R   R   (   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   acotk  s    (   R'   R(   R)   R*   R   R   R   R!   R   R&   R#   RG   RI   R   R+   R,   R-   RK   RL   RO   RP   RS   RT   RU   (    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyR?   Ù   s&   
N(   R)   t
   __future__R    R   t   sympy.assumptionsR   R   t   sympy.assumptions.handlersR   t   sympy.core.logicR   R   R   R   R.   R1   R:   R=   R?   (    (    (    s?   lib/python2.7/site-packages/sympy/assumptions/handlers/order.pyt   <module>   s   p/