K i:ddZddlmZmZddlmZddlmZdZGddeZ d d Z d d Z d d Z y) a1 Functions and wrapper object to call assumption property and predicate query with same syntax. In SymPy, there are two assumption systems. Old assumption system is defined in sympy/core/assumptions, and it can be accessed by attribute such as ``x.is_even``. New assumption system is defined in sympy/assumptions, and it can be accessed by predicates such as ``Q.even(x)``. Old assumption is fast, while new assumptions can freely take local facts. In general, old assumption is used in evaluation method and new assumption is used in refinement method. In most cases, both evaluation and refinement follow the same process, and the only difference is which assumption system is used. This module provides ``is_[...]()`` functions and ``AssumptionsWrapper()`` class which allows using two systems with same syntax so that parallel code implementation can be avoided. Examples ======== For multiple use, use ``AssumptionsWrapper()``. >>> from sympy import Q, Symbol >>> from sympy.assumptions.wrapper import AssumptionsWrapper >>> x = Symbol('x') >>> _x = AssumptionsWrapper(x, Q.even(x)) >>> _x.is_integer True >>> _x.is_odd False For single use, use ``is_[...]()`` functions. >>> from sympy.assumptions.wrapper import is_infinite >>> a = Symbol('a') >>> print(is_infinite(a)) None >>> is_infinite(a, Q.finite(a)) False )askQ)Basic)_sympifycfd}|S)Ncttt}t||j|j}|SN)getattrrrexpr assumptions)selfpredretfacts _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/assumptions/wrapper.pygetitzmake_eval_method..getit4s.q$$tyy/4#3#34 )rrs` rmake_eval_methodr3s LrceZdZdZd"fd ZedZedZedZedZ edZ edZ ed Z ed Z ed Zed Zed ZedZedZedZedZedZedZedZedZedZedZedZedZedZedZedZedZ edZ!edZ"ed Z#ed!Z$xZ%S)#AssumptionsWrappera Wrapper over ``Basic`` instances to call predicate query by ``.is_[...]`` property Parameters ========== expr : Basic assumptions : Boolean, optional Examples ======== >>> from sympy import Q, Symbol >>> from sympy.assumptions.wrapper import AssumptionsWrapper >>> x = Symbol('x', even=True) >>> AssumptionsWrapper(x).is_integer True >>> y = Symbol('y') >>> AssumptionsWrapper(y, Q.even(y)).is_integer True With ``AssumptionsWrapper``, both evaluation and refinement can be supported by single implementation. >>> from sympy import Function >>> class MyAbs(Function): ... @classmethod ... def eval(cls, x, assumptions=True): ... _x = AssumptionsWrapper(x, assumptions) ... if _x.is_nonnegative: ... return x ... if _x.is_negative: ... return -x ... def _eval_refine(self, assumptions): ... return MyAbs.eval(self.args[0], assumptions) >>> MyAbs(x) MyAbs(x) >>> MyAbs(x).refine(Q.positive(x)) x >>> MyAbs(Symbol('y', negative=True)) -y c`||St|||t|}||_||_|Sr )super__new__rr r )clsr r obj __class__s rrzAssumptionsWrapper.__new__js8  Kgoc4+)>?% r algebraic antihermitian commutativecomplex compositeevenextended_negativeextended_nonnegativeextended_nonpositiveextended_nonzeroextended_positive extended_realfinite hermitian imaginaryinfiniteinteger irrationalnegative noninteger nonnegative nonpositivenonzerooddpolarpositiveprimerationalrealtranscendentalzeror )&__name__ __module__ __qualname____doc__rr_eval_is_algebraic_eval_is_antihermitian_eval_is_commutative_eval_is_complex_eval_is_composite _eval_is_even_eval_is_extended_negative_eval_is_extended_nonnegative_eval_is_extended_nonpositive_eval_is_extended_nonzero_eval_is_extended_positive_eval_is_extended_real_eval_is_finite_eval_is_hermitian_eval_is_imaginary_eval_is_infinite_eval_is_integer_eval_is_irrational_eval_is_negative_eval_is_noninteger_eval_is_nonnegative_eval_is_nonpositive_eval_is_nonzero _eval_is_odd_eval_is_polar_eval_is_positive_eval_is_prime_eval_is_rational _eval_is_real_eval_is_transcendental _eval_is_zero __classcell__)rs@rrr<sd,Z*+6-o>+M:' 2)+6$V,M!12E!F$45K$L!$45K$L! 01C D!12E!F-o>&x0O)+6)+6(4' 2*<8(4*<8+M:+M:' 2#E*L%g.N(4%g.N(4$V,M./?@$V,MrrNc\| |jSttj||Sr ) is_infiniterrr-rr s rrbrbs' qzz# ,,rc\| |jSttj||Sr )is_extended_realrrr)rcs rreres*### qs#[ 11rc\| |jSttj||Sr )is_extended_nonnegativerrr%rcs rrgrgs,*** q%%c*K 88rr ) r@sympy.assumptionsrrsympy.core.basicrsympy.core.sympifyrrrrbrergrrrrks9+Z%"'T-T-r- 2 9r