a
    kº”hw  ã                   @   s¼  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 #e	¡d	d
„ ƒZ$e #e¡dd
„ ƒZ$e #e¡dd
„ ƒZ$e #e¡dd
„ ƒZ$e #e¡dd
„ ƒZ$e #e¡dd
„ ƒZ$e %eeeeeeeee¡	dd
„ ƒZ$e %eee¡dd
„ ƒZ$e #e¡dd
„ ƒZ$e  #e¡dd
„ ƒZ$e! #e¡dd
„ ƒZ$e! %ee¡dd
„ ƒZ$e" #e¡dd
„ ƒZ$e" %ee¡d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                 C   s*   | j dur| j S t | ¡t|ƒv r&dS dS )z
    Handles Symbol.
    NT)Ú	is_finiter   Úfiniter   ©ÚexprÚassumptions© r$   úQ/var/www/auris/lib/python3.9/site-packages/sympy/assumptions/handlers/calculus.pyÚ_   s
    
r&   c                 C   sx   d}d}| j D ]d}tt |¡|ƒ}|r(qtt |¡|ƒ}|dkrH||ks\|du rbd||fv rb dS |}|dur|}q|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Úsr$   r$   r%   r&       s"    >
ÿ
ÿc                 C   s    d}d}| j D ]Œ}tt |¡|ƒ}|rNtt |¡|ƒdurš|du rH dS d}q|du rŒ|du rd dS tt |¡|ƒdu r~ dS |duršd}q|r– dS d}q|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*   Zpossible_zeror+   r,   r$   r$   r%   r&   r   s(    '
c                 C   sD  | j tkrtt | j¡|ƒS tt | j ¡|ƒ}tt | j¡|ƒ}|du rT|du rTdS |du rrtt | j¡|ƒrrdS |rÊ|rÊtt | j ¡|ƒ}tt | 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¡|ƒròdS t	| j ƒdkdkrtt | 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   r/   r.   ÚnegativeÚabsr)   Zextended_negative)r"   r#   Zbase_boundedZexp_boundedZis_base_zeroZis_exp_negativer$   r$   r%   r&   ¯   s.    
$(c                 C   s   t t | j¡|ƒS ©N)r   r   r    r   r!   r$   r$   r%   r&   Õ   s    c                 C   s2   t t | jd ¡|ƒrdS t t | jd ¡ |ƒS )Nr   F)r   r   Zinfiniter(   r.   r!   r$   r$   r%   r&   Ù   s    c                 C   s   dS ©NTr$   r!   r$   r$   r%   r&   á   s    c                 C   s   dS ©NFr$   r!   r$   r$   r%   r&   æ   s    c                 C   s   d S r4   r$   r!   r$   r$   r%   r&   ê   s    c                 C   s"   t  | ¡ |¡}|d u rd S | S r4   )r   r    Z	_eval_ask)r"   r#   r   r$   r$   r%   r&   ò   s    c                 C   s   dS r5   r$   r!   r$   r$   r%   r&   ý   s    c                 C   s   dS r6   r$   r!   r$   r$   r%   r&     s    c                 C   s   dS r5   r$   r!   r$   r$   r%   r&   
  s    c                 C   s   dS r6   r$   r!   r$   r$   r%   r&     s    N)&Ú__doc__Zsympy.assumptionsr   r   Z
sympy.corer   r   r   r   r   Zsympy.core.numbersr	   r
   r   r   r   r   r   r   r   r   r   Zsympy.functionsr   r   r   r   r   Zsympy.logic.boolalgr   Zpredicates.calculusr   r   r   r   Úregisterr&   Zregister_manyr$   r$   r$   r%   Ú<module>   sH   4


Q
<
%

ÿ









