§
    OŠtj°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% dS )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<d:S );Ú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/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/assumptions/ask.pyÚ	hermitianzAssumptionKeys.hermitian    ó#   € à5Ð5Ð5Ð5Ð5Ð5Ø!Ð!Ñ#Ô#Ð#ó    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚAntihermitianPredicate)r   r"   )r   r"   s     r   ÚantihermitianzAssumptionKeys.antihermitian%   s#   € à9Ð9Ð9Ð9Ð9Ð9Ø%Ð%Ñ'Ô'Ð'r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚRealPredicate)r   r%   )r   r%   s     r   ÚrealzAssumptionKeys.real*   s    € à0Ð0Ð0Ð0Ð0Ð0Øˆ}‰ŒÐr    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚExtendedRealPredicate)r   r(   )r   r(   s     r   Úextended_realzAssumptionKeys.extended_real/   s#   € à8Ð8Ð8Ð8Ð8Ð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Ð3Ð3Ð3Ð3Ð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Ð8Ð8Ð8Ð8Ð8Ø"Ð"Ñ$Ô$Ð$r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚRationalPredicate)r   r?   )r   r?   s     r   ÚrationalzAssumptionKeys.rationalR   s#   € à4Ð4Ð4Ð4Ð4Ð4Ø Ð Ñ"Ô"Ð"r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚIrrationalPredicate)r   rB   )r   rB   s     r   Ú
irrationalzAssumptionKeys.irrationalW   s#   € à6Ð6Ð6Ð6Ð6Ð6Ø"Ð"Ñ$Ô$Ð$r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚFinitePredicate)Úhandlers.calculusrE   )r   rE   s     r   ÚfinitezAssumptionKeys.finite\   ó"   € à6Ð6Ð6Ð6Ð6Ð6ØˆÑ Ô Ð r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚInfinitePredicate)rF   rJ   )r   rJ   s     r   ÚinfinitezAssumptionKeys.infinitea   ó#   € à8Ð8Ð8Ð8Ð8Ð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Ð5Ð5Ð5Ð5Ð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Ð1Ð1Ð1Ð1Ð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Ð4Ð4Ð4Ð4Ð4ØÐÑ!Ô!Ð!r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚNonPositivePredicate)rV   rj   )r   rj   s     r   ÚnonpositivezAssumptionKeys.nonpositiveŽ   ó#   € à8Ð8Ð8Ð8Ð8Ð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Ð3Ð3Ð3Ð3Ð3Øˆ}‰ŒÐr    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚOddPredicate)r|   r   )r   r   s     r   ÚoddzAssumptionKeys.odd¬   s    € à2Ð2Ð2Ð2Ð2Ð2Øˆ|‰~Œ~Ðr    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚPrimePredicate)r|   r‚   )r   r‚   s     r   ÚprimezAssumptionKeys.prime±   s"   € à4Ð4Ð4Ð4Ð4Ð4Øˆ~ÑÔÐr    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚCompositePredicate)r|   r…   )r   r…   s     r   Ú	compositezAssumptionKeys.composite¶   s#   € à8Ð8Ð8Ð8Ð8Ð8Ø!Ð!Ñ#Ô#Ð#r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚCommutativePredicate)Úhandlers.commonrˆ   )r   rˆ   s     r   ÚcommutativezAssumptionKeys.commutative»   s#   € à9Ð9Ð9Ð9Ð9Ð9Ø#Ð#Ñ%Ô%Ð%r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚIsTruePredicate)r‰   rŒ   )r   rŒ   s     r   Úis_truezAssumptionKeys.is_trueÀ   s"   € à4Ð4Ð4Ð4Ð4Ð4ØˆÑ Ô Ð r    c                 ó"   — ddl m}  |¦   «         S )Nr   )ÚSymmetricPredicate)Úhandlers.matricesr�   )r   r�   s     r   Ú	symmetriczAssumptionKeys.symmetricÅ   s#   € à9Ð9Ð9Ð9Ð9Ð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Ð7Ð7Ð7Ð7Ð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Ð8Ð8Ð8Ð8Ð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ÐAÐAÐAÐAÐ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      s>  € € € € € ðð ð ð$ð $ñ Ôð$ð ð(ð (ñ Ôð(ð ðð ñ Ôðð ð'ð 'ñ Ôð'ð ð$ð $ñ Ôð$ð ð"ð "ñ Ôð"ð ð$ð $ñ Ôð$ð ð)ð )ñ Ôð)ð ð"ð "ñ Ôð"ð ð%ð %ñ Ôð%ð ð#ð #ñ Ôð#ð ð%ð %ñ Ôð%ð ð!ð !ñ Ôð!ð ð#ð #ñ Ôð#ð ð+ð +ñ Ôð+ð ð+ð +ñ Ôð+ð ð#ð #ñ Ôð#ð ð#ð #ñ Ôð#ð ðð ñ Ôðð ð+ð +ñ Ôð+ð ð+ð +ñ Ôð+ð ð"ð "ñ Ôð"ð ð&ð &ñ Ôð&ð ð&ð &ñ Ôð&ð ð*ð *ñ Ôð*ð ð.ð .ñ Ôð.ð ð.ð .ñ Ôð.ð ðð ñ Ôðð ðð ñ Ôðð ð ð  ñ Ôð ð ð$ð $ñ Ôð$ð ð&ð &ñ Ôð&ð ð!ð !ñ Ôð!ð ð$ð $ñ Ôð$ð ð%ð %ñ Ôð%ð ð%ð %ñ Ôð%ð ð"ð "ñ Ôð"ð ð+ð +ñ Ôð+ð ð*ð *ñ Ôð*ð ð*ð *ñ Ôð*ð ð#ð #ñ Ôð#ð ð#ð #ñ Ôð#ð ð!ð !ñ Ôð!ð ð*ð *ñ Ôð*ð ð'ð 'ñ Ôð'ð ð*ð *ñ Ôð*ð ð#ð #ñ Ôð#ð ð!ð !ñ Ôð!ð ð%ð %ñ Ôð%ð ð)ð )ñ Ôð)ð ð#ð #ñ Ôð#ð ð%ð %ñ Ôð%ð ð,ð ,ñ Ôð,ð ð&ð &ñ Ôð&ð ð)ð )ñ Ôð)ð ð#ð #ñ Ôð#ð #ð #r    r   c                 óœ  — t          ¦   «         }| j        D ]¨}g }|D ]}}t          |j        t          ¦  «        r`t          |j        j        ¦  «        dk    rC|j        j        |v r3|                     t          |j        j
        |j        ¦  «        ¦  «         Œz n& n$|r"|                     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€Eà”.ð +ð +ˆØˆØð 	+ð 	+ˆGÝ˜'œ+Õ'7Ñ8Ô8ð 	½SÀÄÔAVÑ=WÔ=WÐ[\Ò=\Ð=\Ø”;”? eÐ+Ð+à—K’K¥¨¬Ô(<¸g¼nÑ MÔ MÑNÔNÐNÐNð �Eð �ð ð +Ø—	’	�) 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          j        i}t          | t2          ¦  «        r| j        | j        }}n5| j        |v r|t;          | ¦  «                 | j        }}nt          j        | f}}tA          j!        |¦  «        }	|	 "                    |¦  «         tG          |	|¦  «        }
tI          ¦   «         }tK          ¦   «         }| &                    tA          |¦  «        ¦  «         | '                    |
¦  «         |
j(        r#tS          |¦  «        du rtU          d|z  ¦  «        ‚tW          ||
¦  «        }|�|S  ||Ž  ,                    |¦  «        }|�t[          |¦  «        S  || ||¬
¦  «        }|�|S 	  || ||¬
¦  «        }n# |$ r Y d	S w xY w|S )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Ð7Ð7Ð7Ð7Ð7Ø@Ð@Ð@Ð@Ð@Ð@å˜+Ñ&Ô&€KÝ˜+Ñ&Ô&€Kå�+�yÑ)Ô)ð J¨[Ô-=Å[Ð-PÐ-PÝÐHÑIÔIÐIå�+�yÑ)Ô)ð J¨[Ô-=Å[Ð-PÐ-PÝÐHÑIÔIÐIå•q”t�R¥¤¥r­1¬4µµQ´T½2½q¼tÅRÍÌÐN€KÝ�+Õ/Ñ0Ô0ð .ØÔ(¨+Ô*?ˆTˆˆØ	Ô	˜[Ð	(Ð	(Ø¥ [Ñ 1Ô 1Ô2°KÔ4DˆTˆˆå”I ˜~ˆTˆõ ”˜{Ñ+Ô+€JØ×Ò�gÑÔÐõ % Z°Ñ6Ô6€Kõ *Ñ+Ô+€OÝ‰lŒl€GØ×Ò•S˜Ñ)Ô)Ñ*Ô*Ð*Ø×Ò˜Ñ%Ô%Ð%ð Ôð F�{¨7Ñ3Ô3°uÐ<Ð<ÝÐ6¸ÑDÑEÔEÐEõ ˜3 Ñ
,Ô
,€CØ
€Øˆ
ð ˆ#ˆtˆ*×
Ò
˜{Ñ
+Ô
+€CØ
€Ý�C‰yŒyÐð ˆ&�¨+¸wÐ
GÑ
GÔ
G€CØ
€Øˆ
ðØˆj˜°+ÀwÐOÑOÔOˆˆøØð ð ð Øˆtˆtðøøøð €Js   ÉI+ É+I4É3I4c                 óÖ  — |j         rát          ¦   «         }t          |j         ¦  «        dk    r`|j         \  }t          |¦  «        dk    rD|\  }|                     | d¦  «        }|�|d         nt	          ¦   «         }|j        r|j        |v rdS |j         D ]S}t          |¦  «        dk    r>|\  }|j        s|                     |j        d¦  «        nd}|€Œ@|\  }}| |v r dS | |v r dS ŒTdS )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Ô1Ðåˆ{Ô"Ñ#Ô# qÒ(Ð(ØÔ%‰CˆBÝ�2‰wŒw˜!Š|ˆ|Ø‘�Ø-×1Ò1°#°tÑ<Ô<�
Ø,6Ð,B˜: aœ=˜=ÍÉÌ�Ø”8ð ! ¤¨Ð 1Ð 1à ˜5à!Ô)ð 	!ð 	!ˆFÝ�6‰{Œ{˜aÒÐØ‘�ØFGÄhÐXÐ-×1Ò1°!´%¸Ñ>Ô>Ð>ÐTX�
ØÐ%Øà%/Ñ"�˜(Ø˜(�?�?à˜4˜4Ø˜H�_�_à ˜5˜5øàˆ4r    c                 ó  — t          ddd¬¦  «         t          | t          ¦  «        r| j        j        } t	          t
          | d¦  «        }|�|                     |¦  «         dS t          t
          | t          | |g¬¦  «        ¦  «         dS )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  s�   € õ ð	ð "'Ø#:ðñ ô ð õ �#•yÑ!Ô!ð ØŒhŒmˆÝ•1�c˜4Ñ Ô €DØÐØ×Ò˜Ñ!Ô!Ð!Ð!Ð!å•�3�	 #°°	Ð:Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;r    c                 ó  — t          ddd¬¦  «         t          | t          ¦  «        r| j        j        } t	          t
          ¦  «        5  t          t          | ¦  «                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )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  sÔ   € õ ð	ð "'Ø#:ðñ ô ð õ �#•yÑ!Ô!ð ØŒhŒmˆå	Õ0Ñ	1Ô	1ð 0ð 0Ý•�3‰Œ×&Ò& wÑ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0s   Á)A>Á>BÂB)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Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø -Ð -Ð -Ð -Ð -Ð -Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ða#ð a#ð a#ð a#ð a#ñ a#ô a#ð a#ðH	 €NÑÔ€ð1ð 1ð 1ðh "&Ð/Að Tð Tð Tð TðnPð Pð Pðf<ð <ð <ð40ð 0ð 0ð.ð ð ð ð ð ð ð ð ð r    