
    Цi                     `   S r SSKJrJr  SSKJrJrJrJr  SSK	J
r
JrJrJrJrJrJrJrJrJrJr  SSKJrJrJrJrJr  SSKJr  SSKJrJrJ r J!r!  \RD                  " \5      S	 5       r#\RD                  " \5      S
 5       r#\RD                  " \5      S 5       r#\RD                  " \5      S 5       r#\RD                  " \5      S 5       r#\RD                  " \5      S 5       r#\RH                  " \\\\\\\\\5	      S 5       r#\RH                  " \\\
5      S 5       r#\RD                  " \5      S 5       r#\RH                  " \\\
5      S 5       r#\ RD                  " \5      S 5       r#\ RH                  " \
\5      S 5       r#\!RD                  " \
5      S 5       r#\!RH                  " \\5      S 5       r#g)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                 ~    U R                   b  U R                   $ [        R                  " U 5      [        U5      ;   a  gg)z
Handles Symbol.
NT)	is_finiter   finiter   exprassumptionss     b/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sympy/assumptions/handlers/calculus.py_r&      s3    
 ~~!~~xx~;//    c                 
   SnSnU R                    Hn  n[        [        R                  " U5      U5      nU(       a  M,  [        [        R                  " U5      U5      nUS:w  a  Xb:w  d
  Uc	  SXR4;   a    gUnUSLd  Ml  UnMp     U$ )a  
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:!)	dx&66DF   Mr'   c                     SnU R                    Hd  n[        [        R                  " U5      U5      nU(       a  M,  Uc3  Uc    g[        [        R                  " U5      U5      c    gUSLa  SnM`  Mb  SnMf     U$ )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yyqxx}k2~1%%c*K8@U" # F  Mr'   c                 2   U R                   [        :X  a*  [        [        R                  " U R
                  5      U5      $ [        [        R                  " U R                   5      U5      n[        [        R                  " U R
                  5      U5      nUc  Uc  gUSL a0  [        [        R                  " U R
                  5      U5      (       a  gU(       a  U(       a  g[        U R                   5      S:*  S:X  a0  [        [        R                  " U R
                  5      U5      (       a  g[        U R                   5      S:  S:X  a0  [        [        R                  " U R
                  5      U5      (       a  g[        U R                   5      S:  S:X  a  USL a  gg)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!ODII!$Q-@-@-JK)X)XDII!$Q-@-@-JK)X)XDII!$)=r'   c                 V    [        [        R                  " U R                  5      U5      $ N)r   r   r!   r   r"   s     r%   r&   r&      s    qxx!;//r'   c                     [        [        R                  " U R                  S   5      U5      (       a  g[        [        R                  " U R                  S   5      ) U5      $ )Nr   F)r   r   infiniter*   zeror"   s     r%   r&   r&      sF     1::diil#[11tyy|$$k22r'   c                     gNT r"   s     r%   r&   r&      s     r'   c                     gNFr@   r"   s     r%   r&   r&          r'   c                     g r:   r@   r"   s     r%   r&   r&          r'   c                     gr?   r@   r"   s     r%   r&   r&      rE   r'   c                     gr?   r@   r"   s     r%   r&   r&      rE   r'   c                     grB   r@   r"   s     r%   r&   r&      rC   r'   c                     gr?   r@   r"   s     r%   r&   r&      rE   r'   c                     g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'   