+
    ‹°³j°K  ã                   óî   € R t ^ RIHtHtHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHt ^ RIHtHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHtHtHt  ! R	 R
4      t]! 4       tR tR]3R ltR t R t!R t"^ RI#H$t$H%t% R# )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                   ó¤  a € ] tR t^t o Rt]R 4       t]R 4       t]R 4       t]R 4       t	]R 4       t
]R 4       t]R 4       t]R	 4       t]R
 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t ]R 4       t!]R 4       t"]R 4       t#]R  4       t$]R! 4       t%]R" 4       t&]R# 4       t']R$ 4       t(]R% 4       t)]R& 4       t*]R' 4       t+]R( 4       t,]R) 4       t-]R* 4       t.]R+ 4       t/]R, 4       t0]R- 4       t1]R. 4       t2]R/ 4       t3]R0 4       t4]R1 4       t5]R2 4       t6]R3 4       t7]R4 4       t8]R5 4       t9]R6 4       t:]R7 4       t;]R8 4       t<]R9 4       t=R:t>V t?R;# )<ÚAssumptionKeyszm
This class contains all the supported keys by ``ask``.
It should be accessed via the instance ``sympy.Q``.

c                ó   € ^RI Hp V! 4       # )é   )ÚHermitianPredicate)Úhandlers.setsr   )Úselfr   s   & ÚV/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/assumptions/ask.pyÚ	hermitianÚAssumptionKeys.hermitian    ó   € å5Ù!Ó#Ð#ó    c                ó   € ^RI Hp V! 4       # )r   )ÚAntihermitianPredicate)r   r"   )r   r"   s   & r   ÚantihermitianÚAssumptionKeys.antihermitian%   s   € å9Ù%Ó'Ð'r    c                ó   € ^RI Hp V! 4       # )r   )ÚRealPredicate)r   r&   )r   r&   s   & r   ÚrealÚAssumptionKeys.real*   s   € å0Ù‹Ðr    c                ó   € ^RI Hp V! 4       # )r   )ÚExtendedRealPredicate)r   r*   )r   r*   s   & r   Úextended_realÚAssumptionKeys.extended_real/   s   € å8Ù$Ó&Ð&r    c                ó   € ^RI Hp V! 4       # )r   )ÚImaginaryPredicate)r   r.   )r   r.   s   & r   Ú	imaginaryÚAssumptionKeys.imaginary4   r   r    c                ó   € ^RI Hp V! 4       # )r   )ÚComplexPredicate)r   r2   )r   r2   s   & r   ÚcomplexÚAssumptionKeys.complex9   ó   € å3ÙÓ!Ð!r    c                ó   € ^RI Hp V! 4       # )r   )ÚAlgebraicPredicate)r   r7   )r   r7   s   & r   Ú	algebraicÚAssumptionKeys.algebraic>   r   r    c                ó   € ^RI Hp V! 4       # )r   )ÚTranscendentalPredicate)Úpredicates.setsr;   )r   r;   s   & r   ÚtranscendentalÚAssumptionKeys.transcendentalC   s   € å<Ù&Ó(Ð(r    c                ó   € ^RI Hp V! 4       # )r   )ÚIntegerPredicate)r   r@   )r   r@   s   & r   ÚintegerÚAssumptionKeys.integerH   r5   r    c                ó   € ^RI Hp V! 4       # )r   )ÚNonIntegerPredicate)r<   rD   )r   rD   s   & r   Ú
nonintegerÚAssumptionKeys.nonintegerM   s   € å8Ù"Ó$Ð$r    c                ó   € ^RI Hp V! 4       # )r   )ÚRationalPredicate)r   rH   )r   rH   s   & r   ÚrationalÚAssumptionKeys.rationalR   s   € å4Ù Ó"Ð"r    c                ó   € ^RI Hp V! 4       # )r   )ÚIrrationalPredicate)r   rL   )r   rL   s   & r   Ú
irrationalÚAssumptionKeys.irrationalW   s   € å6Ù"Ó$Ð$r    c                ó   € ^RI Hp V! 4       # )r   )ÚFinitePredicate)Úhandlers.calculusrP   )r   rP   s   & r   ÚfiniteÚAssumptionKeys.finite\   ó   € å6ÙÓ Ð r    c                ó   € ^RI Hp V! 4       # )r   )ÚInfinitePredicate)rQ   rV   )r   rV   s   & r   ÚinfiniteÚAssumptionKeys.infinitea   ó   € å8Ù Ó"Ð"r    c                ó   € ^RI Hp V! 4       # )r   )ÚPositiveInfinitePredicate)rQ   r[   )r   r[   s   & r   Úpositive_infiniteÚ AssumptionKeys.positive_infinitef   ó   € å@Ù(Ó*Ð*r    c                ó   € ^RI Hp V! 4       # )r   )ÚNegativeInfinitePredicate)rQ   r`   )r   r`   s   & r   Únegative_infiniteÚ AssumptionKeys.negative_infinitek   r^   r    c                ó   € ^RI Hp V! 4       # )r   )ÚPositivePredicate)Úhandlers.orderrd   )r   rd   s   & r   ÚpositiveÚAssumptionKeys.positivep   ó   € å5Ù Ó"Ð"r    c                ó   € ^RI Hp V! 4       # )r   )ÚNegativePredicate)re   rj   )r   rj   s   & r   ÚnegativeÚAssumptionKeys.negativeu   rh   r    c                ó   € ^RI Hp V! 4       # )r   )ÚZeroPredicate)re   rn   )r   rn   s   & r   ÚzeroÚAssumptionKeys.zeroz   s   € å1Ù‹Ðr    c                ó   € ^RI Hp V! 4       # )r   )ÚExtendedPositivePredicate)re   rr   )r   rr   s   & r   Úextended_positiveÚ AssumptionKeys.extended_positive   ó   € å=Ù(Ó*Ð*r    c                ó   € ^RI Hp V! 4       # )r   )ÚExtendedNegativePredicate)re   rw   )r   rw   s   & r   Úextended_negativeÚ AssumptionKeys.extended_negative„   ru   r    c                ó   € ^RI Hp V! 4       # )r   )ÚNonZeroPredicate)re   r{   )r   r{   s   & r   ÚnonzeroÚAssumptionKeys.nonzero‰   s   € å4ÙÓ!Ð!r    c                ó   € ^RI Hp V! 4       # )r   )ÚNonPositivePredicate)re   r   )r   r   s   & r   ÚnonpositiveÚAssumptionKeys.nonpositiveŽ   ó   € å8Ù#Ó%Ð%r    c                ó   € ^RI Hp V! 4       # )r   )ÚNonNegativePredicate)re   r„   )r   r„   s   & r   ÚnonnegativeÚAssumptionKeys.nonnegative“   r‚   r    c                ó   € ^RI Hp V! 4       # )r   )ÚExtendedNonZeroPredicate)re   rˆ   )r   rˆ   s   & r   Úextended_nonzeroÚAssumptionKeys.extended_nonzero˜   s   € å<Ù'Ó)Ð)r    c                ó   € ^RI Hp V! 4       # )r   )ÚExtendedNonPositivePredicate)re   rŒ   )r   rŒ   s   & r   Úextended_nonpositiveÚ#AssumptionKeys.extended_nonpositive�   ó   € å@Ù+Ó-Ð-r    c                ó   € ^RI Hp V! 4       # )r   )ÚExtendedNonNegativePredicate)re   r‘   )r   r‘   s   & r   Úextended_nonnegativeÚ#AssumptionKeys.extended_nonnegative¢   r�   r    c                ó   € ^RI Hp V! 4       # )r   )ÚEvenPredicate)Úhandlers.ntheoryr•   )r   r•   s   & r   ÚevenÚAssumptionKeys.even§   s   € å3Ù‹Ðr    c                ó   € ^RI Hp V! 4       # )r   )ÚOddPredicate)r–   rš   )r   rš   s   & r   ÚoddÚAssumptionKeys.odd¬   s   € å2Ù‹~Ðr    c                ó   € ^RI Hp V! 4       # )r   )ÚPrimePredicate)r–   rž   )r   rž   s   & r   ÚprimeÚAssumptionKeys.prime±   s   € å4ÙÓÐr    c                ó   € ^RI Hp V! 4       # )r   )ÚCompositePredicate)r–   r¢   )r   r¢   s   & r   Ú	compositeÚAssumptionKeys.composite¶   s   € å8Ù!Ó#Ð#r    c                ó   € ^RI Hp V! 4       # )r   )ÚCommutativePredicate)Úhandlers.commonr¦   )r   r¦   s   & r   ÚcommutativeÚAssumptionKeys.commutative»   s   € å9Ù#Ó%Ð%r    c                ó   € ^RI Hp V! 4       # )r   )ÚIsTruePredicate)r§   r«   )r   r«   s   & r   Úis_trueÚAssumptionKeys.is_trueÀ   s   € å4ÙÓ Ð r    c                ó   € ^RI Hp V! 4       # )r   )ÚSymmetricPredicate)Úhandlers.matricesr¯   )r   r¯   s   & r   Ú	symmetricÚAssumptionKeys.symmetricÅ   s   € å9Ù!Ó#Ð#r    c                ó   € ^RI Hp V! 4       # )r   )ÚInvertiblePredicate)r°   r´   )r   r´   s   & r   Ú
invertibleÚAssumptionKeys.invertibleÊ   ó   € å:Ù"Ó$Ð$r    c                ó   € ^RI Hp V! 4       # )r   )ÚOrthogonalPredicate)r°   r¹   )r   r¹   s   & r   Ú
orthogonalÚAssumptionKeys.orthogonalÏ   r·   r    c                ó   € ^RI Hp V! 4       # )r   )ÚUnitaryPredicate)r°   r½   )r   r½   s   & r   ÚunitaryÚAssumptionKeys.unitaryÔ   s   € å7ÙÓ!Ð!r    c                ó   € ^RI Hp V! 4       # )r   )ÚPositiveDefinitePredicate)r°   rÁ   )r   rÁ   s   & r   Úpositive_definiteÚ AssumptionKeys.positive_definiteÙ   r^   r    c                ó   € ^RI Hp V! 4       # )r   )ÚUpperTriangularPredicate)r°   rÅ   )r   rÅ   s   & r   Úupper_triangularÚAssumptionKeys.upper_triangularÞ   ó   € å?Ù'Ó)Ð)r    c                ó   € ^RI Hp V! 4       # )r   )ÚLowerTriangularPredicate)r°   rÊ   )r   rÊ   s   & r   Úlower_triangularÚAssumptionKeys.lower_triangularã   rÈ   r    c                ó   € ^RI Hp V! 4       # )r   )ÚDiagonalPredicate)r°   rÎ   )r   rÎ   s   & r   ÚdiagonalÚAssumptionKeys.diagonalè   rY   r    c                ó   € ^RI Hp V! 4       # )r   )ÚFullRankPredicate)r°   rÒ   )r   rÒ   s   & r   ÚfullrankÚAssumptionKeys.fullrankí   rY   r    c                ó   € ^RI Hp V! 4       # )r   )ÚSquarePredicate)r°   rÖ   )r   rÖ   s   & r   ÚsquareÚAssumptionKeys.squareò   rT   r    c                ó   € ^RI Hp V! 4       # )r   )ÚIntegerElementsPredicate)r°   rÚ   )r   rÚ   s   & r   Úinteger_elementsÚAssumptionKeys.integer_elements÷   rÈ   r    c                ó   € ^RI Hp V! 4       # )r   )ÚRealElementsPredicate)r°   rÞ   )r   rÞ   s   & r   Úreal_elementsÚAssumptionKeys.real_elementsü   s   € å<Ù$Ó&Ð&r    c                ó   € ^RI Hp V! 4       # )r   )ÚComplexElementsPredicate)r°   râ   )r   râ   s   & r   Úcomplex_elementsÚAssumptionKeys.complex_elements  rÈ   r    c                ó   € ^RI Hp V! 4       # )r   )ÚSingularPredicate)Úpredicates.matricesræ   )r   ræ   s   & r   ÚsingularÚAssumptionKeys.singular  s   € å:Ù Ó"Ð"r    c                ó   € ^RI Hp V! 4       # )r   )ÚNormalPredicate)rç   rë   )r   rë   s   & r   ÚnormalÚAssumptionKeys.normal  s   € å8ÙÓ Ð r    c                ó   € ^RI Hp V! 4       # )r   )ÚTriangularPredicate)rç   rï   )r   rï   s   & r   Ú
triangularÚAssumptionKeys.triangular  s   € å<Ù"Ó$Ð$r    c                ó   € ^RI Hp V! 4       # )r   )ÚUnitTriangularPredicate)rç   ró   )r   ró   s   & r   Úunit_triangularÚAssumptionKeys.unit_triangular  s   € å@Ù&Ó(Ð(r    c                ó   € ^RI Hp V! 4       # )r   )ÚEqualityPredicate)Úrelation.equalityr÷   )r   r÷   s   & r   ÚeqÚAssumptionKeys.eq  rY   r    c                ó   € ^RI Hp V! 4       # )r   )ÚUnequalityPredicate)rø   rü   )r   rü   s   & r   ÚneÚAssumptionKeys.ne  r·   r    c                ó   € ^RI Hp V! 4       # )r   )ÚStrictGreaterThanPredicate)rø   r   )r   r   s   & r   ÚgtÚAssumptionKeys.gt$  s   € åAÙ)Ó+Ð+r    c                ó   € ^RI Hp V! 4       # )r   )ÚGreaterThanPredicate)rø   r  )r   r  s   & r   ÚgeÚAssumptionKeys.ge)  s   € å;Ù#Ó%Ð%r    c                ó   € ^RI Hp V! 4       # )r   )ÚStrictLessThanPredicate)rø   r  )r   r  s   & r   ÚltÚAssumptionKeys.lt.  s   € å>Ù&Ó(Ð(r    c                ó   € ^RI Hp V! 4       # )r   )ÚLessThanPredicate)rø   r  )r   r  s   & r   ÚleÚAssumptionKeys.le3  rY   r    © N)@Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r#   r'   r+   r/   r3   r8   r=   rA   rE   rI   rM   rR   rW   r\   ra   rf   rk   ro   rs   rx   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__Ú__classdictcell__)Ú__classdict__s   @r   r   r      sj  ø‡ € ñð ñ$ó ð$ð ñ(ó ð(ð ñó ðð ñ'ó ð'ð ñ$ó ð$ð ñ"ó ð"ð ñ$ó ð$ð ñ)ó ð)ð ñ"ó ð"ð ñ%ó ð%ð ñ#ó ð#ð ñ%ó ð%ð ñ!ó ð!ð ñ#ó ð#ð ñ+ó ð+ð ñ+ó ð+ð ñ#ó ð#ð ñ#ó ð#ð ñó ðð ñ+ó ð+ð ñ+ó ð+ð ñ"ó ð"ð ñ&ó ð&ð ñ&ó ð&ð ñ*ó ð*ð ñ.ó ð.ð ñ.ó ð.ð ñó ðð ñó ðð ñ ó ð ð ñ$ó ð$ð ñ&ó ð&ð ñ!ó ð!ð ñ$ó ð$ð ñ%ó ð%ð ñ%ó ð%ð ñ"ó ð"ð ñ+ó ð+ð ñ*ó ð*ð ñ*ó ð*ð ñ#ó ð#ð ñ#ó ð#ð ñ!ó ð!ð ñ*ó ð*ð ñ'ó ð'ð ñ*ó ð*ð ñ#ó ð#ð ñ!ó ð!ð ñ%ó ð%ð ñ)ó ð)ð ñ#ó ð#ð ñ%ó ð%ð ñ,ó ð,ð ñ&ó ð&ð ñ)ó ð)ð ñ#ó ö#r    r   c                óì  € \        4       pV P                   FÐ  p. pV F¡  p\        VP                  \        4      '       d~   \        VP                  P                  4      ^8X  dZ   VP                  P                  V9   d<   VP                  \        VP                  P                  VP                  4      4       K�   K§   Kª  	  V'       g   K¶  VP                  \        V4      4       KÒ  	  \        V4      # )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)})}

)Ú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                ó   € ^ RI Hp ^ RIHp ^ RIHp \        V 4      p \        V4      p\        V \        4      '       g   V P                  \        Jd   \        R4      h\        V\        4      '       g   VP                  \        Jd   \        R4      h\        \        P                  \        \        P                   \"        \        P$                  \&        \        P(                  \*        \        P,                  \.        \        P0                  /p\        V \2        4      '       d   V P4                  V P6                  r‡MAV P8                  V9   d   V\;        V 4      ,          V P<                  r‡M\        P>                  V 3r‡\@        PB                  ! V4      p	V	PE                  V4       \G        W˜4      p
\I        4       p\K        4       pVPM                  \A        V4      4       VPO                  V
4       V
PP                  '       d"   \S        V4      RJ d   \U        RV,          4      h\W        Wz4      pVe   V# V! V!  PY                  V4      pVe   \[        V4      # V! WVR	7      pVe   V#  V! WVR	7      pV#   T d     R# i ; i)
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.
)Ú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   É&
I2 É2I=É<I=c                ó>  € VP                   '       Ed
   \        4       p\        VP                   4      ^8X  dq   VP                   w  p\        V4      ^8X  dS   Vw  pVP                  V R4      pVe
   V^ ,          M	\	        4       pVP
                  '       d   VP                  V9   d   R# VP                    Fe  p\        V4      ^8X  g   K  Vw  pVP
                  '       g   VP                  VP                  R4      MRpVf   KO  Vw  rhW9   d    R# W9   g   Kd   R# 	  R# )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
NFT)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�8 §¡¨Ô 1á à!×)Ô)ˆFÜ�6‹{˜aÖØ‘�ØFGÇhÇhÀhÐ-×1Ñ1°!·%±%¸Ô>ÐTX�
ØÒ%Ùà%/Ñ"�Ø”?âØ–_â ñ *ñ r    c           	     ó  € \        RRRR7       \        V \        4      '       d   V P                  P                  p \	        \
        V R4      pVe   VP                  V4       R# \        \
        V \        W.R7      4       R# )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                ó   € \        RRRR7       \        V \        4      '       d   V P                  P                  p \	        \
        4      ;_uu_ 4        \        \        V 4      P                  V4       RRR4       R#   + '       g   i     R# ; i)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  sd   € ô ð	ð "'Ø#:õô �#”y×!Ò!Ø�h‰h�m‰mˆä	Ô0×	1Õ	1Ü”�3‹×&Ñ& wÔ/÷ 
2×	1×	1Ò	1ús   Á A<Á<B	)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    