o
    jg  ã                   @   s¼  d Z ddlmZmZ ddl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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)Ú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#   ú[/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/assumptions/handlers/calculus.pyÚ_   s
   
r%   c                 C   sx   d}d}| j D ]2}tt |¡|ƒ}|rqtt |¡|ƒ}|dkr$||ks.|du r1d||fv r1 dS |}|dur9|}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   sl   d}| j D ].}tt |¡|ƒ}|rq|du r1|du r dS tt |¡|ƒdu r* dS |dur0d}q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
    TNF)r'   r   r   r   Úextended_nonzero)r!   r"   r)   r*   r+   r#   r#   r$   r%   r   s   '
€c                 C   sð   | j tkrtt | j¡|ƒS tt | j ¡|ƒ}tt | j¡|ƒ}|du r*|du r*dS |du r9tt | j¡|ƒr9dS |r?|r?dS t| j ƒdkdkrStt | j¡|ƒrSdS t| j ƒdkdkrgtt 	| j¡|ƒrgdS t| j ƒdkdkrv|du rvd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-   Úabsr(   Úextended_negative)r!   r"   Úbase_boundedÚexp_boundedr#   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   Úinfiniter'   Úzeror    r#   r#   r$   r%   Í   s   c                 C   ó   dS ©NTr#   r    r#   r#   r$   r%   Õ   s   c                 C   r7   ©NFr#   r    r#   r#   r$   r%   Ú   ó   c                 C   s   d S r4   r#   r    r#   r#   r$   r%   Þ   r:   c                 C   r7   r8   r#   r    r#   r#   r$   r%   æ   r:   c                 C   r7   r8   r#   r    r#   r#   r$   r%   î   r:   c                 C   r7   r9   r#   r    r#   r#   r$   r%   ó   r:   c                 C   r7   r8   r#   r    r#   r#   r$   r%   û   r:   c                 C   r7   r9   r#   r    r#   r#   r$   r%      r:   N)%Ú__doc__Úsympy.assumptionsr   r   Ú
sympy.corer   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_manyr#   r#   r#   r$   Ú<module>   sJ    4


Q
6


ÿ








