§
    «³Ù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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     úY/granary/edev/quantum/lib/python3.11/site-packages/sympy/assumptions/handlers/calculus.pyÚ_r&      s9   € ð
 „~Ð!ØŒ~ÐÝ„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ð ð ˆÝ•q”x ‘}”} kÑ2Ô2ˆØð 	ØÝ•Ô# CÑ(Ô(¨+Ñ6Ô6ˆð �2Š:ˆ:˜!˜tš)˜)Ø�	˜d x°Ð&6Ð6Ð6Ø�4�4àˆ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ð ð ˆÝ•q”x ‘}”} kÑ2Ô2ˆØð 
	ØØÐØˆ~Ø�t�tÝ•1Ô% cÑ*Ô*¨KÑ8Ô8Ð@Ø�t�tØ˜UÐ"Ð"Ø�øàˆFˆFØ€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&   ©   sO  € ð „y•A‚~€~Ý•1”8˜DœHÑ%Ô% {Ñ3Ô3Ð3å•q”x ¤	Ñ*Ô*¨KÑ8Ô8€LÝ•a”h˜tœxÑ(Ô(¨+Ñ6Ô6€KØÐ Ð 3ØˆtØ�uÐÐ¥¥QÔ%7¸¼Ñ%AÔ%AÀ;Ñ!OÔ!OÐØˆuØð ˜ð ØˆtÝˆDŒI‰Œ˜!Ò Ò$Ð$­­QÔ-@ÀÄÑ-JÔ-JÈKÑ)XÔ)XÐ$ØˆtÝˆDŒI‰Œ˜!Ò Ò$Ð$­­QÔ-@ÀÄÑ-JÔ-JÈKÑ)XÔ)XÐ$ØˆtÝˆDŒI‰Œ˜!Ò Ò$Ð$¨¸Ð)=Ð)=ØˆuØˆ4r'   c                 óP   — t          t          j        | j        ¦  «        |¦  «        S ©N)r   r   r!   r   r"   s     r%   r&   r&   É   s   € å�qŒx˜œÑ!Ô! ;Ñ/Ô/Ð/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Œ:�d”i ”lÑ#Ô# [Ñ1Ô1ð ØˆuÝ•”�t”y ”|Ñ$Ô$Ð$ 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ð €Ô˜s C¨°°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'   