假设¶
一个实现谓词和假设上下文的模块。
- class sympy.assumptions.assume.AppliedPredicate(predicate, *args)[源代码][源代码]¶
应用
Predicate
到参数后得到的表达式类。AppliedPredicate
仅包装其参数并保持未求值状态。要对其求值,请使用ask()
函数。- 属性:
arg
返回此假设使用的表达式。
args
返回 ‘self’ 的参数元组。
arguments
返回应用于谓词的参数。
assumptions0
返回对象 \(type\) 假设。
- 二进制符号
canonical_variables
返回一个字典,将
self.bound_symbols
中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
free_symbols
从自身的原子中返回那些自由符号。
func
表达式中的顶级函数。
function
返回谓词。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable
如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
方法
as_content_primitive
([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy
()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set
()重写布尔表达式为实数集的形式。
atoms
(*types)返回构成当前对象的原子。
class_key
()类的好顺序。
compare
(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count
(query)计算匹配的子表达式的数量。
count_ops
([visual])用于返回操作计数的 count_ops 的包装器。
doit
(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq
(other[, symbol])比较两个表达式并处理哑符号。
equals
(other)如果给定的公式具有相同的真值表,则返回
True
。find
(query[, group])查找所有匹配查询的子表达式。
fromiter
(args, **assumptions)从可迭代对象创建一个新对象。
has
(*patterns)测试是否有任何子表达式匹配任何模式。
has_free
(*patterns)如果 self 包含对象
x
作为自由表达式,则返回 True,否则返回 False。has_xfree
(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same
(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match
(pattern[, old])模式匹配。
matches
(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall
(*args)通过表达式树递归应用于参数。
refine
([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace
(query, value[, map, simultaneous, exact])将
self
中匹配的子表达式替换为value
。rewrite
(*args[, deep])使用定义的规则重写 self。
simplify
(**kwargs)请参阅 sympy.simplify 中的 simplify 函数。
sort_key
([order])返回一个排序键。
subs
(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace
(rule)替换表达式中对象的出现。
复制
could_extract_minus_sign
is_hypergeometric
to_nnf
示例
>>> from sympy import Q, ask >>> Q.integer(1) Q.integer(1)
function
属性返回谓词,arguments
属性返回参数的元组。>>> type(Q.integer(1)) <class 'sympy.assumptions.assume.AppliedPredicate'> >>> Q.integer(1).function Q.integer >>> Q.integer(1).arguments (1,)
应用的谓词可以通过
ask
评估为布尔值:>>> ask(Q.integer(1)) True
- property arg¶
返回此假设使用的表达式。
示例
>>> from sympy import Q, Symbol >>> x = Symbol('x') >>> a = Q.integer(x + 1) >>> a.arg x + 1
- property arguments¶
返回应用于谓词的参数。
- property function¶
返回谓词。
- class sympy.assumptions.assume.AssumptionsContext[源代码][源代码]¶
设置包含应用于
ask()
函数的默认假设。方法
add
(*assumptions)添加假设。
clear
从该集合中移除所有元素。
copy
返回集合的浅拷贝。
difference
返回两个或更多集合的差集作为一个新集合。
difference_update
从此集合中移除另一个集合的所有元素。
discard
如果元素是集合的成员,则将其移除。
intersection
返回两个集合的交集作为一个新的集合。
intersection_update
更新一个集合,使其包含自身与另一个集合的交集。
isdisjoint
如果两个集合的交集为空,则返回 True。
issubset
报告另一个集合是否包含此集合。
issuperset
报告此集合是否包含另一个集合。
pop
移除并返回一个任意集合元素。
remove
从集合中移除一个元素;它必须是成员。
symmetric_difference
返回两个集合的对称差作为一个新集合。
symmetric_difference_update
用自身与另一个集合的对称差更新集合。
union
返回集合的并集作为一个新集合。
update
用自身和其他集合的并集更新一个集合。
参见
示例
默认的假设上下文是
global_assumptions
,它最初是空的:>>> from sympy import ask, Q >>> from sympy.assumptions import global_assumptions >>> global_assumptions AssumptionsContext()
你可以添加默认假设:
>>> from sympy.abc import x >>> global_assumptions.add(Q.real(x)) >>> global_assumptions AssumptionsContext({Q.real(x)}) >>> ask(Q.real(x)) True
并移除它们:
>>> global_assumptions.remove(Q.real(x)) >>> print(ask(Q.real(x))) None
clear()
方法移除所有假设:>>> global_assumptions.add(Q.positive(x)) >>> global_assumptions AssumptionsContext({Q.positive(x)}) >>> global_assumptions.clear() >>> global_assumptions AssumptionsContext()
- class sympy.assumptions.assume.Predicate(*args, **kwargs)[源代码][源代码]¶
数学谓词的基类。它也作为未定义谓词对象的构造函数。
- 属性:
args
返回 ‘self’ 的参数元组。
assumptions0
返回对象 \(type\) 假设。
- 二进制符号
canonical_variables
返回一个字典,将
self.bound_symbols
中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
free_symbols
从自身的原子中返回那些自由符号。
func
表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable
如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
- 名称
方法
__call__
(*args)as_content_primitive
([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy
()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set
()重写布尔表达式为实数集的形式。
atoms
(*types)返回构成当前对象的原子。
class_key
()类的好顺序。
compare
(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count
(query)计算匹配的子表达式的数量。
count_ops
([visual])用于返回操作计数的 count_ops 的包装器。
doit
(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq
(other[, symbol])比较两个表达式并处理哑符号。
equals
(other)如果给定的公式具有相同的真值表,则返回
True
。eval
(args[, assumptions])在给定的假设下评估
self(*args)
。find
(query[, group])查找所有匹配查询的子表达式。
fromiter
(args, **assumptions)从可迭代对象创建一个新对象。
has
(*patterns)测试是否有任何子表达式匹配任何模式。
has_free
(*patterns)如果 self 包含对象
x
作为自由表达式,则返回 True,否则返回 False。has_xfree
(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same
(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match
(pattern[, old])模式匹配。
matches
(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall
(*args)通过表达式树递归应用于参数。
refine
([assumption])请参阅 sympy.assumptions 中的 refine 函数。
register
(*types, **kwargs)将签名注册到处理程序。
register_many
(*types, **kwargs)为同一处理程序注册多个签名。
replace
(query, value[, map, simultaneous, exact])将
self
中匹配的子表达式替换为value
。rewrite
(*args[, deep])使用定义的规则重写 self。
simplify
(**kwargs)请参阅 sympy.simplify 中的 simplify 函数。
sort_key
([order])返回一个排序键。
subs
(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace
(rule)替换表达式中对象的出现。
复制
could_extract_minus_sign
is_hypergeometric
to_nnf
参考文献
[1]https://zh.wikipedia.org/wiki/谓词_(数学逻辑)
[2]示例
应用并评估为布尔值:
>>> from sympy import Q, ask >>> ask(Q.prime(7)) True
你可以通过子类化和分派来定义一个新的谓词。这里,我们以定义一个性感素数 [2] 的谓词为例。
>>> from sympy import Predicate, Integer >>> class SexyPrimePredicate(Predicate): ... name = "sexyprime" >>> Q.sexyprime = SexyPrimePredicate() >>> @Q.sexyprime.register(Integer, Integer) ... def _(int1, int2, assumptions): ... args = sorted([int1, int2]) ... if not all(ask(Q.prime(a), assumptions) for a in args): ... return False ... return args[1] - args[0] == 6 >>> ask(Q.sexyprime(5, 11)) True
直接构造返回
UndefinedPredicate
,它可以被应用但不能被调度。>>> from sympy import Predicate, Integer >>> Q.P = Predicate("P") >>> type(Q.P) <class 'sympy.assumptions.assume.UndefinedPredicate'> >>> Q.P(1) Q.P(1) >>> Q.P.register(Integer)(lambda expr, assump: True) Traceback (most recent call last): ... TypeError: <class 'sympy.assumptions.assume.UndefinedPredicate'> cannot be dispatched.
- handler = <dispatched AskPredicateHandler>¶
- class sympy.assumptions.assume.UndefinedPredicate(name, handlers=None)[源代码][源代码]¶
没有处理程序的谓词。
- 属性:
args
返回 ‘self’ 的参数元组。
assumptions0
返回对象 \(type\) 假设。
- 二进制符号
canonical_variables
返回一个字典,将
self.bound_symbols
中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。- expr_free_symbols
free_symbols
从自身的原子中返回那些自由符号。
func
表达式中的顶级函数。
- 处理器
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable
如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
- 名称
方法
__call__
(expr)as_content_primitive
([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy
()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
as_set
()重写布尔表达式为实数集的形式。
atoms
(*types)返回构成当前对象的原子。
class_key
()类的好顺序。
compare
(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count
(query)计算匹配的子表达式的数量。
count_ops
([visual])用于返回操作计数的 count_ops 的包装器。
doit
(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq
(other[, symbol])比较两个表达式并处理哑符号。
equals
(other)如果给定的公式具有相同的真值表,则返回
True
。eval
(args[, assumptions])find
(query[, group])查找所有匹配查询的子表达式。
fromiter
(args, **assumptions)从可迭代对象创建一个新对象。
has
(*patterns)测试是否有任何子表达式匹配任何模式。
has_free
(*patterns)如果 self 包含对象
x
作为自由表达式,则返回 True,否则返回 False。has_xfree
(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same
(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match
(pattern[, old])模式匹配。
matches
(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
rcall
(*args)通过表达式树递归应用于参数。
refine
([assumption])请参阅 sympy.assumptions 中的 refine 函数。
register
(*types, **kwargs)将签名注册到处理程序。
register_many
(*types, **kwargs)为同一处理程序注册多个签名。
replace
(query, value[, map, simultaneous, exact])将
self
中匹配的子表达式替换为value
。rewrite
(*args[, deep])使用定义的规则重写 self。
simplify
(**kwargs)请参阅 sympy.simplify 中的 simplify 函数。
sort_key
([order])返回一个排序键。
subs
(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace
(rule)替换表达式中对象的出现。
添加处理程序
复制
could_extract_minus_sign
is_hypergeometric
remove_handler
to_nnf
示例
>>> from sympy import Predicate, Q >>> Q.P = Predicate('P') >>> Q.P.func <class 'sympy.assumptions.assume.UndefinedPredicate'> >>> Q.P.name Str('P')