§
    OŠtjw  ã                   ó~  — d Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZm Z m!Z!m"Z"  ej#        e	¦  «        d	„ ¦   «         Z$ ej#        e¦  «        d
„ ¦   «         Z$ ej#        e¦  «        d„ ¦   «         Z$ ej#        e¦  «        d„ ¦   «         Z$ ej#        e¦  «        d„ ¦   «         Z$ ej#        e¦  «        d„ ¦   «         Z$ ej%        eeeeeeeee¦	  «	        d„ ¦   «         Z$ ej%        eee¦  «        d„ ¦   «         Z$ ej#        e¦  «        d„ ¦   «         Z$ e j#        e¦  «        d„ ¦   «         Z$ e!j#        e¦  «        d„ ¦   «         Z$ e!j%        ee¦  «        d„ ¦   «         Z$ e"j#        e¦  «        d„ ¦   «         Z$ e"j%        ee¦  «        d„ ¦   «         Z$dS )zc
This module contains query handlers responsible for calculus queries:
infinitesimal, finite, etc.
é    )ÚQÚask)ÚExprÚAddÚMulÚPowÚSymbol)ÚNegativeInfinityÚGoldenRatioÚInfinityÚExp1ÚComplexInfinityÚImaginaryUnitÚNaNÚNumberÚPiÚEÚTribonacciConstant)ÚcosÚexpÚlogÚsignÚsin)Ú	conjunctsé   )ÚFinitePredicateÚInfinitePredicateÚPositiveInfinitePredicateÚNegativeInfinitePredicatec                 ól   — | j         �| j         S t          j        | ¦  «        t          |¦  «        v rdS dS )z
    Handles Symbol.
    NT)Ú	is_finiter   Úfiniter   ©ÚexprÚassumptionss     úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/assumptions/handlers/calculus.pyÚ_r'      s9   € ð
 „~Ð!ØŒ~ÐÝ„x��~„~� ;Ñ/Ô/Ð/Ð/ØˆtØˆ4ó    c                 óî   — d}d}| j         D ]h}t          t          j        |¦  «        |¦  «        }|rŒ't          t          j        |¦  «        |¦  «        }|dk    r||k    s|€	d||fv r dS |}|dur|}Œi|S )ab  
    Return True if expr is bounded, False if not and None if unknown.

    Truth Table:

    +-------+-----+-----------+-----------+
    |       |     |           |           |
    |       |  B  |     U     |     ?     |
    |       |     |           |           |
    +-------+-----+---+---+---+---+---+---+
    |       |     |   |   |   |   |   |   |
    |       |     |'+'|'-'|'x'|'+'|'-'|'x'|
    |       |     |   |   |   |   |   |   |
    +-------+-----+---+---+---+---+---+---+
    |       |     |           |           |
    |   B   |  B  |     U     |     ?     |
    |       |     |           |           |
    +---+---+-----+---+---+---+---+---+---+
    |   |   |     |   |   |   |   |   |   |
    |   |'+'|     | U | ? | ? | U | ? | ? |
    |   |   |     |   |   |   |   |   |   |
    |   +---+-----+---+---+---+---+---+---+
    |   |   |     |   |   |   |   |   |   |
    | U |'-'|     | ? | U | ? | ? | U | ? |
    |   |   |     |   |   |   |   |   |   |
    |   +---+-----+---+---+---+---+---+---+
    |   |   |     |           |           |
    |   |'x'|     |     ?     |     ?     |
    |   |   |     |           |           |
    +---+---+-----+---+---+---+---+---+---+
    |       |     |           |           |
    |   ?   |     |           |     ?     |
    |       |     |           |           |
    +-------+-----+-----------+---+---+---+

        * 'B' = Bounded

        * 'U' = Unbounded

        * '?' = unknown boundedness

        * '+' = positive sign

        * '-' = negative sign

        * 'x' = sign unknown

        * All Bounded -> True

        * 1 Unbounded and the rest Bounded -> False

        * >1 Unbounded, all with same known sign -> False

        * Any Unknown and unknown sign -> None

        * Else -> None

    When the signs are not the same you can have an undefined
    result as in oo - oo, hence 'bounded' is also undefined.
    éÿÿÿÿTNF)Úargsr   r   r"   Úextended_positive)r$   r%   r   ÚresultÚargÚ_boundedÚss          r&   r'   r'       s¥   € ð| €DØ€FØŒyð ð ˆÝ•q”x ‘}”} kÑ2Ô2ˆØð 	ØÝ•Ô# CÑ(Ô(¨+Ñ6Ô6ˆð �2Š:ˆ:˜!˜tš)˜)Ø�	˜d x°Ð&6Ð6Ð6Ø�4�4àˆDà˜ÐÐØˆFøØ€Mr(   c                 ó:  — d}d}| j         D ]Ž}t          t          j        |¦  «        |¦  «        }|r.t          t          j        |¦  «        |¦  «        dur	|du r dS d}ŒT|€1|€ dS t          t          j        |¦  «        |¦  «        € dS |durd}Œ‡|r dS d}Œ�|S )a)  
    Return True if expr is bounded, False if not and None if unknown.

    Truth Table:

    +---+---+---+--------+
    |   |   |   |        |
    |   | B | U |   ?    |
    |   |   |   |        |
    +---+---+---+---+----+
    |   |   |   |   |    |
    |   |   |   | s | /s |
    |   |   |   |   |    |
    +---+---+---+---+----+
    |   |   |   |        |
    | B | B | U |   ?    |
    |   |   |   |        |
    +---+---+---+---+----+
    |   |   |   |   |    |
    | U |   | U | U | ?  |
    |   |   |   |   |    |
    +---+---+---+---+----+
    |   |   |   |        |
    | ? |   |   |   ?    |
    |   |   |   |        |
    +---+---+---+---+----+

        * B = Bounded

        * U = Unbounded

        * ? = unknown boundedness

        * s = signed (hence nonzero)

        * /s = not signed
    TFN)r+   r   r   r"   ÚzeroÚextended_nonzero)r$   r%   r-   Úpossible_zeror.   r/   s         r&   r'   r'   r   sÒ   € ðN €FØ€MØŒyð ð ˆÝ•q”x ‘}”} kÑ2Ô2ˆØð 	Ý•1”6˜#‘;”; Ñ,Ô,°EÐ9Ð9Ø˜U�?�?Ø˜4˜4Ø $�øØÐØˆ~Ø�t�tÝ•1Ô% cÑ*Ô*¨KÑ8Ô8Ð@Ø�t�tØ˜UÐ"Ð"Ø�øàð Ø�t�tØˆFˆFØ€Mr(   c                 óž  — | j         t          k    r't          t          j        | j        ¦  «        |¦  «        S t          t          j        | j         ¦  «        |¦  «        }t          t          j        | j        ¦  «        |¦  «        }|€|€dS |du r)t          t          j        | j        ¦  «        |¦  «        rdS |rf|rdt          t          j        | j         ¦  «        |¦  «        }t          t          j        | j        ¦  «        |¦  «        }|du r|du rdS |dur|durdS dS t          | j         ¦  «        dk    dk    r)t          t          j
        | j        ¦  «        |¦  «        rdS t          | j         ¦  «        dk    dk    r)t          t          j        | j        ¦  «        |¦  «        rdS t          | j         ¦  «        dk    dk    r|du rdS dS )z¹
    * Unbounded ** NonZero -> Unbounded

    * Bounded ** Bounded -> Bounded

    * Abs()<=1 ** Positive -> Bounded

    * Abs()>=1 ** Negative -> Bounded

    * Otherwise unknown
    NFTé   )Úbaser   r   r   r"   r   r3   r2   ÚnegativeÚabsr,   Úextended_negative)r$   r%   Úbase_boundedÚexp_boundedÚis_base_zeroÚis_exp_negatives         r&   r'   r'   ¯   s¹  € ð „y•A‚~€~Ý•1”8˜DœHÑ%Ô% {Ñ3Ô3Ð3å•q”x ¤	Ñ*Ô*¨KÑ8Ô8€LÝ•a”h˜tœxÑ(Ô(¨+Ñ6Ô6€KØÐ Ð 3ØˆtØ�uÐÐ¥¥QÔ%7¸¼Ñ%AÔ%AÀ;Ñ!OÔ!OÐØˆuØð ˜ð Ý�1œ6 $¤)Ñ,Ô,¨[Ñ9Ô9ˆÝ�aœj¨¬Ñ2Ô2°;Ñ?Ô?ˆØ˜4ÐÐ O°tÐ$;Ð$;Ø�5Ø˜uÐ$Ð$¨ÀÐ)EÐ)EØ�4ØˆtÝˆDŒI‰Œ˜!Ò Ò$Ð$­­QÔ-@ÀÄÑ-JÔ-JÈKÑ)XÔ)XÐ$ØˆtÝˆDŒI‰Œ˜!Ò Ò$Ð$­­QÔ-@ÀÄÑ-JÔ-JÈKÑ)XÔ)XÐ$ØˆtÝˆDŒI‰Œ˜!Ò Ò$Ð$¨¸Ð)=Ð)=ØˆuØˆ4r(   c                 óP   — t          t          j        | j        ¦  «        |¦  «        S ©N)r   r   r"   r   r#   s     r&   r'   r'   Õ   s   € å�qŒx˜œÑ!Ô! ;Ñ/Ô/Ð/r(   c                 ó¼   — t          t          j        | j        d         ¦  «        |¦  «        rdS t          t          j        | j        d         ¦  «         |¦  «        S )Nr   F)r   r   Úinfiniter+   r2   r#   s     r&   r'   r'   Ù   sN   € õ �1Œ:�d”i ”lÑ#Ô# [Ñ1Ô1ð ØˆuÝ•”�t”y ”|Ñ$Ô$Ð$ kÑ2Ô2Ð2r(   c                 ó   — dS ©NT© r#   s     r&   r'   r'   á   s	   € ð ˆ4r(   c                 ó   — dS ©NFrE   r#   s     r&   r'   r'   æ   ó   € àˆ5r(   c                 ó   — d S r@   rE   r#   s     r&   r'   r'   ê   ó   € àˆ4r(   c                 ó^   — t          j        | ¦  «                             |¦  «        }|€d S | S r@   )r   r"   Ú	_eval_ask)r$   r%   r!   s      r&   r'   r'   ò   s0   € å”˜‘”×(Ò(¨Ñ5Ô5€IØÐØˆtØˆ=Ðr(   c                 ó   — dS rD   rE   r#   s     r&   r'   r'   ý   rJ   r(   c                 ó   — dS rG   rE   r#   s     r&   r'   r'     rH   r(   c                 ó   — dS rD   rE   r#   s     r&   r'   r'   
  rJ   r(   c                 ó   — dS rG   rE   r#   s     r&   r'   r'     rH   r(   N)&Ú__doc__Úsympy.assumptionsr   r   Ú
sympy.corer   r   r   r   r	   Úsympy.core.numbersr
   r   r   r   r   r   r   r   r   r   r   Úsympy.functionsr   r   r   r   r   Úsympy.logic.boolalgr   Úpredicates.calculusr   r   r   r   Úregisterr'   Úregister_manyrE   r(   r&   ú<module>rZ      sÇ  ððð ð
 %Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø )Ð )Ð )Ð )Ð )Ð )ð:ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð €Ô˜&Ñ!Ô!ðð ñ "Ô!ðð €Ô˜#ÑÔðOð Oñ ÔðOðb €Ô˜#ÑÔð:ð :ñ Ôð:ðx €Ô˜#ÑÔð#ð #ñ Ôð#ðJ €Ô˜#ÑÔð0ð 0ñ Ôð0ð €Ô˜#ÑÔð3ð 3ñ Ôð3ð €Ô˜s C¨°°T¸;Ø˜ tñ-ô -ðð ñ-ô -ðð €Ô˜°Ð:JÑKÔKðð ñ LÔKðð €Ô˜#ÑÔðð ñ Ôðð ÐÔ˜DÑ!Ô!ðð ñ "Ô!ðð $ÐÔ# HÑ-Ô-ðð ñ .Ô-ðð )ÐÔ(Ð)9¸?ÑKÔKðð ñ LÔKðð $ÐÔ#Ð$4Ñ5Ô5ðð ñ 6Ô5ðð )ÐÔ(¨°?ÑCÔCðð ñ DÔCðð ð r(   