
    g                     `   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jD                  e      d	        Z# ejD                  e      d
        Z# ejD                  e      d        Z# ejD                  e      d        Z# ejD                  e      d        Z# ejD                  e      d        Z# ejH                  eeeeeeeee	      d        Z# ejH                  eee
      d        Z# ejD                  e      d        Z# ejH                  eee
      d        Z# e jD                  e      d        Z# e jH                  e
e      d        Z# e!jD                  e
      d        Z# e!jH                  ee      d        Z#y)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                 v    | j                   | j                   S t        j                  |       t        |      v ryy)z
    Handles Symbol.
    NT)	is_finiter   finiter   exprassumptionss     X/var/www/openai/venv/lib/python3.12/site-packages/sympy/assumptions/handlers/calculus.py_r&      s3    
 ~~!~~xx~;//    c                     d}d}| j                   D ]`  }t        t        j                  |      |      }|r%t        t        j                  |      |      }|dk7  r||k7  s|d||fv r y|}|dus_|}b |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yyqxx}k2##C(+6 2:!t)	dx&66DF   Mr'   c                     d}| j                   D ]U  }t        t        j                  |      |      }|r%|-| yt        t        j                  |      |       y|dusQd}Td}W |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   st    N Fyyqxx}k2~1%%c*K8@U"F  Mr'   c                    | j                   t        k(  r)t        t        j                  | j
                        |      S t        t        j                  | j                         |      }t        t        j                  | j
                        |      }||y|du r*t        t        j                  | j
                        |      ry|r|ryt        | j                         dk  dk(  r*t        t        j                  | j
                        |      ryt        | j                         dk\  dk(  r*t        t        j                  | j
                        |      ryt        | j                         dk\  dk(  r|du ryy)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&      s    yyA~188DHH%{33qxx		*K8Lahhtxx(+6K 3uQ%7%7%A;!ODII!$Q-@-@-JK)XDII!$Q-@-@-JK)XDII!$)=r'   c                 T    t        t        j                  | j                        |      S N)r   r   r!   r   r"   s     r%   r&   r&      s    qxx!;//r'   c                     t        t        j                  | j                  d         |      ryt        t        j                  | j                  d          |      S )Nr   F)r   r   infiniter*   zeror"   s     r%   r&   r&      sC     1::diil#[1tyy|$$k22r'   c                      yNT r"   s     r%   r&   r&      s     r'   c                      yNFr@   r"   s     r%   r&   r&          r'   c                      y r:   r@   r"   s     r%   r&   r&          r'   c                      yr?   r@   r"   s     r%   r&   r&      rE   r'   c                      yr?   r@   r"   s     r%   r&   r&      rE   r'   c                      yrB   r@   r"   s     r%   r&   r&      rC   r'   c                      yr?   r@   r"   s     r%   r&   r&      rE   r'   c                      y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 ): : &! " #O Ob #4 4l # > #0 0 #3 3 sCT;t-- :JK L #  !  (<LM N $##H- . )(()9?K L $##$45 6 )((?C Dr'   