K iw `dZddlmZmZddlmZmZmZmZm Z ddl m Z m Z m Z mZmZmZmZmZmZmZmZddlmZmZmZmZmZddlmZddlmZm Z m!Z!m"Z"ejFe d Z$ejFed Z$ejFed Z$ejFed Z$ejFed Z$ejFedZ$ejJeeeeee eee dZ$ejJee e dZ$ejFedZ$e jFedZ$e!jFe dZ$e!jJe edZ$e"jFe dZ$e"jJe edZ$y)zc This module contains query handlers responsible for calculus queries: infinitesimal, finite, etc. )Qask)ExprAddMulPowSymbol) NegativeInfinity GoldenRatioInfinityExp1ComplexInfinity ImaginaryUnitNaNNumberPiETribonacciConstant)cosexplogsignsin) conjuncts)FinitePredicateInfinitePredicatePositiveInfinitePredicateNegativeInfinitePredicatecv|j |jStj|t|vryy)z Handles Symbol. NT) is_finiterfiniterexpr assumptionss i/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/assumptions/handlers/calculus.py_r's3  ~~!~~xx~;// cd}d}|jD]`}ttj||}|r%ttj||}|dk7r||k7s|d||fvry|}|dus_|}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)argsrrr"extended_positive)r$r%rresultarg_boundedss r&r'r' s| D Fyyqxx}k2   ##C(+ 6 2:!t) dx&66D  F Mr(c2d}d}|jD]}ttj||}|r+ttj||dusF|duryd}O|-|yttj ||y|dus{d}~|ryd}|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 TFN)r+rrr"zeroextended_nonzero)r$r%r- possible_zeror.r/s r&r'r'rsNFMyyqxx}k2 166#; ,E9U? $  ~1%%c*K8@U"F#$ Mr(c|jtk(r)ttj|j |Sttj|j|}ttj|j |}||y|dur*ttj |j |ry|rg|rettj|j|}ttj|j |}|dur|dury|dur|duryyt|jdkdk(r*ttj|j |ryt|jdk\dk(r*ttj|j |ryt|jdk\dk(r|duryy)z * Unbounded ** NonZero -> Unbounded * Bounded ** Bounded -> Bounded * Abs()<=1 ** Positive -> Bounded * Abs()>=1 ** Negative -> Bounded * Otherwise unknown NFT) baserrrr"rr3r2negativeabsr,extended_negative)r$r% base_bounded exp_bounded is_base_zerois_exp_negatives r&r'r'sl yyA~188DHH%{33qxx *K8Lahhtxx(+6K 3uQ%7%7%A;!O 166$)),[9 ajj2;? 4 Ot$; u $)E DII!$Q-@-@-JK)X DII!$Q-@-@-JK)X DII!$)= r(cTttj|j|SN)rrr"rr#s r&r'r's qxx!; //r(cttj|jd|ryttj|jd|S)NrF)rrinfiniter+r2r#s r&r'r'sC 1::diil #[1 tyy|$$k 22r(cyNTr#s r&r'r's r(cyNFrEr#s r&r'r' r(cyr@rEr#s r&r'r' r(cVtj|j|}|y| Sr@)rr" _eval_ask)r$r%r!s r&r'r's+((5I=r(cyrDrEr#s r&r'r'rJr(cyrGrEr#s r&r'r'rHr(cyrDrEr#s r&r'r' rJr(cyrGrEr#s r&r'r'rHr(N)&__doc__sympy.assumptionsrr sympy.corerrrrr sympy.core.numbersr r r r rrrrrrrsympy.functionsrrrrrsympy.logic.boolalgrpredicates.calculusrrrrregisterr' register_manyrEr(r&rZs7 %2254)::&!"#OOb#::x###J#00#33sCT; t--:JKL#D!"$##H-.)(()9?KL$##$456)((?CDr(