Ë
    7^(h°K  ã                   óê   — d Z ddlmZ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mZmZmZmZmZ ddlmZ ddlmZ dd	lmZmZmZ  G d
„ d«      Z e«       Zd„ Zdefd„Zd„ Z d„ Z!d„ Z"ddl#m$Z$m%Z% y)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                   ó�  — e Zd 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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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-„ «       Z0ed.„ «       Z1ed/„ «       Z2ed0„ «       Z3ed1„ «       Z4ed2„ «       Z5ed3„ «       Z6ed4„ «       Z7ed5„ «       Z8ed6„ «       Z9ed7„ «       Z:ed8„ «       Z;ed9„ «       Z<y:);ÚAssumptionKeyszy
    This class contains all the supported keys by ``ask``.
    It should be accessed via the instance ``sympy.Q``.

    c                 ó   — ddl m}  |«       S )Né   )ÚHermitianPredicate)Úhandlers.setsr   )Úselfr   s     úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/assumptions/ask.pyÚ	hermitianzAssumptionKeys.hermitian    ó   € å5Ù!Ó#Ð#ó    c                 ó   — ddl m}  |«       S )Nr   )ÚAntihermitianPredicate)r   r"   )r   r"   s     r   ÚantihermitianzAssumptionKeys.antihermitian%   s   € å9Ù%Ó'Ð'r    c                 ó   — ddl m}  |«       S )Nr   )ÚRealPredicate)r   r%   )r   r%   s     r   ÚrealzAssumptionKeys.real*   s   € å0Ù‹Ðr    c                 ó   — ddl m}  |«       S )Nr   )ÚExtendedRealPredicate)r   r(   )r   r(   s     r   Úextended_realzAssumptionKeys.extended_real/   s   € å8Ù$Ó&Ð&r    c                 ó   — ddl m}  |«       S )Nr   )ÚImaginaryPredicate)r   r+   )r   r+   s     r   Ú	imaginaryzAssumptionKeys.imaginary4   r   r    c                 ó   — ddl m}  |«       S )Nr   )ÚComplexPredicate)r   r.   )r   r.   s     r   ÚcomplexzAssumptionKeys.complex9   ó   € å3ÙÓ!Ð!r    c                 ó   — ddl m}  |«       S )Nr   )ÚAlgebraicPredicate)r   r2   )r   r2   s     r   Ú	algebraiczAssumptionKeys.algebraic>   r   r    c                 ó   — ddl m}  |«       S )Nr   )ÚTranscendentalPredicate)Úpredicates.setsr5   )r   r5   s     r   ÚtranscendentalzAssumptionKeys.transcendentalC   s   € å<Ù&Ó(Ð(r    c                 ó   — ddl m}  |«       S )Nr   )ÚIntegerPredicate)r   r9   )r   r9   s     r   ÚintegerzAssumptionKeys.integerH   r0   r    c                 ó   — ddl m}  |«       S )Nr   )ÚNonIntegerPredicate)r6   r<   )r   r<   s     r   Ú
nonintegerzAssumptionKeys.nonintegerM   s   € å8Ù"Ó$Ð$r    c                 ó   — ddl m}  |«       S )Nr   )ÚRationalPredicate)r   r?   )r   r?   s     r   ÚrationalzAssumptionKeys.rationalR   s   € å4Ù Ó"Ð"r    c                 ó   — ddl m}  |«       S )Nr   )ÚIrrationalPredicate)r   rB   )r   rB   s     r   Ú
irrationalzAssumptionKeys.irrationalW   s   € å6Ù"Ó$Ð$r    c                 ó   — ddl m}  |«       S )Nr   )ÚFinitePredicate)Úhandlers.calculusrE   )r   rE   s     r   ÚfinitezAssumptionKeys.finite\   ó   € å6ÙÓ Ð r    c                 ó   — ddl m}  |«       S )Nr   )ÚInfinitePredicate)rF   rJ   )r   rJ   s     r   ÚinfinitezAssumptionKeys.infinitea   ó   € å8Ù Ó"Ð"r    c                 ó   — ddl m}  |«       S )Nr   )ÚPositiveInfinitePredicate)rF   rN   )r   rN   s     r   Úpositive_infinitez AssumptionKeys.positive_infinitef   ó   € å@Ù(Ó*Ð*r    c                 ó   — ddl m}  |«       S )Nr   )ÚNegativeInfinitePredicate)rF   rR   )r   rR   s     r   Únegative_infinitez AssumptionKeys.negative_infinitek   rP   r    c                 ó   — ddl m}  |«       S )Nr   )ÚPositivePredicate)Úhandlers.orderrU   )r   rU   s     r   ÚpositivezAssumptionKeys.positivep   ó   € å5Ù Ó"Ð"r    c                 ó   — ddl m}  |«       S )Nr   )ÚNegativePredicate)rV   rZ   )r   rZ   s     r   ÚnegativezAssumptionKeys.negativeu   rX   r    c                 ó   — ddl m}  |«       S )Nr   )ÚZeroPredicate)rV   r]   )r   r]   s     r   ÚzerozAssumptionKeys.zeroz   s   € å1Ù‹Ðr    c                 ó   — ddl m}  |«       S )Nr   )ÚExtendedPositivePredicate)rV   r`   )r   r`   s     r   Úextended_positivez AssumptionKeys.extended_positive   ó   € å=Ù(Ó*Ð*r    c                 ó   — ddl m}  |«       S )Nr   )ÚExtendedNegativePredicate)rV   rd   )r   rd   s     r   Úextended_negativez AssumptionKeys.extended_negative„   rb   r    c                 ó   — ddl m}  |«       S )Nr   )ÚNonZeroPredicate)rV   rg   )r   rg   s     r   ÚnonzerozAssumptionKeys.nonzero‰   s   € å4ÙÓ!Ð!r    c                 ó   — ddl m}  |«       S )Nr   )ÚNonPositivePredicate)rV   rj   )r   rj   s     r   ÚnonpositivezAssumptionKeys.nonpositiveŽ   ó   € å8Ù#Ó%Ð%r    c                 ó   — ddl m}  |«       S )Nr   )ÚNonNegativePredicate)rV   rn   )r   rn   s     r   ÚnonnegativezAssumptionKeys.nonnegative“   rl   r    c                 ó   — ddl m}  |«       S )Nr   )ÚExtendedNonZeroPredicate)rV   rq   )r   rq   s     r   Úextended_nonzerozAssumptionKeys.extended_nonzero˜   s   € å<Ù'Ó)Ð)r    c                 ó   — ddl m}  |«       S )Nr   )ÚExtendedNonPositivePredicate)rV   rt   )r   rt   s     r   Úextended_nonpositivez#AssumptionKeys.extended_nonpositive�   ó   € å@Ù+Ó-Ð-r    c                 ó   — ddl m}  |«       S )Nr   )ÚExtendedNonNegativePredicate)rV   rx   )r   rx   s     r   Úextended_nonnegativez#AssumptionKeys.extended_nonnegative¢   rv   r    c                 ó   — ddl m}  |«       S )Nr   )ÚEvenPredicate)Úhandlers.ntheoryr{   )r   r{   s     r   ÚevenzAssumptionKeys.even§   s   € å3Ù‹Ðr    c                 ó   — ddl m}  |«       S )Nr   )ÚOddPredicate)r|   r   )r   r   s     r   ÚoddzAssumptionKeys.odd¬   s   € å2Ù‹~Ðr    c                 ó   — ddl m}  |«       S )Nr   )ÚPrimePredicate)r|   r‚   )r   r‚   s     r   ÚprimezAssumptionKeys.prime±   s   € å4ÙÓÐr    c                 ó   — ddl m}  |«       S )Nr   )ÚCompositePredicate)r|   r…   )r   r…   s     r   Ú	compositezAssumptionKeys.composite¶   s   € å8Ù!Ó#Ð#r    c                 ó   — ddl m}  |«       S )Nr   )ÚCommutativePredicate)Úhandlers.commonrˆ   )r   rˆ   s     r   ÚcommutativezAssumptionKeys.commutative»   s   € å9Ù#Ó%Ð%r    c                 ó   — ddl m}  |«       S )Nr   )ÚIsTruePredicate)r‰   rŒ   )r   rŒ   s     r   Úis_truezAssumptionKeys.is_trueÀ   s   € å4ÙÓ Ð r    c                 ó   — ddl m}  |«       S )Nr   )ÚSymmetricPredicate)Úhandlers.matricesr�   )r   r�   s     r   Ú	symmetriczAssumptionKeys.symmetricÅ   s   € å9Ù!Ó#Ð#r    c                 ó   — ddl m}  |«       S )Nr   )ÚInvertiblePredicate)r�   r“   )r   r“   s     r   Ú
invertiblezAssumptionKeys.invertibleÊ   ó   € å:Ù"Ó$Ð$r    c                 ó   — ddl m}  |«       S )Nr   )ÚOrthogonalPredicate)r�   r—   )r   r—   s     r   Ú
orthogonalzAssumptionKeys.orthogonalÏ   r•   r    c                 ó   — ddl m}  |«       S )Nr   )ÚUnitaryPredicate)r�   rš   )r   rš   s     r   ÚunitaryzAssumptionKeys.unitaryÔ   s   € å7ÙÓ!Ð!r    c                 ó   — ddl m}  |«       S )Nr   )ÚPositiveDefinitePredicate)r�   r�   )r   r�   s     r   Úpositive_definitez AssumptionKeys.positive_definiteÙ   rP   r    c                 ó   — ddl m}  |«       S )Nr   )ÚUpperTriangularPredicate)r�   r    )r   r    s     r   Úupper_triangularzAssumptionKeys.upper_triangularÞ   ó   € å?Ù'Ó)Ð)r    c                 ó   — ddl m}  |«       S )Nr   )ÚLowerTriangularPredicate)r�   r¤   )r   r¤   s     r   Úlower_triangularzAssumptionKeys.lower_triangularã   r¢   r    c                 ó   — ddl m}  |«       S )Nr   )ÚDiagonalPredicate)r�   r§   )r   r§   s     r   ÚdiagonalzAssumptionKeys.diagonalè   rL   r    c                 ó   — ddl m}  |«       S )Nr   )ÚFullRankPredicate)r�   rª   )r   rª   s     r   ÚfullrankzAssumptionKeys.fullrankí   rL   r    c                 ó   — ddl m}  |«       S )Nr   )ÚSquarePredicate)r�   r­   )r   r­   s     r   ÚsquarezAssumptionKeys.squareò   rH   r    c                 ó   — ddl m}  |«       S )Nr   )ÚIntegerElementsPredicate)r�   r°   )r   r°   s     r   Úinteger_elementszAssumptionKeys.integer_elements÷   r¢   r    c                 ó   — ddl m}  |«       S )Nr   )ÚRealElementsPredicate)r�   r³   )r   r³   s     r   Úreal_elementszAssumptionKeys.real_elementsü   s   € å<Ù$Ó&Ð&r    c                 ó   — ddl m}  |«       S )Nr   )ÚComplexElementsPredicate)r�   r¶   )r   r¶   s     r   Úcomplex_elementszAssumptionKeys.complex_elements  r¢   r    c                 ó   — ddl m}  |«       S )Nr   )ÚSingularPredicate)Úpredicates.matricesr¹   )r   r¹   s     r   ÚsingularzAssumptionKeys.singular  s   € å:Ù Ó"Ð"r    c                 ó   — ddl m}  |«       S )Nr   )ÚNormalPredicate)rº   r½   )r   r½   s     r   ÚnormalzAssumptionKeys.normal  s   € å8ÙÓ Ð r    c                 ó   — ddl m}  |«       S )Nr   )ÚTriangularPredicate)rº   rÀ   )r   rÀ   s     r   Ú
triangularzAssumptionKeys.triangular  s   € å<Ù"Ó$Ð$r    c                 ó   — ddl m}  |«       S )Nr   )ÚUnitTriangularPredicate)rº   rÃ   )r   rÃ   s     r   Úunit_triangularzAssumptionKeys.unit_triangular  s   € å@Ù&Ó(Ð(r    c                 ó   — ddl m}  |«       S )Nr   )ÚEqualityPredicate)Úrelation.equalityrÆ   )r   rÆ   s     r   ÚeqzAssumptionKeys.eq  rL   r    c                 ó   — ddl m}  |«       S )Nr   )ÚUnequalityPredicate)rÇ   rÊ   )r   rÊ   s     r   ÚnezAssumptionKeys.ne  r•   r    c                 ó   — ddl m}  |«       S )Nr   )ÚStrictGreaterThanPredicate)rÇ   rÍ   )r   rÍ   s     r   ÚgtzAssumptionKeys.gt$  s   € åAÙ)Ó+Ð+r    c                 ó   — ddl m}  |«       S )Nr   )ÚGreaterThanPredicate)rÇ   rÐ   )r   rÐ   s     r   ÚgezAssumptionKeys.ge)  s   € å;Ù#Ó%Ð%r    c                 ó   — ddl m}  |«       S )Nr   )ÚStrictLessThanPredicate)rÇ   rÓ   )r   rÓ   s     r   ÚltzAssumptionKeys.lt.  s   € å>Ù&Ó(Ð(r    c                 ó   — ddl m}  |«       S )Nr   )ÚLessThanPredicate)rÇ   rÖ   )r   rÖ   s     r   ÚlezAssumptionKeys.le3  rL   r    N)=Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r&   r)   r,   r/   r3   r7   r:   r=   r@   rC   rG   rK   rO   rS   rW   r[   r^   ra   re   rh   rk   ro   rr   ru   ry   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      sg  „ ñð ñ$ó ð$ð ñ(ó ð(ð ñó ðð ñ'ó ð'ð ñ$ó ð$ð ñ"ó ð"ð ñ$ó ð$ð ñ)ó ð)ð ñ"ó ð"ð ñ%ó ð%ð ñ#ó ð#ð ñ%ó ð%ð ñ!ó ð!ð ñ#ó ð#ð ñ+ó ð+ð ñ+ó ð+ð ñ#ó ð#ð ñ#ó ð#ð ñó ðð ñ+ó ð+ð ñ+ó ð+ð ñ"ó ð"ð ñ&ó ð&ð ñ&ó ð&ð ñ*ó ð*ð ñ.ó ð.ð ñ.ó ð.ð ñó ðð ñó ðð ñ ó ð ð ñ$ó ð$ð ñ&ó ð&ð ñ!ó ð!ð ñ$ó ð$ð ñ%ó ð%ð ñ%ó ð%ð ñ"ó ð"ð ñ+ó ð+ð ñ*ó ð*ð ñ*ó ð*ð ñ#ó ð#ð ñ#ó ð#ð ñ!ó ð!ð ñ*ó ð*ð ñ'ó ð'ð ñ*ó ð*ð ñ#ó ð#ð ñ!ó ð!ð ñ%ó ð%ð ñ)ó ð)ð ñ#ó ð#ð ñ%ó ð%ð ñ,ó ð,ð ñ&ó ð&ð ñ)ó ð)ð ñ#ó ñ#r    r   c                 ó¼  — t        «       }| j                  D ]¹  }g }|D ]“  }t        |j                  t        «      rvt        |j                  j                  «      dk(  rT|j                  j                  |v r:|j                  t        |j                  j                  |j                  «      «       Œ‘ Œš Œœ |sŒ |j                  t        |«      «       Œ» t        |«      S )aƒ  
    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¼SÀÇÁ×AVÑAVÓ=WÐ[\Ò=\Ø—;‘;—?‘? eÑ+à—K‘K¤¨¯©×(<Ñ(<¸g¿n¹nÓ MÕNñ ñ ð	+ò Ø—	‘	œ) D›/Õ*ð!+ô" ˆu‹:Ðr    Tc                 ó¦  — ddl m} ddlm} ddlm} t        | «      } t        |«      }t        | t        «      s| j                  t        urt        d«      ‚t        |t        «      s|j                  t        urt        d«      ‚t        t        j                  t        t        j                   t"        t        j$                  t&        t        j(                  t*        t        j,                  t.        t        j0                  i}t        | t2        «      r| j4                  | j6                  }}n<| j8                  |v r|t;        | «         | j<                  }}nt        j>                  | f}}tA        jB                  |«      }	|	jE                  |«       tG        |	|«      }
tI        «       }tK        «       }|jM                  tA        |«      «       |jO                  |
«       |
jP                  rtS        |«      du rtU        d|z  «      ‚tW        ||
«      }|�|S  ||Ž jY                  |«      }|�t[        |«      S  || ||¬
«      }|�|S 	  || ||¬
«      }|S # |$ r Y y	w xY w)ay	  
    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)Úpropositionrõ   rö   rò   ró   rô   ÚbinrelpredsÚkeyrî   Ú
assump_cnfÚlocal_factsÚknown_facts_cnfÚenc_cnfÚress                 r   Úaskr  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Ø×(Ñ(¨+×*?Ñ*?ˆ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                 óà  — |j                   rât        «       }t        |j                   «      dk(  r^|j                   \  }t        |«      dk(  rB|\  }|j                  | d«      }|�|d   n	t	        «       }|j
                  r|j                  |v ry|j                   D ]S  }t        |«      dk(  sŒ|\  }|j
                  s|j                  |j                  d«      nd}|€ŒC|\  }}| |v r y| |v sŒS y y)aÕ  
    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ä   )	r
  r  Ú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�
ØÐ%Øà%/Ñ"�˜(Ø˜(‘?áØ˜H’_á ð	!ð r    c                 óð   — t        ddd¬«       t        | t        «      r| j                  j                  } t	        t
        | d«      }|�|j                  |«       yt        t
        | t        | |g¬«      «       y)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Úgetattrrü   Úadd_handlerÚsetattr)r
  ÚhandlerÚQkeys      r   Úregister_handlerr'  Y  si   € ô ð	ð "'Ø#:õô �#”yÔ!Ø�h‰h�m‰mˆÜ”1�c˜4Ó €DØÐØ×Ñ˜Õ!ä”�3œ	 #°°	Ô:Õ;r    c                 óò   — t        ddd¬«       t        | t        «      r| j                  j                  } t	        t
        «      5  t        t        | «      j                  |«       ddd«       y# 1 sw Y   yxY w)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.
        r  r  r  N)	r   rà   r   r!  r   r   r"  rü   Úremove_handler)r
  r%  s     r   r)  r)  s  sd   € ô ð	ð "'Ø#:õô �#”yÔ!Ø�h‰h�m‰mˆä	Ô0Ó	1ñ 0Ü”�3‹×&Ñ& wÔ/÷0÷ 0ñ 0ús   Á A-Á-A6)r  r  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   rü   rð   r  r  r'  r)  Úsympy.assumptions.ask_generatedr  r  rÜ   r    r   ú<module>r3     s{   ðÙ :÷ñ ç :Ñ :Ý Ý 'ß 8× 8Ý -Ý 6÷9ñ 9÷a#ñ a#ñH	 Ó€ò1ðh "&Ð/Aó TònPòf<ò40÷.ð r    