
    \hK                         S r SSKJrJrJr  SSKJrJrJr  SSK	J
r
  SSKJr  SSKJrJrJrJrJrJr  SSKJr  SSKJr  SS	KJrJrJr   " S
 S5      r\" 5       rS rS\4S jrS r S r!S r"SSK#J$r$J%r%  g)z4Module for querying SymPy objects about assumptions.    )global_assumptions	PredicateAppliedPredicate)CNF
EncodedCNFLiteral)sympify)BooleanKind)EqNeGtLtGeLe)satisfiable)memoize_property)sympy_deprecation_warningSymPyDeprecationWarningignore_warningsc                      \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S  5       r#\S! 5       r$\S" 5       r%\S# 5       r&\S$ 5       r'\S% 5       r(\S& 5       r)\S' 5       r*\S( 5       r+\S) 5       r,\S* 5       r-\S+ 5       r.\S, 5       r/\S- 5       r0\S. 5       r1\S/ 5       r2\S0 5       r3\S1 5       r4\S2 5       r5\S3 5       r6\S4 5       r7\S5 5       r8\S6 5       r9\S7 5       r:\S8 5       r;\S9 5       r<\S: 5       r=S;r>g<)=AssumptionKeys   zm
This class contains all the supported keys by ``ask``.
It should be accessed via the instance ``sympy.Q``.

c                     SSK Jn  U" 5       $ )N   )HermitianPredicate)handlers.setsr   )selfr   s     M/var/www/auris/envauris/lib/python3.13/site-packages/sympy/assumptions/ask.py	hermitianAssumptionKeys.hermitian        5!##    c                     SSK Jn  U" 5       $ )Nr   )AntihermitianPredicate)r   r$   )r   r$   s     r   antihermitianAssumptionKeys.antihermitian%   s    9%''r"   c                     SSK Jn  U" 5       $ )Nr   )RealPredicate)r   r(   )r   r(   s     r   realAssumptionKeys.real*   s    0r"   c                     SSK Jn  U" 5       $ )Nr   )ExtendedRealPredicate)r   r,   )r   r,   s     r   extended_realAssumptionKeys.extended_real/   s    8$&&r"   c                     SSK Jn  U" 5       $ )Nr   )ImaginaryPredicate)r   r0   )r   r0   s     r   	imaginaryAssumptionKeys.imaginary4   r!   r"   c                     SSK Jn  U" 5       $ )Nr   )ComplexPredicate)r   r4   )r   r4   s     r   complexAssumptionKeys.complex9       3!!r"   c                     SSK Jn  U" 5       $ )Nr   )AlgebraicPredicate)r   r9   )r   r9   s     r   	algebraicAssumptionKeys.algebraic>   r!   r"   c                     SSK Jn  U" 5       $ )Nr   )TranscendentalPredicate)predicates.setsr=   )r   r=   s     r   transcendentalAssumptionKeys.transcendentalC   s    <&((r"   c                     SSK Jn  U" 5       $ )Nr   )IntegerPredicate)r   rB   )r   rB   s     r   integerAssumptionKeys.integerH   r7   r"   c                     SSK Jn  U" 5       $ )Nr   )NonIntegerPredicate)r>   rF   )r   rF   s     r   
nonintegerAssumptionKeys.nonintegerM   s    8"$$r"   c                     SSK Jn  U" 5       $ )Nr   )RationalPredicate)r   rJ   )r   rJ   s     r   rationalAssumptionKeys.rationalR   s    4 ""r"   c                     SSK Jn  U" 5       $ )Nr   )IrrationalPredicate)r   rN   )r   rN   s     r   
irrationalAssumptionKeys.irrationalW   s    6"$$r"   c                     SSK Jn  U" 5       $ )Nr   )FinitePredicate)handlers.calculusrR   )r   rR   s     r   finiteAssumptionKeys.finite\       6  r"   c                     SSK Jn  U" 5       $ )Nr   )InfinitePredicate)rS   rX   )r   rX   s     r   infiniteAssumptionKeys.infinitea       8 ""r"   c                     SSK Jn  U" 5       $ )Nr   )PositiveInfinitePredicate)rS   r]   )r   r]   s     r   positive_infinite AssumptionKeys.positive_infinitef       @(**r"   c                     SSK Jn  U" 5       $ )Nr   )NegativeInfinitePredicate)rS   rb   )r   rb   s     r   negative_infinite AssumptionKeys.negative_infinitek   r`   r"   c                     SSK Jn  U" 5       $ )Nr   )PositivePredicate)handlers.orderrf   )r   rf   s     r   positiveAssumptionKeys.positivep       5 ""r"   c                     SSK Jn  U" 5       $ )Nr   )NegativePredicate)rg   rl   )r   rl   s     r   negativeAssumptionKeys.negativeu   rj   r"   c                     SSK Jn  U" 5       $ )Nr   )ZeroPredicate)rg   rp   )r   rp   s     r   zeroAssumptionKeys.zeroz   s    1r"   c                     SSK Jn  U" 5       $ )Nr   )ExtendedPositivePredicate)rg   rt   )r   rt   s     r   extended_positive AssumptionKeys.extended_positive       =(**r"   c                     SSK Jn  U" 5       $ )Nr   )ExtendedNegativePredicate)rg   ry   )r   ry   s     r   extended_negative AssumptionKeys.extended_negative   rw   r"   c                     SSK Jn  U" 5       $ )Nr   )NonZeroPredicate)rg   r}   )r   r}   s     r   nonzeroAssumptionKeys.nonzero   s    4!!r"   c                     SSK Jn  U" 5       $ )Nr   )NonPositivePredicate)rg   r   )r   r   s     r   nonpositiveAssumptionKeys.nonpositive       8#%%r"   c                     SSK Jn  U" 5       $ )Nr   )NonNegativePredicate)rg   r   )r   r   s     r   nonnegativeAssumptionKeys.nonnegative   r   r"   c                     SSK Jn  U" 5       $ )Nr   )ExtendedNonZeroPredicate)rg   r   )r   r   s     r   extended_nonzeroAssumptionKeys.extended_nonzero   s    <'))r"   c                     SSK Jn  U" 5       $ )Nr   )ExtendedNonPositivePredicate)rg   r   )r   r   s     r   extended_nonpositive#AssumptionKeys.extended_nonpositive       @+--r"   c                     SSK Jn  U" 5       $ )Nr   )ExtendedNonNegativePredicate)rg   r   )r   r   s     r   extended_nonnegative#AssumptionKeys.extended_nonnegative   r   r"   c                     SSK Jn  U" 5       $ )Nr   )EvenPredicate)handlers.ntheoryr   )r   r   s     r   evenAssumptionKeys.even   s    3r"   c                     SSK Jn  U" 5       $ )Nr   )OddPredicate)r   r   )r   r   s     r   oddAssumptionKeys.odd   s    2~r"   c                     SSK Jn  U" 5       $ )Nr   )PrimePredicate)r   r   )r   r   s     r   primeAssumptionKeys.prime   s    4r"   c                     SSK Jn  U" 5       $ )Nr   )CompositePredicate)r   r   )r   r   s     r   	compositeAssumptionKeys.composite   s    8!##r"   c                     SSK Jn  U" 5       $ )Nr   )CommutativePredicate)handlers.commonr   )r   r   s     r   commutativeAssumptionKeys.commutative   s    9#%%r"   c                     SSK Jn  U" 5       $ )Nr   )IsTruePredicate)r   r   )r   r   s     r   is_trueAssumptionKeys.is_true   s    4  r"   c                     SSK Jn  U" 5       $ )Nr   )SymmetricPredicate)handlers.matricesr   )r   r   s     r   	symmetricAssumptionKeys.symmetric   s    9!##r"   c                     SSK Jn  U" 5       $ )Nr   )InvertiblePredicate)r   r   )r   r   s     r   
invertibleAssumptionKeys.invertible       :"$$r"   c                     SSK Jn  U" 5       $ )Nr   )OrthogonalPredicate)r   r   )r   r   s     r   
orthogonalAssumptionKeys.orthogonal   r   r"   c                     SSK Jn  U" 5       $ )Nr   )UnitaryPredicate)r   r   )r   r   s     r   unitaryAssumptionKeys.unitary   s    7!!r"   c                     SSK Jn  U" 5       $ )Nr   )PositiveDefinitePredicate)r   r   )r   r   s     r   positive_definite AssumptionKeys.positive_definite   r`   r"   c                     SSK Jn  U" 5       $ )Nr   )UpperTriangularPredicate)r   r   )r   r   s     r   upper_triangularAssumptionKeys.upper_triangular       ?'))r"   c                     SSK Jn  U" 5       $ )Nr   )LowerTriangularPredicate)r   r   )r   r   s     r   lower_triangularAssumptionKeys.lower_triangular   r   r"   c                     SSK Jn  U" 5       $ )Nr   )DiagonalPredicate)r   r   )r   r   s     r   diagonalAssumptionKeys.diagonal   r[   r"   c                     SSK Jn  U" 5       $ )Nr   )FullRankPredicate)r   r   )r   r   s     r   fullrankAssumptionKeys.fullrank   r[   r"   c                     SSK Jn  U" 5       $ )Nr   )SquarePredicate)r   r   )r   r   s     r   squareAssumptionKeys.square   rV   r"   c                     SSK Jn  U" 5       $ )Nr   )IntegerElementsPredicate)r   r   )r   r   s     r   integer_elementsAssumptionKeys.integer_elements   r   r"   c                     SSK Jn  U" 5       $ )Nr   )RealElementsPredicate)r   r   )r   r   s     r   real_elementsAssumptionKeys.real_elements   s    <$&&r"   c                     SSK Jn  U" 5       $ )Nr   )ComplexElementsPredicate)r   r   )r   r   s     r   complex_elementsAssumptionKeys.complex_elements  r   r"   c                     SSK Jn  U" 5       $ )Nr   )SingularPredicate)predicates.matricesr   )r   r   s     r   singularAssumptionKeys.singular  s    : ""r"   c                     SSK Jn  U" 5       $ )Nr   )NormalPredicate)r   r   )r   r   s     r   normalAssumptionKeys.normal  s    8  r"   c                     SSK Jn  U" 5       $ )Nr   )TriangularPredicate)r   r   )r   r   s     r   
triangularAssumptionKeys.triangular  s    <"$$r"   c                     SSK Jn  U" 5       $ )Nr   )UnitTriangularPredicate)r   r   )r   r   s     r   unit_triangularAssumptionKeys.unit_triangular  s    @&((r"   c                     SSK Jn  U" 5       $ )Nr   )EqualityPredicate)relation.equalityr   )r   r   s     r   eqAssumptionKeys.eq  r[   r"   c                     SSK Jn  U" 5       $ )Nr   )UnequalityPredicate)r   r   )r   r   s     r   neAssumptionKeys.ne  r   r"   c                     SSK Jn  U" 5       $ )Nr   )StrictGreaterThanPredicate)r   r  )r   r  s     r   gtAssumptionKeys.gt$  s    A)++r"   c                     SSK Jn  U" 5       $ )Nr   )GreaterThanPredicate)r   r  )r   r  s     r   geAssumptionKeys.ge)  s    ;#%%r"   c                     SSK Jn  U" 5       $ )Nr   )StrictLessThanPredicate)r   r
  )r   r
  s     r   ltAssumptionKeys.lt.  s    >&((r"   c                     SSK Jn  U" 5       $ )Nr   )LessThanPredicate)r   r  )r   r  s     r   leAssumptionKeys.le3  r[   r"    N)?__name__
__module____qualname____firstlineno____doc__r   r   r%   r)   r-   r1   r5   r:   r?   rC   rG   rK   rO   rT   rY   r^   rc   rh   rm   rq   ru   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  __static_attributes__r  r"   r   r   r      sg    $ $ ( (   ' ' $ $ " " $ $ ) ) " " % % # # % % ! ! # # + + + + # # # #   + + + + " " & & & & * * . . . .         $ $ & & ! ! $ $ % % % % " " + + * * * * # # # # ! ! * * ' ' * * # # ! ! % % ) ) # # % % , , & & ) ) # #r"   r   c                    [        5       nU R                   H  n/ nU H  n[        UR                  [        5      (       a{  [        UR                  R                  5      S:X  aX  UR                  R                  U;   a;  UR                  [        UR                  R                  UR                  5      5        M    M    M     U(       d  M  UR                  [        U5      5        M     [        U5      $ )a3  
Extract all relevant assumptions from *assump* with respect to given *exprs*.

Parameters
==========

assump : sympy.assumptions.cnf.CNF

exprs : tuple of expressions

Returns
=======

sympy.assumptions.cnf.CNF

Examples
========

>>> from sympy import Q
>>> from sympy.assumptions.cnf import CNF
>>> from sympy.assumptions.ask import _extract_all_facts
>>> from sympy.abc import x, y
>>> assump = CNF.from_prop(Q.positive(x) & Q.integer(y))
>>> exprs = (x,)
>>> cnf = _extract_all_facts(assump, exprs)
>>> cnf.clauses
{frozenset({Literal(Q.positive, False)})}

r   )setclauses
isinstancelitr   len	argumentsargappendr   functionis_Notadd	frozensetr   )assumpexprsfactsclauseargsliterals         r   _extract_all_factsr+  ;  s    < EE..G'++'788SAVAV=W[\=\;;??e+KK(<(<gnn MN    t		)D/*! !" u:r"   Tc                    SSK Jn  SSKJn  SSKJn  [        U 5      n [        U5      n[        U [        5      (       d  U R                  [        La  [        S5      e[        U[        5      (       d  UR                  [        La  [        S5      e[        [        R                  [        [        R                   ["        [        R$                  [&        [        R(                  [*        [        R,                  [.        [        R0                  0n[        U [2        5      (       a  U R4                  U R6                  pO<U R8                  U;   a  U[;        U 5         U R<                  pO[        R>                  U 4p[@        RB                  " U5      n	U	RE                  U5        [G        X5      n
[I        5       n[K        5       nURM                  [A        U5      5        URO                  U
5        U
RP                  (       a  [S        U5      SL a  [U        SU-  5      e[W        Xz5      nUb  U$ U" U6 RY                  U5      nUb  [[        U5      $ U" XUS
9nUb  U$  U" XUS
9nU$ ! U a     g	f = f)a  
Function to evaluate the proposition with assumptions.

Explanation
===========

This function evaluates the proposition to ``True`` or ``False`` if
the truth value can be determined. If not, it returns ``None``.

It should be discerned from :func:`~.refine` which, when applied to a
proposition, simplifies the argument to symbolic ``Boolean`` instead of
Python built-in ``True``, ``False`` or ``None``.

**Syntax**

    * ask(proposition)
        Evaluate the *proposition* in global assumption context.

    * ask(proposition, assumptions)
        Evaluate the *proposition* with respect to *assumptions* in
        global assumption context.

Parameters
==========

proposition : Boolean
    Proposition which will be evaluated to boolean value. If this is
    not ``AppliedPredicate``, it will be wrapped by ``Q.is_true``.

assumptions : Boolean, optional
    Local assumptions to evaluate the *proposition*.

context : AssumptionsContext, optional
    Default assumptions to evaluate the *proposition*. By default,
    this is ``sympy.assumptions.global_assumptions`` variable.

Returns
=======

``True``, ``False``, or ``None``

Raises
======

TypeError : *proposition* or *assumptions* is not valid logical expression.

ValueError : assumptions are inconsistent.

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

If the truth value cannot be determined, ``None`` will be returned.

>>> print(ask(Q.odd(3*x))) # cannot determine unless we know x
None

``ValueError`` is raised if assumptions are inconsistent.

>>> ask(Q.integer(x), Q.even(x) & Q.odd(x))
Traceback (most recent call last):
  ...
ValueError: inconsistent assumptions Q.even(x) & Q.odd(x)

Notes
=====

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

>>> ask(Q.positive(x), x > 0)

It is however a work in progress.

See Also
========

sympy.assumptions.refine.refine : Simplification using assumptions.
    Proposition is not reduced to ``None`` if the truth value cannot
    be determined.
r   )satask)
lra_satask)UnhandledInputz.proposition must be a valid logical expressionz.assumptions must be a valid logical expressionFzinconsistent assumptions %sN)assumptionscontext).sympy.assumptions.sataskr-  sympy.assumptions.lra_sataskr.  !sympy.logic.algorithms.lra_theoryr/  r	   r  r   kindr
   	TypeErrorr   Qr   r   r   r   r  r   r  r   r  r   r  r   r!  r  functyper)  r   r   	from_propextendr+  get_all_known_factsr   from_cnfadd_from_cnfr  r   
ValueError_ask_single_fact	_eval_askbool)propositionr0  r1  r-  r.  r/  binrelpredskeyr)  
assump_cnflocal_factsknown_facts_cnfenc_cnfress                 r   askrK  o  s   t 07@+&K+&K+y))[-=-=[-PHII+y))[-=-=[-PHIIqttRr144QTT2qttRNK+/00((+*?*?T			[	([ 12K4D4DTII~T {+Jg %Z6K *+OlGS)*% {73u<6DEE 3
,C

 t*

{
+C
Cy w
GC

wO J  s   I I! I!c                    UR                   (       a  [        5       n[        UR                   5      S:X  ag  UR                   u  n[        U5      S:X  aJ  Uu  nUR                  U S5      nUb  US   O	[	        5       nUR
                  (       a  UR                  U;   a  gUR                    H^  n[        U5      S:X  d  M  Uu  nUR
                  (       d  UR                  UR                  S5      OSnUc  ML  Uu  phX;   a    gX;   d  M^    g   g)aE  
Compute the truth value of single predicate using assumptions.

Parameters
==========

key : sympy.assumptions.assume.Predicate
    Proposition predicate.

local_facts : sympy.assumptions.cnf.CNF
    Local assumption in CNF form.

Returns
=======

``True``, ``False`` or ``None``

Examples
========

>>> from sympy import Q
>>> from sympy.assumptions.cnf import CNF
>>> from sympy.assumptions.ask import _ask_single_fact

If prerequisite of proposition is rejected by the assumption,
return ``False``.

>>> key, assump = Q.zero, ~Q.zero
>>> local_facts = CNF.from_prop(assump)
>>> _ask_single_fact(key, local_facts)
False
>>> key, assump = Q.zero, ~Q.even
>>> local_facts = CNF.from_prop(assump)
>>> _ask_single_fact(key, local_facts)
False

If assumption implies the proposition, return ``True``.

>>> key, assump = Q.even, Q.zero
>>> local_facts = CNF.from_prop(assump)
>>> _ask_single_fact(key, local_facts)
True

If proposition rejects the assumption, return ``False``.

>>> key, assump = Q.even, Q.odd
>>> local_facts = CNF.from_prop(assump)
>>> _ask_single_fact(key, local_facts)
False
r   Nr   FT)r  get_known_facts_dictr  getr  r"  r  )	rE  rG  known_facts_dictclf
prop_factsprop_reqr(  prop_rejs	            r   r@  r@    s    f /1{""#q(%%CB2w!|-11#t<
,6,B:a=88 1 !))F6{aFGhh-11!%%>TX
%%/"?_  * r"   c           	          [        SSSS9  [        U [        5      (       a  U R                  R                  n [	        [
        U S5      nUb  UR                  U5        g[        [
        U [        X/S95        g)z
Register a handler in the ask system. key must be a string and handler a
class inheriting from AskHandler.

.. deprecated:: 1.8.
    Use multipledispatch handler instead. See :obj:`~.Predicate`.

z
        The AskHandler system is deprecated. The register_handler() function
        should be replaced with the multipledispatch handler of Predicate.
        1.8deprecated-askhandlerdeprecated_since_versionactive_deprecations_targetN)handlers)r   r  r   namegetattrr7  add_handlersetattr)rE  handlerQkeys      r   register_handlerrb  Y  sj     	 "'#: #y!!hhmm1c4 D!3	#	:;r"   c                     [        SSSS9  [        U [        5      (       a  U R                  R                  n [	        [
        5         [        [        U 5      R                  U5        SSS5        g! , (       d  f       g= f)z
Removes a handler from the ask system.

.. deprecated:: 1.8.
    Use multipledispatch handler instead. See :obj:`~.Predicate`.

z
        The AskHandler system is deprecated. The remove_handler() function
        should be replaced with the multipledispatch handler of Predicate.
        rV  rW  rX  N)	r   r  r   r\  r   r   r]  r7  remove_handler)rE  r`  s     r   rd  rd  s  s^     	 "'#: #y!!hhmm	0	13&&w/ 
2	1	1s    A//
A=)r<  rM  N)&r  sympy.assumptions.assumer   r   r   sympy.assumptions.cnfr   r   r   
sympy.corer	   sympy.core.kindr
   sympy.core.relationalr   r   r   r   r   r   sympy.logic.inferencer   sympy.utilities.decoratorr   sympy.utilities.exceptionsr   r   r   r   r7  r+  rK  r@  rb  rd  sympy.assumptions.ask_generatedr<  rM  r  r"   r   <module>rn     s{    :  : :  ' 8 8 - 69 9a# a#H	 1h "&/A TnPf<40. r"   