ó
~9­\c        %   @  s
  d  Z  d d l m Z m Z d d l m Z 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 m Z m Z m Z m Z m Z m Z m Z d d	 l m Z d d
 l m Z d d d g Z i  Z e e ƒ Z d e  f d „  ƒ  YZ! e! ƒ  Z" e# d „ Z$ e# e d „ Z% d „  Z& d „  Z' d „  Z( d „  Z) d „  Z* d Z+ d d f d d f d d f d d f d  d! f d" d# f d$ d% f d& d' f d( d) f d* d+ f d, d- f d. d/ f d0 d1 f d2 d3 f d4 d5 f d6 d7 f d8 d9 f d: d; f d< d= f d> d? f d@ dA f dB dC f dD dE f dF dG f dH dI f dJ dK f dL dM f dN dO f dP dQ f dR dS f dT dU f dV dW f dX dY f dZ d[ f d\ d] f d^ d_ f g$ Z, x% e, D] \ Z- Z. e' e- e+ e. ƒ q±We d` „  ƒ Z/ e da „  ƒ Z0 d db l1 m2 Z2 m3 Z3 dc S(d   s4   Module for querying SymPy objects about assumptions.iÿÿÿÿ(   t   print_functiont   division(   t   global_assumptionst	   Predicatet   AppliedPredicate(   t   sympify(   t   cacheit(   t
   deprecated(   t
   Relational(   t   to_cnft   Andt   Nott   Ort   Impliest
   Equivalentt   BooleanFunctiont   BooleanAtom(   t   satisfiable(   t   memoize_propertyt   boundedt   infinityt   infinitesimalt   AssumptionKeysc           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 d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e e d d d d d d ƒ d „  ƒ ƒ Z e d „  ƒ Z e e d d d d d d ƒ d „  ƒ ƒ Z e e d d d d d d ƒ 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 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 d. „  ƒ Z( e d/ „  ƒ Z) e d0 „  ƒ Z* e d1 „  ƒ Z+ e d2 „  ƒ Z, e d3 „  ƒ Z- e d4 „  ƒ Z. e d5 „  ƒ Z/ e d6 „  ƒ Z0 e d7 „  ƒ Z1 RS(8   s@   
    This class contains all the supported keys by ``ask``.
    c         C  s
   t  d ƒ S(   sø   
        Hermitian predicate.

        ``ask(Q.hermitian(x))`` is true iff ``x`` belongs to the set of
        Hermitian operators.

        References
        ==========

        .. [1] http://mathworld.wolfram.com/HermitianOperator.html

        t	   hermitian(   R   (   t   self(    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   $   s    c         C  s
   t  d ƒ S(   sH  
        Antihermitian predicate.

        ``Q.antihermitian(x)`` is true iff ``x`` belongs to the field of
        antihermitian operators, i.e., operators in the form ``x*I``, where
        ``x`` is Hermitian.

        References
        ==========

        .. [1] http://mathworld.wolfram.com/HermitianOperator.html

        t   antihermitian(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   5   s    c         C  s
   t  d ƒ S(   s@  
        Real number predicate.

        ``Q.real(x)`` is true iff ``x`` is a real number, i.e., it is in the
        interval `(-\infty, \infty)`.  Note that, in particular the infinities
        are not real. Use ``Q.extended_real`` if you want to consider those as
        well.

        A few important facts about reals:

        - Every real number is positive, negative, or zero.  Furthermore,
          because these sets are pairwise disjoint, each real number is exactly
          one of those three.

        - Every real number is also complex.

        - Every real number is finite.

        - Every real number is either rational or irrational.

        - Every real number is either algebraic or transcendental.

        - The facts ``Q.negative``, ``Q.zero``, ``Q.positive``,
          ``Q.nonnegative``, ``Q.nonpositive``, ``Q.nonzero``, ``Q.integer``,
          ``Q.rational``, and ``Q.irrational`` all imply ``Q.real``, as do all
          facts that imply those facts.

        - The facts ``Q.algebraic``, and ``Q.transcendental`` do not imply
          ``Q.real``; they imply ``Q.complex``. An algebraic or transcendental
          number may or may not be real.

        - The "non" facts (i.e., ``Q.nonnegative``, ``Q.nonzero``,
          ``Q.nonpositive`` and ``Q.noninteger``) are not equivalent to not the
          fact, but rather, not the fact *and* ``Q.real``.  For example,
          ``Q.nonnegative`` means ``~Q.negative & Q.real``. So for example,
          ``I`` is not nonnegative, nonzero, or nonpositive.

        Examples
        ========

        >>> from sympy import Q, ask, symbols
        >>> x = symbols('x')
        >>> ask(Q.real(x), Q.positive(x))
        True
        >>> ask(Q.real(0))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Real_number

        t   real(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   G   s    7c         C  s
   t  d ƒ S(   sÈ  
        Extended real predicate.

        ``Q.extended_real(x)`` is true iff ``x`` is a real number or
        `\{-\infty, \infty\}`.

        See documentation of ``Q.real`` for more information about related facts.

        Examples
        ========

        >>> from sympy import ask, Q, oo, I
        >>> ask(Q.extended_real(1))
        True
        >>> ask(Q.extended_real(I))
        False
        >>> ask(Q.extended_real(oo))
        True

        t   extended_real(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   €   s    c         C  s
   t  d ƒ S(   s;  
        Imaginary number predicate.

        ``Q.imaginary(x)`` is true iff ``x`` can be written as a real
        number multiplied by the imaginary unit ``I``. Please note that ``0``
        is not considered to be an imaginary number.

        Examples
        ========

        >>> from sympy import Q, ask, I
        >>> ask(Q.imaginary(3*I))
        True
        >>> ask(Q.imaginary(2 + 3*I))
        False
        >>> ask(Q.imaginary(0))
        False

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Imaginary_number

        t	   imaginary(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   ˜   s    c         C  s
   t  d ƒ S(   s  
        Complex number predicate.

        ``Q.complex(x)`` is true iff ``x`` belongs to the set of complex
        numbers. Note that every complex number is finite.

        Examples
        ========

        >>> from sympy import Q, Symbol, ask, I, oo
        >>> x = Symbol('x')
        >>> ask(Q.complex(0))
        True
        >>> ask(Q.complex(2 + 3*I))
        True
        >>> ask(Q.complex(oo))
        False

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Complex_number

        t   complex(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   ´   s    c         C  s
   t  d ƒ S(   sE  
        Algebraic number predicate.

        ``Q.algebraic(x)`` is true iff ``x`` belongs to the set of
        algebraic numbers. ``x`` is algebraic if there is some polynomial
        in ``p(x)\in \mathbb\{Q\}[x]`` such that ``p(x) = 0``.

        Examples
        ========

        >>> from sympy import ask, Q, sqrt, I, pi
        >>> ask(Q.algebraic(sqrt(2)))
        True
        >>> ask(Q.algebraic(I))
        True
        >>> ask(Q.algebraic(pi))
        False

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Algebraic_number
        t	   algebraic(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   Ð   s    c         C  s
   t  d ƒ S(   sî   
        Transcedental number predicate.

        ``Q.transcendental(x)`` is true iff ``x`` belongs to the set of
        transcendental numbers. A transcendental number is a real
        or complex number that is not algebraic.

        t   transcendental(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   ë   s    c         C  s
   t  d ƒ S(   s}  
        Integer predicate.

        ``Q.integer(x)`` is true iff ``x`` belongs to the set of integer numbers.

        Examples
        ========

        >>> from sympy import Q, ask, S
        >>> ask(Q.integer(5))
        True
        >>> ask(Q.integer(S(1)/2))
        False

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Integer

        t   integer(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR    ø   s    c         C  s
   t  d ƒ S(   sÃ  
        Rational number predicate.

        ``Q.rational(x)`` is true iff ``x`` belongs to the set of
        rational numbers.

        Examples
        ========

        >>> from sympy import ask, Q, pi, S
        >>> ask(Q.rational(0))
        True
        >>> ask(Q.rational(S(1)/2))
        True
        >>> ask(Q.rational(pi))
        False

        References
        ==========

        https://en.wikipedia.org/wiki/Rational_number

        t   rational(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR!     s    c         C  s
   t  d ƒ S(   s&  
        Irrational number predicate.

        ``Q.irrational(x)`` is true iff ``x``  is any real number that
        cannot be expressed as a ratio of integers.

        Examples
        ========

        >>> from sympy import ask, Q, pi, S, I
        >>> ask(Q.irrational(0))
        False
        >>> ask(Q.irrational(S(1)/2))
        False
        >>> ask(Q.irrational(pi))
        True
        >>> ask(Q.irrational(I))
        False

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Irrational_number

        t
   irrational(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR"   +  s    c         C  s
   t  d ƒ S(   sh  
        Finite predicate.

        ``Q.finite(x)`` is true if ``x`` is neither an infinity
        nor a ``NaN``. In other words, ``ask(Q.finite(x))`` is true for all ``x``
        having a bounded absolute value.

        Examples
        ========

        >>> from sympy import Q, ask, Symbol, S, oo, I
        >>> x = Symbol('x')
        >>> ask(Q.finite(S.NaN))
        False
        >>> ask(Q.finite(oo))
        False
        >>> ask(Q.finite(1))
        True
        >>> ask(Q.finite(2 + 3*I))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Finite

        t   finite(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR#   H  s    t
   useinsteadR#   t   issueiÑ$  t   deprecated_since_versions   1.0c         C  s
   t  d ƒ S(   s4   
        See documentation of ``Q.finite``.
        R#   (   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   g  s    c         C  s
   t  d ƒ S(   s…   
        Infinite number predicate.

        ``Q.infinite(x)`` is true iff the absolute value of ``x`` is
        infinity.

        t   infinite(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR'   o  s    
R'   iÒ$  c         C  s
   t  d ƒ S(   s6   
        See documentation of ``Q.infinite``.
        R'   (   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   {  s    t   zeroiË%  c         C  s
   t  d ƒ S(   s2   
        See documentation of ``Q.zero``.
        R(   (   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR   ƒ  s    c         C  s
   t  d ƒ S(   s~  
        Positive real number predicate.

        ``Q.positive(x)`` is true iff ``x`` is real and `x > 0`, that is if ``x``
        is in the interval `(0, \infty)`.  In particular, infinity is not
        positive.

        A few important facts about positive numbers:

        - Note that ``Q.nonpositive`` and ``~Q.positive`` are *not* the same
          thing. ``~Q.positive(x)`` simply means that ``x`` is not positive,
          whereas ``Q.nonpositive(x)`` means that ``x`` is real and not
          positive, i.e., ``Q.nonpositive(x)`` is logically equivalent to
          `Q.negative(x) | Q.zero(x)``.  So for example, ``~Q.positive(I)`` is
          true, whereas ``Q.nonpositive(I)`` is false.

        - See the documentation of ``Q.real`` for more information about
          related facts.

        Examples
        ========

        >>> from sympy import Q, ask, symbols, I
        >>> x = symbols('x')
        >>> ask(Q.positive(x), Q.real(x) & ~Q.negative(x) & ~Q.zero(x))
        True
        >>> ask(Q.positive(1))
        True
        >>> ask(Q.nonpositive(I))
        False
        >>> ask(~Q.positive(I))
        True

        t   positive(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR)   ‹  s    $c         C  s
   t  d ƒ S(   sž  
        Negative number predicate.

        ``Q.negative(x)`` is true iff ``x`` is a real number and :math:`x < 0`, that is,
        it is in the interval :math:`(-\infty, 0)`.  Note in particular that negative
        infinity is not negative.

        A few important facts about negative numbers:

        - Note that ``Q.nonnegative`` and ``~Q.negative`` are *not* the same
          thing. ``~Q.negative(x)`` simply means that ``x`` is not negative,
          whereas ``Q.nonnegative(x)`` means that ``x`` is real and not
          negative, i.e., ``Q.nonnegative(x)`` is logically equivalent to
          ``Q.zero(x) | Q.positive(x)``.  So for example, ``~Q.negative(I)`` is
          true, whereas ``Q.nonnegative(I)`` is false.

        - See the documentation of ``Q.real`` for more information about
          related facts.

        Examples
        ========

        >>> from sympy import Q, ask, symbols, I
        >>> x = symbols('x')
        >>> ask(Q.negative(x), Q.real(x) & ~Q.positive(x) & ~Q.zero(x))
        True
        >>> ask(Q.negative(-1))
        True
        >>> ask(Q.nonnegative(I))
        False
        >>> ask(~Q.negative(I))
        True

        t   negative(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR*   ±  s    $c         C  s
   t  d ƒ S(   sÏ  
        Zero number predicate.

        ``ask(Q.zero(x))`` is true iff the value of ``x`` is zero.

        Examples
        ========

        >>> from sympy import ask, Q, oo, symbols
        >>> x, y = symbols('x, y')
        >>> ask(Q.zero(0))
        True
        >>> ask(Q.zero(1/oo))
        True
        >>> ask(Q.zero(0*oo))
        False
        >>> ask(Q.zero(1))
        False
        >>> ask(Q.zero(x*y), Q.zero(x) | Q.zero(y))
        True

        R(   (   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR(   ×  s    c         C  s
   t  d ƒ S(   s	  
        Nonzero real number predicate.

        ``ask(Q.nonzero(x))`` is true iff ``x`` is real and ``x`` is not zero.  Note in
        particular that ``Q.nonzero(x)`` is false if ``x`` is not real.  Use
        ``~Q.zero(x)`` if you want the negation of being zero without any real
        assumptions.

        A few important facts about nonzero numbers:

        - ``Q.nonzero`` is logically equivalent to ``Q.positive | Q.negative``.

        - See the documentation of ``Q.real`` for more information about
          related facts.

        Examples
        ========

        >>> from sympy import Q, ask, symbols, I, oo
        >>> x = symbols('x')
        >>> print(ask(Q.nonzero(x), ~Q.zero(x)))
        None
        >>> ask(Q.nonzero(x), Q.positive(x))
        True
        >>> ask(Q.nonzero(x), Q.zero(x))
        False
        >>> ask(Q.nonzero(0))
        False
        >>> ask(Q.nonzero(I))
        False
        >>> ask(~Q.zero(I))
        True
        >>> ask(Q.nonzero(oo))  #doctest: +SKIP
        False

        t   nonzero(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR+   ñ  s    &c         C  s
   t  d ƒ S(   s˜  
        Nonpositive real number predicate.

        ``ask(Q.nonpositive(x))`` is true iff ``x`` belongs to the set of
        negative numbers including zero.

        - Note that ``Q.nonpositive`` and ``~Q.positive`` are *not* the same
          thing. ``~Q.positive(x)`` simply means that ``x`` is not positive,
          whereas ``Q.nonpositive(x)`` means that ``x`` is real and not
          positive, i.e., ``Q.nonpositive(x)`` is logically equivalent to
          `Q.negative(x) | Q.zero(x)``.  So for example, ``~Q.positive(I)`` is
          true, whereas ``Q.nonpositive(I)`` is false.

        Examples
        ========

        >>> from sympy import Q, ask, I
        >>> ask(Q.nonpositive(-1))
        True
        >>> ask(Q.nonpositive(0))
        True
        >>> ask(Q.nonpositive(1))
        False
        >>> ask(Q.nonpositive(I))
        False
        >>> ask(Q.nonpositive(-I))
        False

        t   nonpositive(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR,     s    c         C  s
   t  d ƒ S(   s™  
        Nonnegative real number predicate.

        ``ask(Q.nonnegative(x))`` is true iff ``x`` belongs to the set of
        positive numbers including zero.

        - Note that ``Q.nonnegative`` and ``~Q.negative`` are *not* the same
          thing. ``~Q.negative(x)`` simply means that ``x`` is not negative,
          whereas ``Q.nonnegative(x)`` means that ``x`` is real and not
          negative, i.e., ``Q.nonnegative(x)`` is logically equivalent to
          ``Q.zero(x) | Q.positive(x)``.  So for example, ``~Q.negative(I)`` is
          true, whereas ``Q.nonnegative(I)`` is false.

        Examples
        ========

        >>> from sympy import Q, ask, I
        >>> ask(Q.nonnegative(1))
        True
        >>> ask(Q.nonnegative(0))
        True
        >>> ask(Q.nonnegative(-1))
        False
        >>> ask(Q.nonnegative(I))
        False
        >>> ask(Q.nonnegative(-I))
        False

        t   nonnegative(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR-   :  s    c         C  s
   t  d ƒ S(   st  
        Even number predicate.

        ``ask(Q.even(x))`` is true iff ``x`` belongs to the set of even
        integers.

        Examples
        ========

        >>> from sympy import Q, ask, pi
        >>> ask(Q.even(0))
        True
        >>> ask(Q.even(2))
        True
        >>> ask(Q.even(3))
        False
        >>> ask(Q.even(pi))
        False

        t   even(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR.   [  s    c         C  s
   t  d ƒ S(   se  
        Odd number predicate.

        ``ask(Q.odd(x))`` is true iff ``x`` belongs to the set of odd numbers.

        Examples
        ========

        >>> from sympy import Q, ask, pi
        >>> ask(Q.odd(0))
        False
        >>> ask(Q.odd(2))
        False
        >>> ask(Q.odd(3))
        True
        >>> ask(Q.odd(pi))
        False

        t   odd(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR/   s  s    c         C  s
   t  d ƒ S(   sî  
        Prime number predicate.

        ``ask(Q.prime(x))`` is true iff ``x`` is a natural number greater
        than 1 that has no positive divisors other than ``1`` and the
        number itself.

        Examples
        ========

        >>> from sympy import Q, ask
        >>> ask(Q.prime(0))
        False
        >>> ask(Q.prime(1))
        False
        >>> ask(Q.prime(2))
        True
        >>> ask(Q.prime(20))
        False
        >>> ask(Q.prime(-3))
        False

        t   prime(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR0   Š  s    c         C  s
   t  d ƒ S(   sÎ  
        Composite number predicate.

        ``ask(Q.composite(x))`` is true iff ``x`` is a positive integer and has
        at least one positive divisor other than ``1`` and the number itself.

        Examples
        ========

        >>> from sympy import Q, ask
        >>> ask(Q.composite(0))
        False
        >>> ask(Q.composite(1))
        False
        >>> ask(Q.composite(2))
        False
        >>> ask(Q.composite(20))
        True

        t	   composite(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR1   ¥  s    c         C  s
   t  d ƒ S(   s¯   
        Commutative predicate.

        ``ask(Q.commutative(x))`` is true iff ``x`` commutes with any other
        object with respect to multiplication operation.

        t   commutative(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR2   ½  s    
c         C  s
   t  d ƒ S(   s3  
        Generic predicate.

        ``ask(Q.is_true(x))`` is true iff ``x`` is true. This only makes
        sense if ``x`` is a predicate.

        Examples
        ========

        >>> from sympy import ask, Q, symbols
        >>> x = symbols('x')
        >>> ask(Q.is_true(True))
        True

        t   is_true(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR3   É  s    c         C  s
   t  d ƒ S(   sÐ  
        Symmetric matrix predicate.

        ``Q.symmetric(x)`` is true iff ``x`` is a square matrix and is equal to
        its transpose. Every square diagonal matrix is a symmetric matrix.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 2, 2)
        >>> Y = MatrixSymbol('Y', 2, 3)
        >>> Z = MatrixSymbol('Z', 2, 2)
        >>> ask(Q.symmetric(X*Z), Q.symmetric(X) & Q.symmetric(Z))
        True
        >>> ask(Q.symmetric(X + Z), Q.symmetric(X) & Q.symmetric(Z))
        True
        >>> ask(Q.symmetric(Y))
        False


        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Symmetric_matrix

        t	   symmetric(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR4   Ü  s    c         C  s
   t  d ƒ S(   sØ  
        Invertible matrix predicate.

        ``Q.invertible(x)`` is true iff ``x`` is an invertible matrix.
        A square matrix is called invertible only if its determinant is 0.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 2, 2)
        >>> Y = MatrixSymbol('Y', 2, 3)
        >>> Z = MatrixSymbol('Z', 2, 2)
        >>> ask(Q.invertible(X*Y), Q.invertible(X))
        False
        >>> ask(Q.invertible(X*Z), Q.invertible(X) & Q.invertible(Z))
        True
        >>> ask(Q.invertible(X), Q.fullrank(X) & Q.square(X))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Invertible_matrix

        t
   invertible(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR5   ý  s    c         C  s
   t  d ƒ S(   s®  
        Orthogonal matrix predicate.

        ``Q.orthogonal(x)`` is true iff ``x`` is an orthogonal matrix.
        A square matrix ``M`` is an orthogonal matrix if it satisfies
        ``M^TM = MM^T = I`` where ``M^T`` is the transpose matrix of
        ``M`` and ``I`` is an identity matrix. Note that an orthogonal
        matrix is necessarily invertible.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol, Identity
        >>> X = MatrixSymbol('X', 2, 2)
        >>> Y = MatrixSymbol('Y', 2, 3)
        >>> Z = MatrixSymbol('Z', 2, 2)
        >>> ask(Q.orthogonal(Y))
        False
        >>> ask(Q.orthogonal(X*Z*X), Q.orthogonal(X) & Q.orthogonal(Z))
        True
        >>> ask(Q.orthogonal(Identity(3)))
        True
        >>> ask(Q.invertible(X), Q.orthogonal(X))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Orthogonal_matrix

        t
   orthogonal(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR6     s    !c         C  s
   t  d ƒ S(   s6  
        Unitary matrix predicate.

        ``Q.unitary(x)`` is true iff ``x`` is a unitary matrix.
        Unitary matrix is an analogue to orthogonal matrix. A square
        matrix ``M`` with complex elements is unitary if :math:``M^TM = MM^T= I``
        where :math:``M^T`` is the conjugate transpose matrix of ``M``.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol, Identity
        >>> X = MatrixSymbol('X', 2, 2)
        >>> Y = MatrixSymbol('Y', 2, 3)
        >>> Z = MatrixSymbol('Z', 2, 2)
        >>> ask(Q.unitary(Y))
        False
        >>> ask(Q.unitary(X*Z*X), Q.unitary(X) & Q.unitary(Z))
        True
        >>> ask(Q.unitary(Identity(3)))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Unitary_matrix

        t   unitary(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR7   >  s    c         C  s
   t  d ƒ S(   s=  
        Positive definite matrix predicate.

        If ``M`` is a :math:``n \times n`` symmetric real matrix, it is said
        to be positive definite if :math:`Z^TMZ` is positive for
        every non-zero column vector ``Z`` of ``n`` real numbers.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol, Identity
        >>> X = MatrixSymbol('X', 2, 2)
        >>> Y = MatrixSymbol('Y', 2, 3)
        >>> Z = MatrixSymbol('Z', 2, 2)
        >>> ask(Q.positive_definite(Y))
        False
        >>> ask(Q.positive_definite(Identity(3)))
        True
        >>> ask(Q.positive_definite(X + Z), Q.positive_definite(X) &
        ...     Q.positive_definite(Z))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Positive-definite_matrix

        t   positive_definite(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR8   ^  s    c         C  s
   t  d ƒ S(   së  
        Upper triangular matrix predicate.

        A matrix ``M`` is called upper triangular matrix if :math:`M_{ij}=0`
        for :math:`i<j`.

        Examples
        ========

        >>> from sympy import Q, ask, ZeroMatrix, Identity
        >>> ask(Q.upper_triangular(Identity(3)))
        True
        >>> ask(Q.upper_triangular(ZeroMatrix(3, 3)))
        True

        References
        ==========

        .. [1] http://mathworld.wolfram.com/UpperTriangularMatrix.html

        t   upper_triangular(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR9   ~  s    c         C  s
   t  d ƒ S(   sê  
        Lower triangular matrix predicate.

        A matrix ``M`` is called lower triangular matrix if :math:`a_{ij}=0`
        for :math:`i>j`.

        Examples
        ========

        >>> from sympy import Q, ask, ZeroMatrix, Identity
        >>> ask(Q.lower_triangular(Identity(3)))
        True
        >>> ask(Q.lower_triangular(ZeroMatrix(3, 3)))
        True

        References
        ==========

        .. [1] http://mathworld.wolfram.com/LowerTriangularMatrix.html
        t   lower_triangular(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR:   —  s    c         C  s
   t  d ƒ S(   sq  
        Diagonal matrix predicate.

        ``Q.diagonal(x)`` is true iff ``x`` is a diagonal matrix. A diagonal
        matrix is a matrix in which the entries outside the main diagonal
        are all zero.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol, ZeroMatrix
        >>> X = MatrixSymbol('X', 2, 2)
        >>> ask(Q.diagonal(ZeroMatrix(3, 3)))
        True
        >>> ask(Q.diagonal(X), Q.lower_triangular(X) &
        ...     Q.upper_triangular(X))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Diagonal_matrix

        t   diagonal(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR;   ¯  s    c         C  s
   t  d ƒ S(   s`  
        Fullrank matrix predicate.

        ``Q.fullrank(x)`` is true iff ``x`` is a full rank matrix.
        A matrix is full rank if all rows and columns of the matrix
        are linearly independent. A square matrix is full rank iff
        its determinant is nonzero.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol, ZeroMatrix, Identity
        >>> X = MatrixSymbol('X', 2, 2)
        >>> ask(Q.fullrank(X.T), Q.fullrank(X))
        True
        >>> ask(Q.fullrank(ZeroMatrix(3, 3)))
        False
        >>> ask(Q.fullrank(Identity(3)))
        True

        t   fullrank(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR<   Ë  s    c         C  s
   t  d ƒ S(   sš  
        Square matrix predicate.

        ``Q.square(x)`` is true iff ``x`` is a square matrix. A square matrix
        is a matrix with the same number of rows and columns.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol, ZeroMatrix, Identity
        >>> X = MatrixSymbol('X', 2, 2)
        >>> Y = MatrixSymbol('X', 2, 3)
        >>> ask(Q.square(X))
        True
        >>> ask(Q.square(Y))
        False
        >>> ask(Q.square(ZeroMatrix(3, 3)))
        True
        >>> ask(Q.square(Identity(3)))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Square_matrix

        t   square(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR=   ä  s    c         C  s
   t  d ƒ S(   s[  
        Integer elements matrix predicate.

        ``Q.integer_elements(x)`` is true iff all the elements of ``x``
        are integers.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 4, 4)
        >>> ask(Q.integer(X[1, 2]), Q.integer_elements(X))
        True

        t   integer_elements(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR>     s    c         C  s
   t  d ƒ S(   sS  
        Real elements matrix predicate.

        ``Q.real_elements(x)`` is true iff all the elements of ``x``
        are real numbers.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 4, 4)
        >>> ask(Q.real(X[1, 2]), Q.real_elements(X))
        True

        t   real_elements(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR?     s    c         C  s
   t  d ƒ S(   s­  
        Complex elements matrix predicate.

        ``Q.complex_elements(x)`` is true iff all the elements of ``x``
        are complex numbers.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 4, 4)
        >>> ask(Q.complex(X[1, 2]), Q.complex_elements(X))
        True
        >>> ask(Q.complex_elements(X), Q.integer_elements(X))
        True

        t   complex_elements(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR@   )  s    c         C  s
   t  d ƒ S(   sÕ  
        Singular matrix predicate.

        A matrix is singular iff the value of its determinant is 0.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 4, 4)
        >>> ask(Q.singular(X), Q.invertible(X))
        False
        >>> ask(Q.singular(X), ~Q.invertible(X))
        True

        References
        ==========

        .. [1] http://mathworld.wolfram.com/SingularMatrix.html

        t   singular(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyRA   >  s    c         C  s
   t  d ƒ S(   sŽ  
        Normal matrix predicate.

        A matrix is normal if it commutes with its conjugate transpose.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 4, 4)
        >>> ask(Q.normal(X), Q.unitary(X))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Normal_matrix

        t   normal(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyRB   W  s    c         C  s
   t  d ƒ S(   s  
        Triangular matrix predicate.

        ``Q.triangular(X)`` is true if ``X`` is one that is either lower
        triangular or upper triangular.

        Examples
        ========
        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 4, 4)
        >>> ask(Q.triangular(X), Q.upper_triangular(X))
        True
        >>> ask(Q.triangular(X), Q.lower_triangular(X))
        True

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Triangular_matrix

        t
   triangular(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyRC   n  s    c         C  s
   t  d ƒ S(   sQ  
        Unit triangular matrix predicate.

        A unit triangular matrix is a triangular matrix with 1s
        on the diagonal.

        Examples
        ========

        >>> from sympy import Q, ask, MatrixSymbol
        >>> X = MatrixSymbol('X', 4, 4)
        >>> ask(Q.triangular(X), Q.unit_triangular(X))
        True

        t   unit_triangular(   R   (   R   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyRD   ‡  s    (2   t   __name__t
   __module__t   __doc__t   predicate_memoR   R   R   R   R   R   R   R   R    R!   R"   R#   R   R   R'   R   R   R)   R*   R(   R+   R,   R-   R.   R/   R0   R1   R2   R3   R4   R5   R6   R7   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   RB   RC   RD   (    (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyR      sb   9'''&&(!!!#  c         C  s¥  t  | t ƒ r@ | r@ t |  | j t ƒ } | d k	 r= | Sq@ n  t  |  t ƒ rS d S|  j | ƒ sf d St  |  t ƒ r’ |  j	 | k r‹ |  j
 Sd Sn  t  |  t ƒ r	|  j d j
 t t f k r	|  j d t k rÖ t n t } | g  |  j d j D] } | ^ qð Œ  }  n  g  |  j D] } t | | ƒ ^ q} t  |  t ƒ rxg  | D] } | d k	 rD| ^ qD} | rx|  j
 | Œ  Sn  | r¡t d „  | Dƒ ƒ r¡|  j
 | Œ  Sd S(   s   
    Helper for ask().

    Extracts the facts relevant to the symbol from an assumption.
    Returns None if there is nothing to extract.
    Ni    c         s  s   |  ] } | d  k	 Vq d  S(   N(   t   None(   t   .0t   x(    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pys	   <genexpr>º  s    (   t
   isinstanceR   t   _extract_factst   reversedt   FalseRI   t   boolt   hasR   t   argt   funcR   t   argsR
   R   t   all(   t   exprt   symbolt   check_reversed_relt   revt   clsRR   RT   RK   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyRM     s.    
+-%%c   
        sõ  d d l  m } t |  t t t t f ƒ s: t d ƒ ‚ n  t | t t t t f ƒ sd t d ƒ ‚ n  t |  t ƒ r |  j t	 |  j
 ƒ } } n t j t	 |  ƒ } } t | t | Œ  ƒ } t | ƒ } t | | ƒ } t ƒ  } t ƒ  ‰  | rt t | | ƒ ƒ t k rt d | ƒ ‚ n  | | ƒ j | ƒ } | d
 k	 rFt | ƒ S| d
 k rh| |  d | d | ƒS| j r¢| ˆ  | k r…t St | ƒ ˆ  | k r½t Snt | t ƒ rqt ‡  f d †  | j Dƒ ƒ rqxê | j D] }	 |	 j r| ˆ  |	 k rýt St | ƒ ˆ  |	 k rjt SqÚt |	 t ƒ rÚ|	 j d	 j rÚ| ˆ  |	 k rMt St | ƒ ˆ  |	 k rjt SqÚqÚWnL t | t ƒ r½t | t ƒ r½| j d	 j r½| j d	 ˆ  | k r½t Sn  t | | | ƒ } | d
 k rñ| |  d | d | ƒS| S(   sº  
    Method for inferring properties about objects.

    **Syntax**

        * ask(proposition)

        * ask(proposition, assumptions)

            where ``proposition`` is any boolean expression

    Examples
    ========

    >>> from sympy import ask, Q, pi
    >>> from sympy.abc import x, y
    >>> ask(Q.rational(pi))
    False
    >>> ask(Q.even(x*y), Q.even(x) & Q.integer(y))
    True
    >>> ask(Q.prime(4*x), Q.integer(x))
    False

    **Remarks**
        Relations in assumptions are not implemented (yet), so the following
        will not give a meaningful result.

        >>> ask(Q.positive(x), Q.is_true(x > 0)) # doctest: +SKIP

        It is however a work in progress.

    iÿÿÿÿ(   t   satasks.   proposition must be a valid logical expressions.   assumptions must be a valid logical expressions   inconsistent assumptions %st   assumptionst   contextc         3  s   |  ] } | ˆ  k Vq d  S(   N(    (   RJ   t   k(   t   known_facts_dict(    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pys	   <genexpr>  s    i    N(   t   sympy.assumptions.sataskR[   RL   R   R   RP   R   t	   TypeErrorRS   R   RR   t   QR3   R
   R	   RM   t   get_known_facts_cnft   get_known_facts_dictR   RO   t
   ValueErrort	   _eval_askRI   t   is_Atomt   TrueR   RU   RT   R   t   ask_full_inference(
   t   propositionR\   R]   R[   t   keyRV   t   local_factst   known_facts_cnft   rest   assum(    (   R_   s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyt   ask¾  s\    !		!
		c         C  sB   t  t | | |  ƒ ƒ s t St  t | | t |  ƒ ƒ ƒ s> t Sd S(   s9   
    Method for inferring properties about objects.

    N(   R   R
   RO   R   Rh   RI   (   Rj   R\   Rm   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyRi     s
    c         C  so   t  |  ƒ t k r |  j }  n  t t |  d ƒ } | d k	 rL | j | ƒ n t t |  t |  d | g ƒƒ d S(   sŒ  
    Register a handler in the ask system. key must be a string and handler a
    class inheriting from AskHandler::

        >>> from sympy.assumptions import register_handler, ask, Q
        >>> from sympy.assumptions.handlers import AskHandler
        >>> class MersenneHandler(AskHandler):
        ...     # Mersenne numbers are in the form 2**n - 1, n integer
        ...     @staticmethod
        ...     def Integer(expr, assumptions):
        ...         from sympy import log
        ...         return ask(Q.integer(log(expr + 1, 2)))
        >>> register_handler('mersenne', MersenneHandler)
        >>> ask(Q.mersenne(7))
        True

    t   handlersN(   t   typeR   t   namet   getattrRb   RI   t   add_handlert   setattr(   Rk   t   handlert   Qkey(    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyt   register_handler+  s    c         C  s8   t  |  ƒ t k r |  j }  n  t t |  ƒ j | ƒ d S(   sF   Removes a handler from the ask system. Same syntax as register_handlerN(   Rr   R   Rs   Rt   Rb   t   remove_handler(   Rk   Rw   (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyRz   F  s    c         C  sn   i  } xa |  D]Y } | h | | <xC |  D]; } | | k r' t  | | | ƒ rb | | j | ƒ qb q' q' Wq W| S(   N(   Ri   t   add(   t   known_facts_keysRm   t   mappingRk   t	   other_key(    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyt   single_fact_lookupM  s    c      
   C  sD  d d l  m } m } | d ƒ } d } d } t |  ƒ } | j g  | j D] } t | ƒ ^ qJ ƒ }	 t | | ƒ }
 t |
 j	 ƒ  d t ƒ} g  | D] } t | d ƒ ^ q“ } g  | D]  } d	 t | d
 d t ƒ^ q¶ } | j g  t
 | | ƒ D]7 \ } } d j | d | | f d | d t ƒƒ ^ qò ƒ d } | |	 | f S(   s   Compute the various forms of knowledge compilation used by the
    assumptions system.

    This function is typically applied to the results of the ``get_known_facts``
    and ``get_known_facts_keys`` functions defined at the bottom of
    this file.
    iÿÿÿÿ(   t   dedentt   wraps[      """
    The contents of this file are the return value of
    ``sympy.assumptions.ask.compute_known_facts``.

    Do NOT manually edit this file.
    Instead, run ./bin/ask_update.py.
    """

    from sympy.core.cache import cacheit
    from sympy.logic.boolalg import And, Not, Or
    from sympy.assumptions.ask import Q

    # -{ Known facts in Conjunctive Normal Form }-
    @cacheit
    def get_known_facts_cnf():
        return And(
            %s
        )

    # -{ Known facts in compressed sets }-
    @cacheit
    def get_known_facts_dict():
        return {
            %s
        }
    s
   ,
        t    i   Rk   i    s   set(%s)i   s   
s   %s: %st   subsequent_indentt   break_long_wordst   ,s           (   t   textwrapR€   R   R	   t   joinRT   t   strR   t   sortedt   itemst   zipRO   (   t   known_factsR|   R€   R   t   fact_stringt   LINEt   HANGt   cnft   at   cR}   RŠ   t   it   keyst   valuesR^   t   vt   m(    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyt   compute_known_factsY  s    	+#-	Qs   sympy.assumptions.handlers.%sR   s   sets.AskAntiHermitianHandlerR#   s   calculus.AskFiniteHandlerR2   t   AskCommutativeHandlerR   s   sets.AskComplexHandlerR1   s   ntheory.AskCompositeHandlerR.   s   ntheory.AskEvenHandlerR   s   sets.AskExtendedRealHandlerR   s   sets.AskHermitianHandlerR   s   sets.AskImaginaryHandlerR    s   sets.AskIntegerHandlerR"   s   sets.AskIrrationalHandlerR!   s   sets.AskRationalHandlerR*   s   order.AskNegativeHandlerR+   s   order.AskNonZeroHandlerR,   s   order.AskNonPositiveHandlerR-   s   order.AskNonNegativeHandlerR(   s   order.AskZeroHandlerR)   s   order.AskPositiveHandlerR0   s   ntheory.AskPrimeHandlerR   s   sets.AskRealHandlerR/   s   ntheory.AskOddHandlerR   s   sets.AskAlgebraicHandlerR3   s   common.TautologicalHandlerR4   s   matrices.AskSymmetricHandlerR5   s   matrices.AskInvertibleHandlerR6   s   matrices.AskOrthogonalHandlerR7   s   matrices.AskUnitaryHandlerR8   s#   matrices.AskPositiveDefiniteHandlerR9   s"   matrices.AskUpperTriangularHandlerR:   s"   matrices.AskLowerTriangularHandlerR;   s   matrices.AskDiagonalHandlerR<   s   matrices.AskFullRankHandlerR=   s   matrices.AskSquareHandlerR>   s"   matrices.AskIntegerElementsHandlerR?   s   matrices.AskRealElementsHandlerR@   s"   matrices.AskComplexElementsHandlerc          C  sA   g  t  j j D]0 }  |  j d ƒ p+ |  t k s t t  |  ƒ ^ q S(   Nt   __(   Rb   t	   __class__t   __dict__t
   startswitht   deprecated_predicatesRt   (   t   attr(    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyt   get_known_facts_keys»  s    c        2   C  s×  t  t t j t j ƒ t t j t j ƒ t t j t j ƒ t t j	 t j t j Bƒ t t j
 t j Bt j ƒ t t j
 t j ƒ t t j t j t j @t j @ƒ t t j t j ƒ t t j t j ƒ t t j t j ƒ t t j t j Bt j ƒ t t j t j ƒ t t j t j t j @ƒ t t j t j ƒ t t j t j ƒ t t j t j Bt j ƒ t t j t j ƒ t t j t j
 ƒ t t j t j t j Bt j Bƒ t t j t j t j @ƒ t t j t j ƒ t t j t j t j Bƒ t t j t j t j Bƒ t t j t j t j Bƒ t t j t j ƒ t t j t j ƒ t t j t j @t j ƒ t t j t j ƒ t t j t j ƒ t t j t j  ƒ t t j! t j ƒ t t j t j ƒ t t j! t j" ƒ t t j! t j# ƒ t t j# t j$ ƒ t t j" t j$ ƒ t t j$ t j" t j# Bƒ t t j" t j# @t j! ƒ t t j! t j% ƒ t t j& t j$ ƒ t t j t j' ƒ t t j t j  ƒ t t j% t j  ƒ t t j' t j  @t j ƒ t t j t j( ƒ t t j) t j* ƒ t t j* t j+ ƒ ƒ/ S(   N(,   R
   R   Rb   R'   R#   R   R   R   R   R   R.   R/   R    R0   R)   R1   R!   R   R   R   R   R"   R(   R*   R-   R,   R+   R6   R8   R7   RB   R5   R=   R;   R9   R:   RC   R4   RD   R<   RA   R>   R?   R@   (    (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyt   get_known_factsÃ  s`    ! (   Rd   Rc   N(4   RG   t
   __future__R    R   t   sympy.assumptions.assumeR   R   R   t
   sympy.coreR   t   sympy.core.cacheR   t   sympy.core.decoratorsR   t   sympy.core.relationalR   t   sympy.logic.boolalgR	   R
   R   R   R   R   R   R   t   sympy.logic.inferenceR   t   sympy.utilities.decoratorR   Rž   t   predicate_storageRH   t   objectR   Rb   Rh   RM   Rp   Ri   Ry   Rz   R   R˜   t   _val_templatet	   _handlersRs   t   valueR    R¡   t   sympy.assumptions.ask_generatedRd   Rc   (    (    (    s4   lib/python2.7/site-packages/sympy/assumptions/ask.pyt   <module>   sŠ   :	ÿ ÿ ÿ ÿ €	!a					7																																			6