范畴论¶
介绍¶
SymPy 的范畴论模块将允许在单个范畴内操作图表,包括在 TikZ 中绘制它们,并决定它们是否是交换的。
本模块试图遵循的一般参考工作是
Adamek, H. Herrlich. G. E. Strecker: 抽象与具体范畴。猫的乐趣。
本书的最新版本应可从以下网址免费下载:
katmat.math.uni-bremen.de/acc/acc.pdf
该模块仍处于前胚胎阶段。
基类参考¶
本节列出了实现范畴论中一些基本概念的类:对象、态射、范畴和图表。
- class sympy.categories.Object(name, **assumptions)[源代码][源代码]¶
抽象范畴中任何类型对象的基类。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
binary_symbols从自身的原子中返回那些自由符号。
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。expr_free_symbols类似于
free_symbols,但仅在自由符号包含在表达式节点中时返回它们。free_symbols从自身的原子中返回那些自由符号。
func表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
- 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
- 种类
- 名称
方法
apart([x])请参阅 sympy.polys 中的 apart 函数。
args_cnc([cset, warn, split_1])返回 [交换因子, 非交换因子] 的自身。
as_coeff_Add([rational])高效地提取求和的系数。
as_coeff_Mul([rational])高效地提取乘积的系数。
as_coeff_add(*deps)返回元组 (c, args),其中 self 被写成一个 Add,
a。as_coeff_exponent(x)c*x**e -> c,e其中 x 可以是任何符号表达式。as_coeff_mul(*deps, **kwargs)返回元组 (c, args),其中 self 被写成一个 Mul,
m。as_coefficient(expr)提取给定表达式中的符号系数。
as_coefficients_dict(*syms)返回一个将术语映射到其有理数系数的字典。
as_content_primitive([radical, clear])此方法应递归地从所有参数中移除一个 Rational,并返回该内容和新的 self(原始类型)。
as_dummy()as_expr(*gens)将多项式转换为 SymPy 表达式。
as_independent(*deps, **hint)将 Mul 或 Add 的大部分天真分离为不依赖于 deps 的参数。
as_leading_term(*symbols[, logx, cdir])返回自身级数展开的领先(非零)项。
as_numer_denom()返回一个表达式的分子和分母。
as_ordered_factors([order])返回有序因子列表(如果是 Mul),否则返回 [self]。
as_ordered_terms([order, data])将表达式转换为有序的项列表。
as_poly(*gens, **args)将
self转换为多项式,或返回None。as_powers_dict()将自身作为一个因子的字典返回,每个因子都被视为一个幂。
as_real_imag([deep])as_set()as_terms()将一个表达式转换为项的列表。
aseries([x, n, bound, hir])自变量的渐近级数展开
atoms(*types)返回构成当前对象的原子。
cancel(*gens, **args)参见 sympy.polys 中的取消函数
class_key()coeff(x[, n, right, _first])返回包含
x**n的项中的系数。collect(syms[, func, evaluate, exact, ...])请参阅 sympy.simplify 中的 collect 函数。
combsimp()参见 sympy.simplify 中的 combsimp 函数
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
compute_leading_term(x[, logx])已弃用的函数,用于计算级数的首项。
conjugate()返回 'self' 的复数共轭。
could_extract_minus_sign()如果 self 以 -1 作为前导因子,或在求和中有比正号更多的负号,则返回 True,否则返回 False。
count(query)计算匹配的子表达式的数量。
count_ops([visual])doit(**hints)dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
equals(other[, failing_expression])如果 self == other 则返回 True,如果不相等则返回 False,或者返回 None。
evalf([n, subs, maxn, chop, strict, quad, ...])将给定的公式计算到 n 位精度。
expand([deep, modulus, power_base, ...])使用提示扩展表达式。
extract_additively(c)如果可以从自身减去 c 并使所有匹配的系数趋近于零,则返回 self - c,否则返回 None。
extract_branch_factor([allow_half])尝试以
exp_polar(2*pi*I*n)*z的方式优雅地表示自身。extract_multiplicatively(c)如果无法以一种良好的方式将 self 表示为 c * 某个东西,即保留 self 参数的属性,则返回 None。
factor(*gens, **args)参见 sympy.polys.polytools 中的 factor() 函数
find(query[, group])查找所有匹配查询的子表达式。
fourier_series([limits])计算自身的傅里叶正弦/余弦级数。
fps([x, x0, dir, hyper, order, rational, full])计算自身的形式幂级数。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
gammasimp()参见 sympy.simplify 中的 gammasimp 函数
getO()如果有加法 O(..) 符号,则返回该符号,否则返回 None。
getn()返回表达式的顺序。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
integrate(*args, **kwargs)请参阅 sympy.integrals 中的 integrate 函数。
invert(g, *gens, **args)返回
self对g的乘法逆元,其中self``(和 ``g)可以是符号表达式。is_algebraic_expr(*syms)此测试给定的表达式是否在给定的符号 syms 中是代数的。
is_constant(*wrt, **flags)is_meromorphic(x, a)此测试表达式是否作为给定符号
x的函数在点a处是亚纯的。is_polynomial(*syms)如果 self 是 syms 中的多项式,则返回 True,否则返回 False。
is_rational_function(*syms)测试函数是否是给定符号 syms 中的两个多项式的比率。
is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
leadterm(x[, logx, cdir])返回前导项 a*x**b 作为元组 (a, b)。
limit(x, xlim[, dir])计算极限 x->xlim。
lseries([x, x0, dir, logx, cdir])用于生成序列项的迭代器的包装器。
match(pattern[, old])模式匹配。
matches(expr[, repl_dict, old])n([n, subs, maxn, chop, strict, quad, verbose])将给定的公式计算到 n 位精度。
normal()将表达式作为分数返回。
nseries([x, x0, n, dir, logx, cdir])如果假设允许,则包装到 _eval_nseries,否则包装到 series。
nsimplify([constants, tolerance, full])参见 sympy.simplify 中的 nsimplify 函数
powsimp(*args, **kwargs)参见 sympy.simplify 中的 powsimp 函数
primitive()返回可以从自身每个项中非递归提取的正有理数(即,自身被视为一个加法)。
radsimp(**kwargs)参见 sympy.simplify 中的 radsimp 函数
ratsimp()参见 sympy.simplify 中的 ratsimp 函数。
rcall(*args)通过表达式树递归应用于参数。
refine([assumption])请参阅 sympy.assumptions 中的 refine 函数。
removeO()如果存在,移除加性的 O(..) 符号
replace(query, value[, map, simultaneous, exact])将
self中匹配的子表达式替换为value。rewrite(*args[, deep])使用定义的规则重写 self。
round([n])返回 x 四舍五入到给定的十进制位数。
separate([deep, force])请参阅 sympy.simplify 中的单独函数
series([x, x0, n, dir, logx, cdir])在
x = x0附近对 "self" 进行级数展开,当 n=None 时逐项给出级数项(即惰性级数),否则当 n != None 时一次性给出所有项。simplify(**kwargs)请参阅 sympy.simplify 中的 simplify 函数。
sort_key([order])subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
taylor_term(n, x, *previous_terms)泰勒项的通用方法。
together(*args, **kwargs)请参阅 sympy.polys 中的 together 函数。
trigsimp(**args)参见 sympy.simplify 中的 trigsimp 函数
xreplace(rule[, hack2])伴随
as_base_exp
复制
差异
目录
is_hypergeometric
to_nnf
转置
- class sympy.categories.Morphism(domain, codomain)[源代码][源代码]¶
抽象范畴中任何态射的基类。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。codomain返回态射的余域。
domain返回态射的域。
- 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
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
compose(other)使用提供的态射组合自身。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
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
- property codomain¶
返回态射的余域。
示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> f = NamedMorphism(A, B, "f") >>> f.codomain Object("B")
- compose(other)[源代码][源代码]¶
使用提供的态射组合自身。
组合中元素的顺序是通常的顺序,即,要构造 \(g\circ f\) 使用
g.compose(f)。示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> g * f CompositeMorphism((NamedMorphism(Object("A"), Object("B"), "f"), NamedMorphism(Object("B"), Object("C"), "g"))) >>> (g * f).domain Object("A") >>> (g * f).codomain Object("C")
- property domain¶
返回态射的域。
示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> f = NamedMorphism(A, B, "f") >>> f.domain Object("A")
- class sympy.categories.NamedMorphism(domain, codomain, name)[源代码][源代码]¶
表示一个具有名称的态射。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。codomain返回态射的余域。
domain返回态射的域。
- 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
name返回态射的名称。
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
compose(other)使用提供的态射组合自身。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
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
参见
示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> f = NamedMorphism(A, B, "f") >>> f NamedMorphism(Object("A"), Object("B"), "f") >>> f.name 'f'
- property name¶
返回态射的名称。
示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> f = NamedMorphism(A, B, "f") >>> f.name 'f'
- class sympy.categories.CompositeMorphism(*components)[源代码][源代码]¶
表示一个由其他态射组合而成的态射。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。codomain返回此复合态射的余域。
components返回此复合态射的组成部分。
domain返回此复合态射的域。
- 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
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
compose(other)使用提供的态射组合自身。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
find(query[, group])查找所有匹配查询的子表达式。
flatten(new_name)忽略了这个态射的复合结构。
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
示例
>>> from sympy.categories import Object, NamedMorphism, CompositeMorphism >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> g * f CompositeMorphism((NamedMorphism(Object("A"), Object("B"), "f"), NamedMorphism(Object("B"), Object("C"), "g"))) >>> CompositeMorphism(f, g) == g * f True
- property codomain¶
返回此复合态射的余域。
复合态射的余定义域是其最后一个分量的余定义域。
示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> (g * f).codomain Object("C")
- property components¶
返回此复合态射的组成部分。
示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> (g * f).components (NamedMorphism(Object("A"), Object("B"), "f"), NamedMorphism(Object("B"), Object("C"), "g"))
- property domain¶
返回此复合态射的域。
复合态射的定义域是其第一个分量的定义域。
示例
>>> from sympy.categories import Object, NamedMorphism >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> (g * f).domain Object("A")
- class sympy.categories.IdentityMorphism(domain)[源代码][源代码]¶
表示一个恒等态射。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。codomain返回态射的余域。
domain返回态射的域。
- 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
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
compose(other)使用提供的态射组合自身。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
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
参见
示例
>>> from sympy.categories import Object, NamedMorphism, IdentityMorphism >>> A = Object("A") >>> B = Object("B") >>> f = NamedMorphism(A, B, "f") >>> id_A = IdentityMorphism(A) >>> id_B = IdentityMorphism(B) >>> f * id_A == f True >>> id_B * f == f True
- class sympy.categories.Category(
- name,
- objects=EmptySet,
- commutative_diagrams=EmptySet,
一个(抽象)类别。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。commutative_diagrams返回在此类别中已知为交换图的
FiniteSet图集。- 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
name返回此分类的名称。
objects返回此类别对象的类。
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
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
参见
示例
>>> from sympy.categories import Object, NamedMorphism, Diagram, Category >>> from sympy import FiniteSet >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g]) >>> K = Category("K", commutative_diagrams=[d]) >>> K.commutative_diagrams == FiniteSet(d) True
- property commutative_diagrams¶
返回在此类别中已知为交换图的
FiniteSet图集。示例
>>> from sympy.categories import Object, NamedMorphism, Diagram, Category >>> from sympy import FiniteSet >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g]) >>> K = Category("K", commutative_diagrams=[d]) >>> K.commutative_diagrams == FiniteSet(d) True
- property name¶
返回此分类的名称。
示例
>>> from sympy.categories import Category >>> K = Category("K") >>> K.name 'K'
- property objects¶
返回此类别对象的类。
示例
>>> from sympy.categories import Object, Category >>> from sympy import FiniteSet >>> A = Object("A") >>> B = Object("B") >>> K = Category("K", FiniteSet(A, B)) >>> K.objects Class({Object("A"), Object("B")})
- class sympy.categories.Diagram(*args)[源代码][源代码]¶
表示某个类别中的一个图表。
- 属性:
args返回 ‘self’ 的参数元组。
assumptions0返回对象 \(type\) 假设。
canonical_variables返回一个字典,将
self.bound_symbols中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。conclusions返回此图表的结论。
- 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
objects返回出现在此图中的对象的
FiniteSet。premises返回此图的假设。
方法
as_content_primitive([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
atoms(*types)返回构成当前对象的原子。
class_key()类的好顺序。
compare(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count(query)计算匹配的子表达式的数量。
count_ops([visual])用于返回操作计数的 count_ops 的包装器。
doit(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq(other[, symbol])比较两个表达式并处理哑符号。
find(query[, group])查找所有匹配查询的子表达式。
fromiter(args, **assumptions)从可迭代对象创建一个新对象。
has(*patterns)测试是否有任何子表达式匹配任何模式。
has_free(*patterns)如果 self 包含对象
x作为自由表达式,则返回 True,否则返回 False。has_xfree(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
hom(A, B)返回一个由对象
A和B之间的态射组成的 2-元组:一个是作为前提列出的态射集合,另一个是作为结论列出的态射集合。is_same(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
is_subdiagram(diagram)检查
diagram是否是self的子图。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])返回一个排序键。
subdiagram_from_objects(objects)如果
objects是self对象的子集,则返回一个图,该图的前提是self中所有域和陪域都在objects中的前提,结论亦然。subs(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
xreplace(rule)替换表达式中对象的出现。
复制
could_extract_minus_sign
is_hypergeometric
参考文献
[Pare1970] B. Pareigis: 范畴与函子。 学术出版社,1970。
示例
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> from sympy import pprint, default_sort_key >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g]) >>> premises_keys = sorted(d.premises.keys(), key=default_sort_key) >>> pprint(premises_keys, use_unicode=False) [g*f:A-->C, id:A-->A, id:B-->B, id:C-->C, f:A-->B, g:B-->C] >>> pprint(d.premises, use_unicode=False) {g*f:A-->C: EmptySet, id:A-->A: EmptySet, id:B-->B: EmptySet, id:C-->C: EmptySet, f:A-->B: EmptySet, g:B-->C: EmptySet} >>> d = Diagram([f, g], {g * f: "unique"}) >>> pprint(d.conclusions,use_unicode=False) {g*f:A-->C: {unique}}
- property conclusions¶
返回此图表的结论。
示例
>>> from sympy.categories import Object, NamedMorphism >>> from sympy.categories import IdentityMorphism, Diagram >>> from sympy import FiniteSet >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g]) >>> IdentityMorphism(A) in d.premises.keys() True >>> g * f in d.premises.keys() True >>> d = Diagram([f, g], {g * f: "unique"}) >>> d.conclusions[g * f] == FiniteSet("unique") True
- hom(A, B)[源代码][源代码]¶
返回一个由对象
A和B之间的态射组成的 2-元组:一个是作为前提列出的态射集合,另一个是作为结论列出的态射集合。示例
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> from sympy import pretty >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g], {g * f: "unique"}) >>> print(pretty(d.hom(A, C), use_unicode=False)) ({g*f:A-->C}, {g*f:A-->C})
- is_subdiagram(diagram)[源代码][源代码]¶
检查
diagram是否是self的子图。如果 \(D'\) 的所有前提(结论)都包含在 \(D\) 的前提(结论)中,则图 \(D'\) 是 \(D\) 的子图。\(D'\) 和 \(D\) 中包含的态射应具有相同的属性,以便 \(D'\) 成为 \(D\) 的子图。示例
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g], {g * f: "unique"}) >>> d1 = Diagram([f]) >>> d.is_subdiagram(d1) True >>> d1.is_subdiagram(d) False
- property objects¶
返回出现在此图中的对象的
FiniteSet。示例
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g]) >>> d.objects {Object("A"), Object("B"), Object("C")}
- property premises¶
返回此图的假设。
示例
>>> from sympy.categories import Object, NamedMorphism >>> from sympy.categories import IdentityMorphism, Diagram >>> from sympy import pretty >>> A = Object("A") >>> B = Object("B") >>> f = NamedMorphism(A, B, "f") >>> id_A = IdentityMorphism(A) >>> id_B = IdentityMorphism(B) >>> d = Diagram([f]) >>> print(pretty(d.premises, use_unicode=False)) {id:A-->A: EmptySet, id:B-->B: EmptySet, f:A-->B: EmptySet}
- subdiagram_from_objects(objects)[源代码][源代码]¶
如果
objects是self对象的子集,返回一个图表,该图表的前提是self中所有域和陪域都在objects中的前提,结论亦然。属性保持不变。示例
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> from sympy import FiniteSet >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g], {f: "unique", g*f: "veryunique"}) >>> d1 = d.subdiagram_from_objects(FiniteSet(A, B)) >>> d1 == Diagram([f], {f: "unique"}) True
图表绘制¶
本节列出了允许自动绘制图表的类。
- class sympy.categories.diagram_drawing.DiagramGrid(diagram, groups=None, **hints)[源代码][源代码]¶
构建并保持图表在网格中的拟合。
参见
Diagram
参考文献
[FiveLemma]- property height¶
返回此图表布局中的行数。
示例
>>> from sympy.categories import Object, NamedMorphism >>> from sympy.categories import Diagram, DiagramGrid >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> diagram = Diagram([f, g]) >>> grid = DiagramGrid(diagram) >>> grid.height 2
- property morphisms¶
返回那些(及其属性)足够有意义以供绘制的态射。
示例
>>> from sympy.categories import Object, NamedMorphism >>> from sympy.categories import Diagram, DiagramGrid >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> diagram = Diagram([f, g]) >>> grid = DiagramGrid(diagram) >>> grid.morphisms {NamedMorphism(Object("A"), Object("B"), "f"): EmptySet, NamedMorphism(Object("B"), Object("C"), "g"): EmptySet}
- property width¶
返回此图表布局中的列数。
示例
>>> from sympy.categories import Object, NamedMorphism >>> from sympy.categories import Diagram, DiagramGrid >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> diagram = Diagram([f, g]) >>> grid = DiagramGrid(diagram) >>> grid.width 2
- class sympy.categories.diagram_drawing.ArrowStringDescription(
- unit,
- curving,
- curving_amount,
- looping_start,
- looping_end,
- horizontal_direction,
- vertical_direction,
- label_position,
- label,
存储生成箭头Xy-pic描述所需的信息。
这个类的主要目标是抽象掉箭头的字符串表示,并提供生成实际 Xy-pic 字符串的功能。
unit设置将用于指定弯曲量和其他距离的单位。horizontal_direction应为一个字符串"r"或"l",指定箭头目标单元相对于当前单元的水平偏移。vertical_direction应使用一系列"d"或"u"来指定垂直偏移。label_position应为"^"、"_"或"|",以指定标签应位于箭头上方、箭头下方或在箭头断裂处上方。请注意,“上方”和“下方”的概念是相对于箭头方向的。label存储态射标签。这工作原理如下(忽略尚未解释的参数):
>>> from sympy.categories.diagram_drawing import ArrowStringDescription >>> astr = ArrowStringDescription( ... unit="mm", curving=None, curving_amount=None, ... looping_start=None, looping_end=None, horizontal_direction="d", ... vertical_direction="r", label_position="_", label="f") >>> print(str(astr)) \ar[dr]_{f}
curving应该是"^"或"_"之一,以指定箭头弯曲的方向。curving_amount是一个数字,描述了态射将弯曲多少个unit单位:>>> astr = ArrowStringDescription( ... unit="mm", curving="^", curving_amount=12, ... looping_start=None, looping_end=None, horizontal_direction="d", ... vertical_direction="r", label_position="_", label="f") >>> print(str(astr)) \ar@/^12mm/[dr]_{f}
looping_start和looping_end目前仅用于循环态射,即那些具有相同定义域和上域的态射。这两个属性应存储一个有效的 Xy-pic 方向,并相应地指定箭头进入的方向和箭头返回的方向:>>> astr = ArrowStringDescription( ... unit="mm", curving=None, curving_amount=None, ... looping_start="u", looping_end="l", horizontal_direction="", ... vertical_direction="", label_position="_", label="f") >>> print(str(astr)) \ar@(u,l)[]_{f}
label_displacement控制箭头标签与箭头末端的距离。例如,要将箭头标签放置在箭头头部附近,请使用 “>”:>>> astr = ArrowStringDescription( ... unit="mm", curving="^", curving_amount=12, ... looping_start=None, looping_end=None, horizontal_direction="d", ... vertical_direction="r", label_position="_", label="f") >>> astr.label_displacement = ">" >>> print(str(astr)) \ar@/^12mm/[dr]_>{f}
最后,
arrow_style用于指定箭头样式。例如,要获得虚线箭头,请使用 “{–>}” 作为箭头样式:>>> astr = ArrowStringDescription( ... unit="mm", curving="^", curving_amount=12, ... looping_start=None, looping_end=None, horizontal_direction="d", ... vertical_direction="r", label_position="_", label="f") >>> astr.arrow_style = "{-->}" >>> print(str(astr)) \ar@/^12mm/@{-->}[dr]_{f}
注释
由
XypicDiagramDrawer构造的ArrowStringDescription实例将提供给格式化器进一步使用。用户不需要自己构造ArrowStringDescription实例。为了能够正确地使用这个类,建议读者查阅 Xy-pic 用户指南,该指南可在 [Xypic] 获取。
参考文献
[Xypic]
- class sympy.categories.diagram_drawing.XypicDiagramDrawer[源代码][源代码]¶
给定一个
Diagram和相应的DiagramGrid,生成该图的 Xy-pic 表示。这个类中最重要的方法是
draw。考虑以下三角形图表:>>> from sympy.categories import Object, NamedMorphism, Diagram >>> from sympy.categories import DiagramGrid, XypicDiagramDrawer >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> diagram = Diagram([f, g], {g * f: "unique"})
要绘制此图,需要使用
DiagramGrid来布局其对象:>>> grid = DiagramGrid(diagram)
最后,绘图:
>>> drawer = XypicDiagramDrawer() >>> print(drawer.draw(diagram, grid)) \xymatrix{ A \ar[d]_{g\circ f} \ar[r]^{f} & B \ar[ld]^{g} \\ C & }
更多详情请参阅此方法的文档字符串。
要控制箭头的外观,使用格式化器。字典
arrow_formatters将态射映射到格式化函数。格式化器接受一个ArrowStringDescription并允许修改由此暴露的任何箭头属性。例如,要让所有具有unique属性的态射显示为虚线箭头,并在其名称前加上 \(\exists !\),应执行以下操作:>>> def formatter(astr): ... astr.label = r"\exists !" + astr.label ... astr.arrow_style = "{-->}" >>> drawer.arrow_formatters["unique"] = formatter >>> print(drawer.draw(diagram, grid)) \xymatrix{ A \ar@{-->}[d]_{\exists !g\circ f} \ar[r]^{f} & B \ar[ld]^{g} \\ C & }
要修改图中所有箭头的外观,请设置
default_arrow_formatter。例如,要将所有态射标签放置在离箭头头部稍远的位置,使其看起来更居中,请执行以下操作:>>> def default_formatter(astr): ... astr.label_displacement = "(0.45)" >>> drawer.default_arrow_formatter = default_formatter >>> print(drawer.draw(diagram, grid)) \xymatrix{ A \ar@{-->}[d]_(0.45){\exists !g\circ f} \ar[r]^(0.45){f} & B \ar[ld]^(0.45){g} \\ C & }
在一些图表中,某些态射被绘制为弯曲的箭头。考虑以下图表:
>>> D = Object("D") >>> E = Object("E") >>> h = NamedMorphism(D, A, "h") >>> k = NamedMorphism(D, B, "k") >>> diagram = Diagram([f, g, h, k]) >>> grid = DiagramGrid(diagram) >>> drawer = XypicDiagramDrawer() >>> print(drawer.draw(diagram, grid)) \xymatrix{ A \ar[r]_{f} & B \ar[d]^{g} & D \ar[l]^{k} \ar@/_3mm/[ll]_{h} \\ & C & }
要控制态射默认的弯曲程度,可以使用
unit和default_curving_amount属性:>>> drawer.unit = "cm" >>> drawer.default_curving_amount = 1 >>> print(drawer.draw(diagram, grid)) \xymatrix{ A \ar[r]_{f} & B \ar[d]^{g} & D \ar[l]^{k} \ar@/_1cm/[ll]_{h} \\ & C & }
在一些图中,同一对对象之间存在多个弯曲的态射。要控制两个连续态射之间的弯曲变化程度,请使用
default_curving_step:>>> drawer.default_curving_step = 1 >>> h1 = NamedMorphism(A, D, "h1") >>> diagram = Diagram([f, g, h, k, h1]) >>> grid = DiagramGrid(diagram) >>> print(drawer.draw(diagram, grid)) \xymatrix{ A \ar[r]_{f} \ar@/^1cm/[rr]^{h_{1}} & B \ar[d]^{g} & D \ar[l]^{k} \ar@/_2cm/[ll]_{h} \\ & C & }
default_curving_step的默认值是 4 个单位。方法
draw(diagram, grid[, masked, diagram_format])返回以
grid布局的diagram的 Xy-pic 表示。- draw(
- diagram,
- grid,
- masked=None,
- diagram_format='',
返回以
grid布局的diagram的 Xy-pic 表示。考虑以下简单的三角形图。
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> from sympy.categories import DiagramGrid, XypicDiagramDrawer >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> diagram = Diagram([f, g], {g * f: "unique"})
要绘制此图,需要使用
DiagramGrid来布局其对象:>>> grid = DiagramGrid(diagram)
最后,绘图:
>>> drawer = XypicDiagramDrawer() >>> print(drawer.draw(diagram, grid)) \xymatrix{ A \ar[d]_{g\circ f} \ar[r]^{f} & B \ar[ld]^{g} \\ C & }
参数
masked可以用于在图示中跳过态射:>>> print(drawer.draw(diagram, grid, masked=[g * f])) \xymatrix{ A \ar[r]^{f} & B \ar[ld]^{g} \\ C & }
最后,可以使用
diagram_format参数来指定图表的格式字符串。例如,要增加1厘米的间距,可以按如下操作:>>> print(drawer.draw(diagram, grid, diagram_format="@+1cm")) \xymatrix@+1cm{ A \ar[d]_{g\circ f} \ar[r]^{f} & B \ar[ld]^{g} \\ C & }
- sympy.categories.diagram_drawing.xypic_draw_diagram(
- diagram,
- masked=None,
- diagram_format='',
- groups=None,
- **hints,
提供了一个结合
DiagramGrid和XypicDiagramDrawer的快捷方式。返回diagram的 Xy-pic 表示。参数masked是一个不绘制的态射列表。参数diagram_format是插入在“xymatrix”之后的格式字符串。groups应为一组逻辑组。hints将直接传递给DiagramGrid的构造函数。有关参数的更多信息,请参阅
DiagramGrid和XypicDiagramDrawer.draw的文档字符串。示例
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> from sympy.categories import xypic_draw_diagram >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> diagram = Diagram([f, g], {g * f: "unique"}) >>> print(xypic_draw_diagram(diagram)) \xymatrix{ A \ar[d]_{g\circ f} \ar[r]^{f} & B \ar[ld]^{g} \\ C & }
- sympy.categories.diagram_drawing.preview_diagram(
- diagram,
- masked=None,
- diagram_format='',
- groups=None,
- output='png',
- viewer=None,
- euler=True,
- **hints,
结合了
xypic_draw_diagram和sympy.printing.preview的功能。参数masked、diagram_format、groups和hints传递给xypic_draw_diagram,而output、viewer和euler传递给preview。示例
>>> from sympy.categories import Object, NamedMorphism, Diagram >>> from sympy.categories import preview_diagram >>> A = Object("A") >>> B = Object("B") >>> C = Object("C") >>> f = NamedMorphism(A, B, "f") >>> g = NamedMorphism(B, C, "g") >>> d = Diagram([f, g], {g * f: "unique"}) >>> preview_diagram(d)