
    Xhw                     ~   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     u/var/www/tools.fuzzalab.pt/emblema-extractor/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  qx}}k22 	#C((+66 2::!t))	dx&66644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  qx}}k22 	16#;;,,E99U??44 $~tt1%c**K88@ttU"" ttFF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    yA~~18DH%%{333qx	**K88Lahtx((+66K 3tuQ%7%A%A;!O!Ou  16$),,[99aj22;??4Ot$;$;5u$$)E)E4tDI!$$Q-@-J-JK)X)X$tDI!$$Q-@-J-JK)X)X$tDI!$$)=)=u4r(   c                 P    t          t          j        | j                  |          S N)r   r   r"   r   r#   s     r&   r'   r'      s    qx!!;///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:dil##[11 uty|$$$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5I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 sCT;t- - - - :JKK  LK #   D!!  "! $#H--  .- )()9?KK  LK $#$455  65 )(?CC  DC  r(   