本文整理汇总了Python中sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing.zero方法的典型用法代码示例。如果您正苦于以下问题:Python PolynomialRing.zero方法的具体用法?Python PolynomialRing.zero怎么用?Python PolynomialRing.zero使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing
的用法示例。
在下文中一共展示了PolynomialRing.zero方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: TestGradedModule
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
class TestGradedModule(unittest.TestCase):
def setUp(self):
self.poly_ring = PolynomialRing(QQ,"x",3);
self.x = self.poly_ring.gens()[0];
self.y = self.poly_ring.gens()[1];
self.z = self.poly_ring.gens()[2];
def test_monomial_basis_zero(self):
one = self.poly_ring.one()
zero = self.poly_ring.zero()
gm = GradedModule([[one,one,one,one]],[0,1,2,3],[1,2,3])
self.assertEqual(gm.monomial_basis(0),[(one,zero,zero,zero)])
def test_monomial_basis(self):
x = self.x
y = self.y
one = self.poly_ring.one()
zero = self.poly_ring.zero()
gm = GradedModule([[one,one]],[0,1],[1,2,3])
true_basis = [(x**2,zero),(y,zero),(zero,x)]
self.assertEqual(Set(gm.monomial_basis(2)),Set(true_basis))
def test_homogeneous_parts_A(self):
one = self.poly_ring.one()
zero = self.poly_ring.zero()
gm = GradedModule([[one,one]],[0,1],[1,2,3])
parts = gm.get_homogeneous_parts([one,one])
parts_true = { 0:[one,zero] , 1:[zero,one] }
self.assertEqual(parts,parts_true)
def test_homogeneous_parts_B(self):
x = self.x
y = self.y
z = self.z
one = self.poly_ring.one()
zero = self.poly_ring.zero()
gm = GradedModule([[one,one]],[0,1],[1,2,3])
parts = gm.get_homogeneous_parts([x*y,x**3+z*y])
self.assertEqual(parts,{3:[x*y,zero],4:[zero,x**3],6:[zero,z*y]})
def test_homogeneous_part_basisA(self):
x = self.x
y = self.y
z = self.z
one = self.poly_ring.one()
gm = GradedModule([[z,one,x**2 + y]],[0,1,2],[1,2,3])
basis = gm.homogeneous_part_basis(6);
self.assertEqual(len(basis),10)
def test_homogeneous_part_basisB(self):
#From bug found with ncd
x = self.x
y = self.y
z = self.z
zero = self.poly_ring.zero()
gm = GradedModule([[zero, x*z, x*y], [zero, -x*z, zero], [y*z, zero, zero]],[1, 1, 1],[1, 1, 1])
basis = gm.homogeneous_part_basis(3);
self.assertEqual(len(basis),3)
示例2: rand_w_hom_divisor
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
def rand_w_hom_divisor(n,degs=None,mon_num=None,var="z"):
if degs==None:
degs = [randrange(2,6) for _ in range(n)]
deg = sum(degs)
if mon_num==None:
mon_num = randrange(2,8)
poly_ring = PolynomialRing(QQ,n,var)
div = poly_ring.zero()
min_w = min(degs)
for i in range(mon_num):
expo = [0]*n
cur_deg = 0
while cur_deg!=deg:
if cur_deg>deg:
expo = [0]*n
cur_deg = 0
if deg-cur_deg<min_w:
expo = [0]*n
cur_deg = 0
next_g = randrange(0,n)
expo[next_g] += 1
cur_deg += degs[next_g]
coeff = randrange(-n,n)/n
mon = poly_ring.one()
for i,e in enumerate(expo):
mon *= poly_ring.gens()[i]**e
div += coeff*mon
return div
示例3: TestConvertSymToPoly
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
class TestConvertSymToPoly(unittest.TestCase):
def setUp(self):
self.poly_ring = PolynomialRing(QQ,"x",3);
self.x = self.poly_ring.gens()[0];
self.y = self.poly_ring.gens()[1];
self.z = self.poly_ring.gens()[2];
self.vars = var('x,y,z')
def test_zero(self):
zero = 0*self.vars[0]
poly = convert_symbolic_to_polynomial(zero,self.poly_ring,self.vars)
self.assertEqual(poly,self.poly_ring.zero())
def test_convert(self):
x = self.x
y = self.y
z = self.z
sym_poly = 4*self.vars[0]**4 + self.vars[1]*self.vars[0]**12*self.vars[1]-self.vars[2]
poly = convert_symbolic_to_polynomial(sym_poly,self.poly_ring,self.vars)
self.assertEqual(poly,4*x**4+y*x**12*y-z)
def test_convert_univarient(self):
y = self.y
sym_poly = 4*self.vars[1]**4 + self.vars[1]*self.vars[1]**12*self.vars[1]-self.vars[1]
poly = convert_symbolic_to_polynomial(sym_poly,self.poly_ring,self.vars)
self.assertEqual(poly,4*y**4+y*y**12*y-y)
def test_convert_partial(self):
y = self.y
z = self.z
sym_poly = 4*self.vars[2]**4 + self.vars[1]*self.vars[1]**12*self.vars[1]-self.vars[1]
poly = convert_symbolic_to_polynomial(sym_poly,self.poly_ring,self.vars)
self.assertEqual(poly,4*z**4+y*y**12*y-y)
示例4: TestWeightedMinDegree
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
class TestWeightedMinDegree(unittest.TestCase):
def setUp(self):
self.poly_ring = PolynomialRing(QQ,"x",3);
self.x = self.poly_ring.gens()[0];
self.y = self.poly_ring.gens()[1];
self.z = self.poly_ring.gens()[2];
def test_zero(self):
self.assertEqual(wieghted_min_degree(self.poly_ring.zero(),[1,1,1]),0);
def test_homogeneous(self):
x = self.x;
y = self.y;
z = self.z;
f = x**4 + 4*y*z**3 - z**2;
self.assertEqual(wieghted_min_degree(f,[1,1,1]),2);
def test_non_homogeneous(self):
x = self.x;
y = self.y;
z = self.z;
f = x**4 + 4*y*z**3 - z**2;
self.assertEqual(wieghted_min_degree(f,[2,1,2]),4);
def test_negative_wieghts(self):
x = self.x;
y = self.y;
z = self.z;
f = x**4 + 4*y*z**3 - z**2;
self.assertEqual(wieghted_min_degree(f,[-1,-1,1]),-4);
示例5: Tokuyama_coefficient
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
def Tokuyama_coefficient(self, name='t'):
r"""
Return the Tokuyama coefficient attached to ``self``.
Following the exposition of [BBF]_, Tokuyama's formula asserts
.. MATH::
\sum_{G} (t+1)^{s(G)} t^{l(G)}
z_1^{d_{n+1}} z_2^{d_{n}-d_{n+1}} \cdots z_{n+1}^{d_1-d_2}
=
s_{\lambda}(z_1,\dots,z_{n+1}) \prod_{i<j} (z_j+tz_i),
where the sum is over all strict Gelfand-Tsetlin patterns with fixed
top row `\lambda + \rho`, with `\lambda` a partition with at most
`n+1` parts and `\rho = (n, n-1, \ldots, 1, 0)`, and `s_\lambda` is a
Schur function.
INPUT:
- ``name`` -- (Default: ``'t'``) An alternative name for the
variable `t`.
EXAMPLES::
sage: P = GelfandTsetlinPattern([[3,2,1],[2,2],[2]])
sage: P.Tokuyama_coefficient()
0
sage: G = GelfandTsetlinPattern([[3,2,1],[3,1],[2]])
sage: G.Tokuyama_coefficient()
t^2 + t
sage: G = GelfandTsetlinPattern([[2,1,0],[1,1],[1]])
sage: G.Tokuyama_coefficient()
0
sage: G = GelfandTsetlinPattern([[5,3,2,1,0],[4,3,2,0],[4,2,1],[3,2],[3]])
sage: G.Tokuyama_coefficient()
t^8 + 3*t^7 + 3*t^6 + t^5
"""
R = PolynomialRing(ZZ, name)
t = R.gen(0)
if not self.is_strict():
return R.zero()
return (t+1)**(self.number_of_special_entries()) * t**(self.number_of_boxes())
示例6: TestConvertPolyToSym
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
class TestConvertPolyToSym(unittest.TestCase):
def setUp(self):
self.poly_ring = PolynomialRing(QQ,"x",3);
self.x = self.poly_ring.gens()[0];
self.y = self.poly_ring.gens()[1];
self.z = self.poly_ring.gens()[2];
self.vars = var('x,y,z')
def test_zero(self):
zero = self.poly_ring.zero()
poly = convert_polynomial_to_symbolic(zero,self.vars)
self.assertEqual(poly,0)
def test_convert(self):
x = self.x
y = self.y
z = self.z
poly = 4*x**4+y*x**12*y-z
sym_poly = 4*self.vars[0]**4 + self.vars[1]*self.vars[0]**12*self.vars[1]-self.vars[2]
con_poly = convert_polynomial_to_symbolic(poly,self.vars)
self.assertEqual(sym_poly,con_poly)
示例7: demazure_character
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
def demazure_character(self, weight, reduced_word = False):
r"""
Returns the Demazure character associated to the specified
weight in the ambient weight lattice.
INPUT:
- ``weight`` -- an element of the weight lattice
realization of the crystal, or a reduced word
- ``reduced_word`` -- a boolean (default: ``False``)
whether ``weight`` is given as a reduced word
This is currently only supported for crystals whose
underlying weight space is the ambient space.
EXAMPLES::
sage: T = CrystalOfTableaux(['A',2], shape = [2,1])
sage: e = T.weight_lattice_realization().basis()
sage: weight = e[0] + 2*e[2]
sage: weight.reduced_word()
[2, 1]
sage: T.demazure_character(weight)
x1^2*x2 + x1^2*x3 + x1*x2^2 + x1*x2*x3 + x1*x3^2
sage: T = CrystalOfTableaux(['A',3],shape=[2,1])
sage: T.demazure_character([1,2,3], reduced_word = True)
x1^2*x2 + x1^2*x3 + x1*x2^2 + x1*x2*x3 + x2^2*x3
sage: T = CrystalOfTableaux(['B',2], shape = [2])
sage: e = T.weight_lattice_realization().basis()
sage: weight = -2*e[1]
sage: T.demazure_character(weight)
x1^2 + x1*x2 + x2^2 + x1 + x2 + x1/x2 + 1/x2 + 1/x2^2 + 1
TODO: detect automatically if weight is a reduced word,
and remove the (untested!) ``reduced_word`` option.
REFERENCES::
.. [D1974] M. Demazure, Desingularisation des varietes de Schubert,
Ann. E. N. S., Vol. 6, (1974), p. 163-172
.. [M2009] Sarah Mason, An Explicit Construction of Type A Demazure Atoms,
Journal of Algebraic Combinatorics, Vol. 29, (2009), No. 3, p.295-313
(arXiv:0707.4267)
"""
from sage.misc.misc_c import prod
from sage.rings.rational_field import QQ
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
if reduced_word:
word = weight
else:
word = weight.reduced_word()
n = self.weight_lattice_realization().n
u = list( self.module_generators )
for i in reversed(word):
u = u + sum((x.demazure_operator(i, truncated = True) for x in u), [])
x = ['x%s'%i for i in range(1,n+1)]
P = PolynomialRing(QQ, x)
u = [b.weight() for b in u]
return sum((prod((x[i]**(la[i]) for i in range(n)), P.one()) for la in u), P.zero())
示例8: demazure_character
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
def demazure_character(self, w, f = None):
r"""
Returns the Demazure character associated to ``w``.
INPUT:
- ``w`` -- an element of the ambient weight lattice
realization of the crystal, or a reduced word, or an element
in the associated Weyl group
OPTIONAL:
- ``f`` -- a function from the crystal to a module
This is currently only supported for crystals whose underlying
weight space is the ambient space.
The Demazure character is obtained by applying the Demazure operator
`D_w` (see :meth:`sage.categories.regular_crystals.RegularCrystals.ParentMethods.demazure_operator`)
to the highest weight element of the classical crystal. The simple
Demazure operators `D_i` (see
:meth:`sage.categories.regular_crystals.RegularCrystals.ElementMethods.demazure_operator_simple`)
do not braid on the level of crystals, but on the level of characters they do.
That is why it makes sense to input ``w`` either as a weight, a reduced word,
or as an element of the underlying Weyl group.
EXAMPLES::
sage: T = crystals.Tableaux(['A',2], shape = [2,1])
sage: e = T.weight_lattice_realization().basis()
sage: weight = e[0] + 2*e[2]
sage: weight.reduced_word()
[2, 1]
sage: T.demazure_character(weight)
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x1*x3^2
sage: T = crystals.Tableaux(['A',3],shape=[2,1])
sage: T.demazure_character([1,2,3])
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x2^2*x3
sage: W = WeylGroup(['A',3])
sage: w = W.from_reduced_word([1,2,3])
sage: T.demazure_character(w)
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x2^2*x3
sage: T = crystals.Tableaux(['B',2], shape = [2])
sage: e = T.weight_lattice_realization().basis()
sage: weight = -2*e[1]
sage: T.demazure_character(weight)
x1^2 + x1*x2 + x2^2 + x1 + x2 + x1/x2 + 1/x2 + 1/x2^2 + 1
sage: T = crystals.Tableaux("B2",shape=[1/2,1/2])
sage: b2=WeylCharacterRing("B2",base_ring=QQ).ambient()
sage: T.demazure_character([1,2],f=lambda x:b2(x.weight()))
b2(-1/2,1/2) + b2(1/2,-1/2) + b2(1/2,1/2)
REFERENCES:
- [De1974]_
- [Ma2009]_
"""
from sage.misc.misc_c import prod
from sage.rings.integer_ring import ZZ
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
if hasattr(w, 'reduced_word'):
word = w.reduced_word()
else:
word = w
n = self.weight_lattice_realization().n
u = self.algebra(ZZ).sum_of_monomials(self.module_generators)
u = self.demazure_operator(u, word)
if f is None:
x = ['x%s'%i for i in range(1,n+1)]
P = PolynomialRing(ZZ, x)
# TODO: use P.linear_combination when PolynomialRing will be a ModulesWithBasis
return sum((coeff*prod((x[i]**(c.weight()[i]) for i in range(n)), P.one()) for c, coeff in u), P.zero())
else:
return sum((coeff*f(c)) for c, coeff in u)
示例9: rand_pham_divisor
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
def rand_pham_divisor(n,var="z"):
poly_ring = PolynomialRing(QQ,n,var)
div = poly_ring.zero()
for g in poly_ring.gens():
div += g**(randrange(2,9))
return div
示例10: permanental_minor_polynomial
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
#.........这里部分代码省略.........
\langle p_1(\eta_1, \ldots, \eta_n) p_2 \rangle =
\langle p_1(1, \ldots, 1, \eta_j, \ldots, \eta_n) p_2 \rangle
where `\eta_1,..,\eta_{j-1}` are replaced by `1` in `p_1`. Informally,
we can "integrate" these variables *before* performing the product. More
generally, if a monomial `\eta_i` is missing in one of the terms of a
product of two terms, then it can be integrated in the other term.
Now let us consider an `m \times n` matrix with `m \leq n`. The *sum of
permanental `k`-minors of `A`* is
.. MATH::
perm(A, k) = \sum_{r,c} perm(A_{r,c})
where the sum is over the `k`-subsets `r` of rows and `k`-subsets `c` of
columns and `A_{r,c}` is the submatrix obtained from `A` by keeping only
the rows `r` and columns `c`. Of course
`perm(A, \min(m,n)) = perm(A)` and note that `perm(A,1)` is just the sum
of all entries of the matrix.
The generating function of these sums of permanental minors is
.. MATH::
g(t) = \left\langle
\prod_{i=1}^m \left(1 + t \sum_{j=1}^n A_{ij} \eta_j\right)
\right\rangle
In fact the `t^k` coefficient of `g(t)` corresponds to choosing
`k` rows of `A`; `\eta_i` is associated to the i-th column;
nilpotency avoids having twice the same column in a product of `A`'s.
For more details, see the article [ButPer].
From a technical point of view, the product in
`K[\eta_1, \ldots, \eta_n][t]` is implemented as a subroutine in
:func:`prm_mul`. The indices of the rows and columns actually start at
`0`, so the variables are `\eta_0, \ldots, \eta_{n-1}`. Polynomials are
represented in dictionary form: to a variable `\eta_i` is associated
the key `2^i` (or in Python ``1 << i``). The keys associated to products
are obtained by considering the development in base `2`: to the monomial
`\eta_{i_1} \ldots \eta_{i_k}` is associated the key
`2^{i_1} + \ldots + 2^{i_k}`. So the product `\eta_1 \eta_2` corresponds
to the key `6 = (110)_2` while `\eta_0 \eta_3` has key `9 = (1001)_2`.
In particular all operations on monomials are implemented via bitwise
operations on the keys.
REFERENCES:
.. [ButPer] P. Butera and M. Pernici "Sums of permanental minors
using Grassmann algebra", :arxiv:`1406.5337`
"""
if permanent_only:
prec = None
elif prec is not None:
prec = int(prec)
if prec == 0:
raise ValueError('the argument `prec` must be a positive integer')
K = PolynomialRing(A.base_ring(), var)
nrows = A.nrows()
ncols = A.ncols()
A = A.rows()
p = {0: K.one()}
t = K.gen()
vars_to_do = range(ncols)
for i in range(nrows):
# build the polynomial p1 = 1 + t sum A_{ij} eta_j
if permanent_only:
p1 = {}
else:
p1 = {0: K.one()}
a = A[i] # the i-th row of A
for j in range(len(a)):
if a[j]:
p1[1<<j] = a[j] * t
# make the product with the preceding polynomials, taking care of
# variables that can be integrated
mask_free = 0
j = 0
while j < len(vars_to_do):
jj = vars_to_do[j]
if all(A[k][jj] == 0 for k in range(i+1, nrows)):
mask_free += 1 << jj
vars_to_do.remove(jj)
else:
j += 1
p = prm_mul(p, p1, mask_free, prec)
if not p:
return K.zero()
if len(p) != 1 or 0 not in p:
raise RuntimeError("Something is wrong! Certainly a problem in the"
" algorithm... please contact [email protected]")
p = p[0]
return p[min(nrows,ncols)] if permanent_only else p
示例11: ehrhart_polynomial
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
#.........这里部分代码省略.........
sage: p = P.ehrhart_polynomial(maxdet=5, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' '--maxdet=5' --cdd ...
...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
sage: p = P.ehrhart_polynomial(dual=True, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --dual --cdd ...
...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
sage: p = P.ehrhart_polynomial(irrational_primal=True, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --irrational-primal --cdd ...
...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
sage: p = P.ehrhart_polynomial(irrational_all_primal=True, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --irrational-all-primal --cdd ...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
Test bad options::
sage: P.ehrhart_polynomial(bim_bam_boum=19) # optional - latte_int
Traceback (most recent call last):
...
RuntimeError: LattE integrale failed with exit code 1 to execute...
"""
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
R = PolynomialRing(QQ, 't')
if self.is_empty():
return R.zero()
from sage.misc.misc import SAGE_TMP
from subprocess import Popen, PIPE
ine = self.cdd_Hrepresentation()
args = ['count', '--ehrhart-polynomial']
if 'redundancy_check' not in kwds:
args.append('--redundancy-check=none')
# note: the options below are explicitely written in the function
# declaration in order to keep tab completion (see #18211).
kwds.update({
'dual' : dual,
'irrational_primal' : irrational_primal,
'irrational_all_primal' : irrational_all_primal,
'maxdet' : maxdet,
'no_decomposition' : no_decomposition,
'compute_vertex_cones' : compute_vertex_cones,
'smith_form' : smith_form,
'dualization' : dualization,
'triangulation' : triangulation,
'triangulation_max_height': triangulation_max_height})
for key,value in kwds.items():
if value is None or value is False:
continue
key = key.replace('_','-')
if value is True:
args.append('--{}'.format(key))
else:
args.append('--{}={}'.format(key, value))
args += ['--cdd', '/dev/stdin']
try:
# The cwd argument is needed because latte
# always produces diagnostic output files.
latte_proc = Popen(args,
stdin=PIPE, stdout=PIPE,
stderr=(None if verbose else PIPE),
cwd=str(SAGE_TMP))
except OSError:
from sage.misc.package import PackageNotFoundError
raise PackageNotFoundError('latte_int')
ans, err = latte_proc.communicate(ine)
ret_code = latte_proc.poll()
if ret_code:
if err is None:
err = ", see error message above"
else:
err = ":\n" + err
raise RuntimeError("LattE integrale failed with exit code {} to execute {}".format(ret_code, ' '.join(args)) + err.strip())
p = ans.splitlines()[-2]
return R(p)
示例12: ehrhart_polynomial
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
#.........这里部分代码省略.........
sage: len(P.integral_points())
6
sage: p(2) # optional - latte_int
36
sage: len((2*P).integral_points())
36
The unit hypercubes::
sage: from itertools import product
sage: def hypercube(d):
....: return Polyhedron(vertices=list(product([0,1],repeat=d)))
sage: hypercube(3).ehrhart_polynomial() # optional - latte_int
t^3 + 3*t^2 + 3*t + 1
sage: hypercube(4).ehrhart_polynomial() # optional - latte_int
t^4 + 4*t^3 + 6*t^2 + 4*t + 1
sage: hypercube(5).ehrhart_polynomial() # optional - latte_int
t^5 + 5*t^4 + 10*t^3 + 10*t^2 + 5*t + 1
sage: hypercube(6).ehrhart_polynomial() # optional - latte_int
t^6 + 6*t^5 + 15*t^4 + 20*t^3 + 15*t^2 + 6*t + 1
An empty polyhedron::
sage: P = Polyhedron(ambient_dim=3, vertices=[])
sage: P.ehrhart_polynomial() # optional - latte_int
0
sage: parent(_) # optional - latte_int
Univariate Polynomial Ring in t over Rational Field
TESTS:
Test options::
sage: P = Polyhedron(ieqs=[[1,-1,1,0], [-1,2,-1,0], [1,1,-2,0]], eqns=[[-1,2,-1,-3]], base_ring=ZZ)
sage: p = P.ehrhart_polynomial(maxdet=5, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --cdd '--maxdet=5' /dev/stdin
...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
sage: p = P.ehrhart_polynomial(dual=True, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --cdd --dual /dev/stdin
...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
sage: p = P.ehrhart_polynomial(irrational_primal=True, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --cdd --irrational-primal /dev/stdin
...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
sage: p = P.ehrhart_polynomial(irrational_all_primal=True, verbose=True) # optional - latte_int
This is LattE integrale ...
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --cdd --irrational-all-primal /dev/stdin
...
sage: p # optional - latte_int
1/2*t^2 + 3/2*t + 1
Test bad options::
sage: P.ehrhart_polynomial(bim_bam_boum=19) # optional - latte_int
Traceback (most recent call last):
...
RuntimeError: LattE integrale program failed (exit code 1):
...
Invocation: count --ehrhart-polynomial '--redundancy-check=none' --cdd '--bim-bam-boum=19' /dev/stdin
Unknown command/option --bim-bam-boum=19
"""
if self.is_empty():
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
from sage.rings.rational_field import QQ
R = PolynomialRing(QQ, 't')
return R.zero()
# note: the options below are explicitely written in the function
# declaration in order to keep tab completion (see #18211).
kwds.update({
'dual' : dual,
'irrational_primal' : irrational_primal,
'irrational_all_primal' : irrational_all_primal,
'maxdet' : maxdet,
'no_decomposition' : no_decomposition,
'compute_vertex_cones' : compute_vertex_cones,
'smith_form' : smith_form,
'dualization' : dualization,
'triangulation' : triangulation,
'triangulation_max_height': triangulation_max_height})
from sage.interfaces.latte import count
ine = self.cdd_Hrepresentation()
return count(ine, cdd=True, ehrhart_polynomial=True, verbose=verbose, **kwds)
示例13: TestLogartihmicDifferentialForms
# 需要导入模块: from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.polynomial_ring_constructor.PolynomialRing import zero [as 别名]
class TestLogartihmicDifferentialForms(unittest.TestCase):
def setUp(self):
self.poly_ring = PolynomialRing(QQ,"x",3);
self.x = self.poly_ring.gens()[0];
self.y = self.poly_ring.gens()[1];
self.z = self.poly_ring.gens()[2];
self.vars = var('x,y,z')
def test_p_forms_crossing_ngens(self):
crossing = self.x*self.y*self.z
logdf = LogarithmicDifferentialForms(crossing)
self.assertEqual(len(logdf.p_form_generators(0)),1)
self.assertEqual(len(logdf.p_form_generators(1)),3)
self.assertEqual(len(logdf.p_form_generators(2)),3)
self.assertEqual(len(logdf.p_form_generators(3)),1)
def test_0_modules_crossing_ngens(self):
crossing = self.x*self.y*self.z
logdf = LogarithmicDifferentialForms(crossing)
crossing_0_module = SingularModule([[crossing]])
self.assertTrue(crossing_0_module.equals(logdf.p_module(0)))
def test_1_modules_crossing_ngens(self):
x = self.x
y = self.y
z = self.z
zero = self.poly_ring.zero()
crossing = x*y*z
logdf = LogarithmicDifferentialForms(crossing)
crossing_1_module = SingularModule([[y*z,zero,zero],[zero,x*z,zero],[zero,zero,x*y]])
self.assertTrue(crossing_1_module.equals(logdf.p_module(1)))
def test_2_modules_crossing_ngens(self):
x = self.x
y = self.y
z = self.z
zero = self.poly_ring.zero()
crossing = self.x*self.y*self.z
logdf = LogarithmicDifferentialForms(crossing)
crossing_2_module = SingularModule([[z,zero,zero],[zero,y,zero],[zero,zero,x]])
self.assertTrue(crossing_2_module.equals(logdf.p_module(2)))
def test_3_modules_crossing_ngens(self):
crossing = self.x*self.y*self.z
logdf = LogarithmicDifferentialForms(crossing)
crossing_3_module = SingularModule([[self.poly_ring.one()]])
self.assertTrue(crossing_3_module.equals(logdf.p_module(3)))
def test_p_module_n_crossing(self):
#Make sure this doesnt throw an error - fix bug
for i in range(4,5):
p_ring = PolynomialRing(QQ,i,"z")
crossing = p_ring.one()
for g in p_ring.gens():
crossing *= g
logdf = LogarithmicDifferentialForms(crossing)
logdf.p_module(i-1)
def test_complement_complex_crossing(self):
crossing = self.x*self.y*self.z
logdf = LogarithmicDifferentialForms(crossing)
complex = logdf.chain_complex("complement")
complex_size = {}
for i,c in complex.iteritems():
complex_size[i] = len(c)
self.assertEqual(complex_size,{0:1,1:3,2:3,3:1})
def test_complement_complex_whitney(self):
whitney = self.x**2*self.y - self.z**2
logdf = LogarithmicDifferentialForms(whitney)
complex = logdf.chain_complex("complement")
complex_size = {}
for i,c in complex.iteritems():
complex_size[i] = len(c)
self.assertEqual(complex_size,{0:1,1:1,2:0,3:0})
def test_equi_complex_crossing(self):
crossing = self.x*self.y*self.z
logdf = LogarithmicDifferentialForms(crossing)
complex = logdf.chain_complex("equivarient")
complex_size = {}
for i,c in complex.iteritems():
complex_size[i] = len(c)
self.assertEqual(complex_size,{0:1,1:3,2:4,3:4})
def test_equi_complex_whitney(self):
whitney = self.x**2*self.y - self.z**2
logdf = LogarithmicDifferentialForms(whitney)
complex = logdf.chain_complex("equivarient")
complex_size = {}
for i,c in complex.iteritems():
complex_size[i] = len(c)
self.assertEqual(complex_size,{0:1,1:1,2:1,3:1})
def test_complement_homology_crossing(self):
crossing = self.x*self.y*self.z
logdf = LogarithmicDifferentialForms(crossing)
homology = logdf.homology("complement")
homology_size = {}
#.........这里部分代码省略.........