
    \hw                     `   S r SSKJrJr  SSKJr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"  \RF                  " \	5      S	 5       r$\RF                  " \5      S
 5       r$\RF                  " \5      S 5       r$\RF                  " \5      S 5       r$\RF                  " \5      S 5       r$\RF                  " \5      S 5       r$\RJ                  " \\\\\\\\\5	      S 5       r$\RJ                  " \\\5      S 5       r$\RF                  " \5      S 5       r$\ RF                  " \5      S 5       r$\!RF                  " \5      S 5       r$\!RJ                  " \\5      S 5       r$\"RF                  " \5      S 5       r$\"RJ                  " \\5      S 5       r$g)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                 ~    U R                   b  U R                   $ [        R                  " U 5      [        U5      ;   a  gg)z
Handles Symbol.
NT)	is_finiter   finiter   exprassumptionss     [/var/www/auris/envauris/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                 d   SnSnU R                    H  n[        [        R                  " U5      U5      nU(       a0  [        [        R                  " U5      U5      SLa  USL a    gSnMX  MZ  Uc3  Uc    g[        [        R
                  " U5      U5      c    gUSLa  SnM  M  U(       a    gSnM     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
TFN)r+   r   r   r"   zeroextended_nonzero)r$   r%   r-   possible_zeror.   r/   s         r&   r'   r'   r   s    N FMyyqxx}k2166#;,E9U? $ : ~1%%c*K8@U" # F# $ Mr(   c                    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(       ar  U(       ak  [        [        R                  " U R                   5      U5      n[        [        R                  " U R
                  5      U5      nUSL a  USL a  gUSLa  USLa  g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   r3   r2   negativeabsr,   extended_negative)r$   r%   base_boundedexp_boundedis_base_zerois_exp_negatives         r&   r'   r'      su    yyA~188DHH%{33qxx		*K8Lahhtxx(+6K 3uQ%7%7%A;!O!O166$)),[9ajj2;?4Ot$;u$)E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+   r2   r#   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NFrE   r#   s     r&   r'   r'          r(   c                     g r@   rE   r#   s     r&   r'   r'          r(   c                 b    [         R                  " U 5      R                  U5      nUc  g U(       + $ r@   )r   r"   	_eval_ask)r$   r%   r!   s      r&   r'   r'      s+    ((5I=r(   c                     grD   rE   r#   s     r&   r'   r'      rJ   r(   c                     grG   rE   r#   s     r&   r'   r'     rH   r(   c                     grD   rE   r#   s     r&   r'   r'   
  rJ   r(   c                     grG   rE   r#   s     r&   r'   r'     rH   r(   N)&__doc__sympy.assumptionsr   r   
sympy.corer   r   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_manyrE   r(   r&   <module>rZ      s  
 % 2 2    5 4 ): : &! " #O Ob #: :x ## #J #0 0 #3 3 sCT;t-- :JK L #  D! " ##H- . (()9?K L ##$45 6 ((?C Dr(   