ó
    ˆ*£h°K  ã                   óì   • 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     ÚR/home/mande/repo/quber/.venv/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¯   € ô< ‹E€Eà—.”.ˆØˆÛˆGÜ˜'Ÿ+™+Ô'7×8Ñ8¼SÀÇÁ×AVÑAVÓ=WÐ[\Ó=\Ø—;‘;—?‘? eÓ+à—K‘K¤¨¯©×(<Ñ(<¸g¿n¹nÓ 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                  p‡O<U R8                  U;   a  U[;        U 5         U R<                  p‡O[        R>                  U 4p‡[@        RB                  " U5      n	U	RE                  U5        [G        X˜5      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ä”q—t‘tœR¤§¡¤r¬1¯4©4´´Q·T±T¼2¼q¿t¹tÄRÌÏÉÐN€KÜ�+Ô/×0Ñ0Ø×(Ñ(¨+×*?Ñ*?‰TØ	×	Ñ	˜[Ó	(Ø¤ [Ó 1Ñ2°K×4DÑ4D‰Tä—I‘I ˜~ˆTô —’˜{Ó+€JØ×Ñ�gÔô % ZÓ6€Kô *Ó+€OÜ‹l€GØ×Ñ”S˜Ó)Ô*Ø×Ñ˜Ô%ð ××œ{¨7Ó3°uÒ<ÜÐ6¸ÑDÓEÐEô ˜3Ó
,€CØ
�Øˆ
ñ ˆtˆ*×
Ñ
˜{Ó
+€CØ
�Ü�C‹yÐñ �¸wÑ
G€CØ
�Øˆ
ðÙ˜À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Ó(Ø×%Ñ%‰CˆBÜ�2‹w˜!‹|Ø‘�Ø-×1Ñ1°#°tÓ<�
Ø,6Ñ,B˜: aš=ÌË�Ø—8—8 §¡¨Ó 1à à!×)Ô)ˆFÜ�6‹{˜aÕØ‘�ØFGÇhÇhÐ-×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×!Ñ!Ø�h‰h�m‰mˆÜ”1�c˜4Ó €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×!Ñ!Ø�h‰h�m‰mˆä	Ô0Õ	1Ü”�3‹×&Ñ& wÔ/÷ 
2×	1Ö	1ús   Á 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"   