本文整理汇总了Python中sage.combinat.permutation.Permutation.reduced_word方法的典型用法代码示例。如果您正苦于以下问题:Python Permutation.reduced_word方法的具体用法?Python Permutation.reduced_word怎么用?Python Permutation.reduced_word使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.combinat.permutation.Permutation
的用法示例。
在下文中一共展示了Permutation.reduced_word方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: divided_difference
# 需要导入模块: from sage.combinat.permutation import Permutation [as 别名]
# 或者: from sage.combinat.permutation.Permutation import reduced_word [as 别名]
#.........这里部分代码省略.........
This is compatible when a permutation is given as input::
sage: a = X([3,2,4,1])
sage: a.divided_difference([2,3,1])
0
sage: a.divided_difference(1).divided_difference(2)
0
::
sage: a = X([4,3,2,1])
sage: a.divided_difference([2,3,1])
X[3, 2, 4, 1]
sage: a.divided_difference(1).divided_difference(2)
X[3, 2, 4, 1]
sage: a.divided_difference([4,1,3,2])
X[1, 4, 2, 3]
sage: b = X([4, 1, 3, 2])
sage: b.divided_difference(1).divided_difference(2)
X[1, 3, 4, 2]
sage: b.divided_difference(1).divided_difference(2).divided_difference(3)
X[1, 3, 2]
sage: b.divided_difference(1).divided_difference(2).divided_difference(3).divided_difference(2)
X[1]
sage: b.divided_difference(1).divided_difference(2).divided_difference(3).divided_difference(3)
0
sage: b.divided_difference(1).divided_difference(2).divided_difference(1)
0
TESTS:
Check that :trac:`23403` is fixed::
sage: X = SchubertPolynomialRing(ZZ)
sage: a = X([3,2,4,1])
sage: a.divided_difference(2)
0
sage: a.divided_difference([3,2,1])
0
sage: a.divided_difference(0)
Traceback (most recent call last):
...
ValueError: cannot apply \delta_{0} to a (= X[3, 2, 4, 1])
"""
if not self: # if self is 0
return self
Perms = Permutations()
if i in ZZ:
if algorithm == "sage":
if i <= 0:
raise ValueError(r"cannot apply \delta_{%s} to a (= %s)" % (i, self))
# The operator `\delta_i` sends the Schubert
# polynomial `X_\pi` (where `\pi` is a finitely supported
# permutation of `\{1, 2, 3, \ldots\}`) to:
# - the Schubert polynomial X_\sigma`, where `\sigma` is
# obtained from `\pi` by switching the values at `i` and `i+1`,
# if `i` is a descent of `\pi` (that is, `\pi(i) > \pi(i+1)`);
# - `0` otherwise.
# Notice that distinct `\pi`s lead to distinct `\sigma`s,
# so we can use `_from_dict` here.
res_dict = {}
for pi, coeff in self:
pi = pi[:]
n = len(pi)
if n <= i:
continue
if pi[i-1] < pi[i]:
continue
pi[i-1], pi[i] = pi[i], pi[i-1]
pi = Perms(pi).remove_extra_fixed_points()
res_dict[pi] = coeff
return self.parent()._from_dict(res_dict)
else: # if algorithm == "symmetrica":
return symmetrica.divdiff_schubert(i, self)
elif i in Perms:
if algorithm == "sage":
i = Permutation(i)
redw = i.reduced_word()
res_dict = {}
for pi, coeff in self:
next_pi = False
pi = pi[:]
n = len(pi)
for j in redw:
if n <= j:
next_pi = True
break
if pi[j-1] < pi[j]:
next_pi = True
break
pi[j-1], pi[j] = pi[j], pi[j-1]
if next_pi:
continue
pi = Perms(pi).remove_extra_fixed_points()
res_dict[pi] = coeff
return self.parent()._from_dict(res_dict)
else: # if algorithm == "symmetrica":
return symmetrica.divdiff_perm_schubert(i, self)
else:
raise TypeError("i must either be an integer or permutation")