
    Ed                     ~   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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e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)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     Clib/python3.11/site-packages/sympy/assumptions/handlers/calculus.py_r&      s=    
 ~ ~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) 		"x&66	44D 	FMr'   c                     d}| j         D ]\}t          t          j        |          |          }|r'|1| dS t          t          j        |          |           dS |durd}Zd}]|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.   s        r%   r&   r&   r   s    N Fy  qx}}k22 
	 	 tt1%c**K88 ttU" 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 |r|r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   r1   absr+   extended_negative)r#   r$   base_boundedexp_boundeds       r%   r&   r&      sf    yA~ 418DH%%{333qx	**K88Lahtx((+66K  tu Q%7%A%A;!O!O u  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*   zeror"   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 NFr@   r"   s     r%   r&   r&          5r'   c                     d S r:   r@   r"   s     r%   r&   r&          4r'   c                     dS r?   r@   r"   s     r%   r&   r&      rE   r'   c                     dS r?   r@   r"   s     r%   r&   r&      rE   r'   c                     dS rB   r@   r"   s     r%   r&   r&      rC   r'   c                     dS r?   r@   r"   s     r%   r&   r&      rE   r'   c                     dS rB   r@   r"   s     r%   r&   r&      rC   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%   <module>rT      s   
 % $ $ $ $ $ $ $ , , , , , , , , , , , ,                          5 4 4 4 4 4 4 4 4 4 4 4 4 4 ) ) ) ) ) ): : : : : : : : : : : : &!!  "! #O O Ob #4 4 4l #  > #0 0 0 #3 3 3 sCT;t- - - - :JKK  LK #   ! (<LMM  NM $#H--  .- )()9?KK  LK $#$455  65 )(?CC  DC  r'   