ó
¡¼™\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
 d d l 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 S(   sD   
Handlers for keys related to number theory: prime, even, odd, etc.
iÿÿÿÿ(   t   print_functiont   division(   t   Qt   ask(   t   CommonHandler(   t   isprime(   t   St   Floatt   AskPrimeHandlerc           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 Z Z e d „  ƒ Z e d	 „  ƒ Z RS(
   sî   
    Handler for key 'prime'
    Test that an expression represents a prime number. When the
    expression is an exact number, the result (when True) is subject to
    the limitations of isprime() which is used to return the result.
    c         C  s   |  j  S(   N(   t   is_prime(   t   exprt   assumptions(    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   Expr   s    c         C  sq   |  j  t ƒ } y8 t |  j ƒ  ƒ } |  | j d ƒ t k rG t ‚ n  Wn t k
 r\ t SX| rm t | ƒ Sd  S(   Ni    (   t   atomsR   t   intt   roundt   equalst   Falset	   TypeErrorR   (   R
   R   t   exactt   i(    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   _number   s    c         C  s   |  j  r t j |  | ƒ Sd  S(   N(   t	   is_numberR   R   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   Basic'   s    	c         C  sw   |  j  r t j |  | ƒ Sx- |  j D]" } t t j | ƒ | ƒ s# d  Sq# Wx' |  j D] } | j  rS | j rS t	 SqS Wd  S(   N(
   R   R   R   t   argsR   R   t   integert   Nonet   is_compositeR   (   R
   R   t   arg(    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   Mul,   s    	c         C  sW   |  j  r t j |  | ƒ St t j |  j ƒ | ƒ rS t t j |  j ƒ | ƒ rS t Sd S(   s0   
        Integer**Integer     -> !Prime
        N(	   R   R   R   R   R   R   t   expt   baseR   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   Pow7   s
    	c         C  s
   t  |  ƒ S(   N(   R   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   IntegerB   s    i   c         C  s   t  j |  | ƒ S(   N(   R   R   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   H   s    c         C  s   t  j |  | ƒ S(   N(   R   R   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   NumberSymbolL   s    (   t   __name__t
   __module__t   __doc__t   staticmethodR   R   R   R   R    R!   R   t   AlwaysFalset   Rationalt   Infinityt   NegativeInfinityt   ImaginaryUnitR   R"   (    (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR      s   "t   AskCompositeHandlerc           B  s&   e  Z e d  „  ƒ Z e d „  ƒ Z RS(   c         C  s   |  j  S(   N(   R   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   S   s    c         C  s‹   t  t j |  ƒ | ƒ } | rƒ t  t j |  ƒ | ƒ } | r| t  t j |  ƒ | ƒ } | d  k rd d  S|  j d ƒ rw t S| S| Sn | Sd  S(   Ni   (   R   R   t   positiveR   t   primeR   R   R   (   R
   R   t	   _positivet   _integert   _prime(    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   W   s    (   R#   R$   R&   R   R   (    (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR,   Q   s   t   AskEvenHandlerc           B  sÏ   e  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 ƒ g d \ Z Z Z Z e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z RS(   c         C  s   |  j  S(   N(   t   is_even(   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   m   s    c         C  sn   y2 t  |  j ƒ  ƒ } |  | j d ƒ s1 t ‚ n  Wn t k
 rF t SXt |  t t f ƒ r` t S| d d k S(   Ni    i   (   R   R   R   R   R   t
   isinstancet   floatR   (   R
   R   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   q   s    c         C  s   |  j  r t j |  | ƒ Sd  S(   N(   R   R2   R   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   ~   s    	c         C  sJ  |  j  r t j |  | ƒ St d t d f \ } } } } x|  j D]Ô } t t j | ƒ | ƒ rã t t j | ƒ | ƒ r€ t	 } qt t j
 | ƒ | ƒ r¥ | d 7} q| r| d k rt t j
 | | ƒ | ƒ rà t	 } qà qn, t t j | ƒ | ƒ r| rPn  t	 } n P| } qA W| r#t S| r-t	 S| t |  j ƒ k rFt Sd S(   s  
        Even * Integer    -> Even
        Even * Odd        -> Even
        Integer * Odd     -> ?
        Odd * Odd         -> Odd
        Even * Even       -> Even
        Integer * Integer -> Even if Integer + Integer = Odd
        otherwise         -> ?
        i    i   N(   R   R2   R   R   R   R   R   R   t   event   Truet   oddt
   irrationalt   len(   R
   R   R6   R8   R9   t   accR   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   ƒ   s0    			
c         C  sy   |  j  r t j |  | ƒ St } xS |  j D]D } t t j | ƒ | ƒ rJ q) t t j | ƒ | ƒ rl | } q) Pq) W| Sd S(   s]   
        Even + Odd  -> Odd
        Even + Even -> Even
        Odd  + Odd  -> Even

        N(	   R   R2   R   R7   R   R   R   R6   R8   (   R
   R   t   _resultR   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   Add¬   s    	
c         C  sµ   |  j  r t j |  | ƒ St t j |  j ƒ | ƒ r± t t j |  j ƒ | ƒ rh t t j |  j	 ƒ | ƒ St t j
 |  j ƒ t j |  j	 ƒ @| ƒ r˜ t S|  j	 t j k r± t Sn  d  S(   N(   R   R2   R   R   R   R   R   R-   R6   R   t   negativeR8   R   R   t   NegativeOne(   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR    Á   s    	,c         C  s   t  |  j d @ƒ S(   Ni   (   t   boolt   p(   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR!   Í   s    i   c         C  s   t  j |  | ƒ S(   N(   R2   R   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR"   Ó   s    c         C  s@   t  t j |  j d ƒ | ƒ r< t  t j |  j d ƒ | ƒ Sd  S(   Ni    (   R   R   t   realR   R6   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   Abs×   s    c         C  s@   t  t j |  j d ƒ | ƒ r< t  t j |  j d ƒ | ƒ Sd  S(   Ni    (   R   R   RB   R   R6   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   reÜ   s    c         C  s'   t  t j |  j d ƒ | ƒ r# t Sd  S(   Ni    (   R   R   RB   R   R7   (   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   imá   s    (   R#   R$   R&   R   R   R   R   R=   R    R!   R   R'   R(   R)   R*   R+   R"   RC   RD   RE   (    (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR2   k   s   )"t   AskOddHandlerc           B  s,   e  Z d  Z e d „  ƒ Z e d „  ƒ Z RS(   sT   
    Handler for key 'odd'
    Test that an expression represents an odd number
    c         C  s   |  j  S(   N(   t   is_odd(   R
   R   (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   í   s    c         C  sO   t  t j |  ƒ | ƒ } | rK t  t j |  ƒ | ƒ } | d  k rF d  S| S| S(   N(   R   R   R   R6   R   (   R
   R   R0   t   _even(    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyR   ñ   s    (   R#   R$   R%   R&   R   R   (    (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyRF   ç   s   N(   R%   t
   __future__R    R   t   sympy.assumptionsR   R   t   sympy.assumptions.handlersR   t   sympy.ntheoryR   t
   sympy.coreR   R   R   R,   R2   RF   (    (    (    sA   lib/python2.7/site-packages/sympy/assumptions/handlers/ntheory.pyt   <module>   s   E|