本文整理汇总了Python中sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing.gen方法的典型用法代码示例。如果您正苦于以下问题:Python LaurentPolynomialRing.gen方法的具体用法?Python LaurentPolynomialRing.gen怎么用?Python LaurentPolynomialRing.gen使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing
的用法示例。
在下文中一共展示了LaurentPolynomialRing.gen方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __classcall_private__
# 需要导入模块: from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing import gen [as 别名]
def __classcall_private__(cls, R, q=None):
r"""
Normalize input to ensure a unique representation.
TESTS::
sage: R.<q> = LaurentPolynomialRing(QQ)
sage: AW1 = algebras.AskeyWilson(QQ)
sage: AW2 = algebras.AskeyWilson(R, q)
sage: AW1 is AW2
True
sage: AW = algebras.AskeyWilson(ZZ, 0)
Traceback (most recent call last):
...
ValueError: q cannot be 0
sage: AW = algebras.AskeyWilson(ZZ, 3)
Traceback (most recent call last):
...
ValueError: q=3 is not invertible in Integer Ring
"""
if q is None:
R = LaurentPolynomialRing(R, 'q')
q = R.gen()
else:
q = R(q)
if q == 0:
raise ValueError("q cannot be 0")
if 1/q not in R:
raise ValueError("q={} is not invertible in {}".format(q, R))
if R not in Rings().Commutative():
raise ValueError("{} is not a commutative ring".format(R))
return super(AskeyWilsonAlgebra, cls).__classcall__(cls, R, q)
示例2: q_int
# 需要导入模块: from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing import gen [as 别名]
def q_int(n, q=None):
r"""
Return the `q`-analog of the nonnegative integer `n`.
The `q`-analog of the nonnegative integer `n` is given by
.. MATH::
[n]_q = \frac{q^n - q^{-n}}{q - q^{-1}}
= q^{n-1} + q^{n-3} + \cdots + q^{-n+3} + q^{-n+1}.
INPUT:
- ``n`` -- the nonnegative integer `n` defined above
- ``q`` -- (default: `q \in \ZZ[q, q^{-1}]`) the parameter `q`
(should be invertible)
If ``q`` is unspecified, then it defaults to using the generator `q`
for a Laurent polynomial ring over the integers.
.. NOTE::
This is not the "usual" `q`-analog of `n` (or `q`-integer) but
a variant useful for quantum groups. For the version used in
combinatorics, see :mod:`sage.combinat.q_analogues`.
EXAMPLES::
sage: from sage.algebras.quantum_groups.q_numbers import q_int
sage: q_int(2)
q^-1 + q
sage: q_int(3)
q^-2 + 1 + q^2
sage: q_int(5)
q^-4 + q^-2 + 1 + q^2 + q^4
sage: q_int(5, 1)
5
TESTS::
sage: from sage.algebras.quantum_groups.q_numbers import q_int
sage: q_int(1)
1
sage: q_int(0)
0
"""
if q is None:
R = LaurentPolynomialRing(ZZ, 'q')
q = R.gen()
else:
R = q.parent()
if n == 0:
return R.zero()
return R.sum(q**(n - 2 * i - 1) for i in range(n))
示例3: burau_matrix
# 需要导入模块: from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing import gen [as 别名]
def burau_matrix(self, var='t'):
"""
Return the Burau matrix of the braid.
INPUT:
- ``var`` -- string (default: ``'t'``). The name of the
variable in the entries of the matrix.
OUTPUT:
The Burau matrix of the braid. It is a matrix whose entries
are Laurent polynomials in the variable ``var``.
EXAMPLES::
sage: B = BraidGroup(4)
sage: B.inject_variables()
Defining s0, s1, s2
sage: b=s0*s1/s2/s1
sage: b.burau_matrix()
[ -t + 1 0 -t^2 + t t^2]
[ 1 0 0 0]
[ 0 0 1 0]
[ 0 t^-2 t^-1 - t^-2 1 - t^-1]
sage: s2.burau_matrix('x')
[ 1 0 0 0]
[ 0 1 0 0]
[ 0 0 -x + 1 x]
[ 0 0 1 0]
REFERENCES:
http://en.wikipedia.org/wiki/Burau_representation
"""
R = LaurentPolynomialRing(IntegerRing(), var)
t = R.gen()
M = identity_matrix(R, self.strands())
for i in self.Tietze():
A = identity_matrix(R, self.strands())
if i>0:
A[i-1, i-1] = 1-t
A[i, i] = 0
A[i, i-1] = 1
A[i-1, i] = t
if i<0:
A[-1-i, -1-i] = 0
A[-i, -i] = 1-t**(-1)
A[-1-i, -i] = 1
A[-i, -1-i] = t**(-1)
M=M*A
return M
示例4: burau_matrix
# 需要导入模块: from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing import gen [as 别名]
def burau_matrix(self, var='t', reduced=False):
"""
Return the Burau matrix of the braid.
INPUT:
- ``var`` -- string (default: ``'t'``); the name of the
variable in the entries of the matrix
- ``reduced`` -- boolean (default: ``False``); whether to
return the reduced or unreduced Burau representation
OUTPUT:
The Burau matrix of the braid. It is a matrix whose entries
are Laurent polynomials in the variable ``var``. If ``reduced``
is ``True``, return the matrix for the reduced Burau representation
instead.
EXAMPLES::
sage: B = BraidGroup(4)
sage: B.inject_variables()
Defining s0, s1, s2
sage: b = s0*s1/s2/s1
sage: b.burau_matrix()
[ 1 - t 0 t - t^2 t^2]
[ 1 0 0 0]
[ 0 0 1 0]
[ 0 t^-2 -t^-2 + t^-1 -t^-1 + 1]
sage: s2.burau_matrix('x')
[ 1 0 0 0]
[ 0 1 0 0]
[ 0 0 1 - x x]
[ 0 0 1 0]
sage: s0.burau_matrix(reduced=True)
[-t 0 0]
[-t 1 0]
[-t 0 1]
REFERENCES:
- :wikipedia:`Burau_representation`
"""
R = LaurentPolynomialRing(IntegerRing(), var)
t = R.gen()
n = self.strands()
if not reduced:
M = identity_matrix(R, n)
for i in self.Tietze():
A = identity_matrix(R, n)
if i > 0:
A[i-1, i-1] = 1-t
A[i, i] = 0
A[i, i-1] = 1
A[i-1, i] = t
if i < 0:
A[-1-i, -1-i] = 0
A[-i, -i] = 1-t**(-1)
A[-1-i, -i] = 1
A[-i, -1-i] = t**(-1)
M = M * A
else:
M = identity_matrix(R, n - 1)
for j in self.Tietze():
A = identity_matrix(R, n - 1)
if j > 1:
i = j-1
A[i-1, i-1] = 1-t
A[i, i] = 0
A[i, i-1] = 1
A[i-1, i] = t
if j < -1:
i = j+1
A[-1-i, -1-i] = 0
A[-i, -i] = 1-t**(-1)
A[-1-i, -i] = 1
A[-i, -1-i] = t**(-1)
if j == 1:
for k in range(n - 1):
A[k,0] = -t
if j == -1:
A[0,0] = -t**(-1)
for k in range(1, n - 1):
A[k,0] = -1
M = M * A
return M
示例5: ClusterAlgebra
# 需要导入模块: from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing import gen [as 别名]
#.........这里部分代码省略.........
# Determine coefficients and setup self._base
if m>0:
if 'coefficients_names' in kwargs:
if len(kwargs['coefficients_names']) == m:
coefficients = kwargs['coefficients_names']
else:
raise ValueError("coefficients_names should be a list of %d valid variable names"%m)
else:
try:
coefficients_prefix = kwargs['coefficients_prefix']
except:
coefficients_prefix = 'y'
if coefficients_prefix == cluster_variables_prefix:
offset = n
else:
offset = 0
coefficients = [coefficients_prefix+'%s'%i for i in xrange(offset,m+offset)]
# TODO: (***) base should eventually become the group algebra of a tropical semifield
base = LaurentPolynomialRing(scalars, coefficients)
else:
base = scalars
# TODO: next line should be removed when (***) is implemented
coefficients = []
# setup Parent and ambient
# TODO: (***) _ambient should eventually be replaced with LaurentPolynomialRing(base, variables)
self._ambient = LaurentPolynomialRing(scalars, variables+coefficients)
self._ambient_field = self._ambient.fraction_field()
# TODO: understand why using Algebras() instead of Rings() makes A(1) complain of missing _lmul_
Parent.__init__(self, base=base, category=Rings(scalars).Commutative().Subobjects(), names=variables+coefficients)
# Data to compute cluster variables using separation of additions
# BUG WORKAROUND: if your sage installation does not have trac:`19538` merged uncomment the following line and comment the next
self._y = dict([ (self._U.gen(j), prod([self._ambient.gen(n+i)**M0[i,j] for i in xrange(m)])) for j in xrange(n)])
#self._y = dict([ (self._U.gen(j), prod([self._base.gen(i)**M0[i,j] for i in xrange(m)])) for j in xrange(n)])
self._yhat = dict([ (self._U.gen(j), prod([self._ambient.gen(i)**B0[i,j] for i in xrange(n)])*self._y[self._U.gen(j)]) for j in xrange(n)])
# Have we principal coefficients?
self._is_principal = (M0 == I)
# Store initial data
self._B0 = copy(B0)
self._n = n
self.reset_current_seed()
# Internal data for exploring the exchange graph
self.reset_exploring_iterator()
# Internal data to store exchange relations
# This is a dictionary indexed by a frozen set of two g-vectors (the g-vectors of the exchanged variables)
# Exchange relations are, for the moment, a frozen set of precisely two entries (one for each term in the exchange relation's RHS).
# Each of them contains two things
# 1) a list of pairs (g-vector, exponent) one for each cluster variable appearing in the term
# 2) the coefficient part of the term
# TODO: possibly refactor this producing a class ExchangeRelation with some pretty printing feature
self._exchange_relations = dict()
if 'store_exchange_relations' in kwargs and kwargs['store_exchange_relations']:
self._store_exchange_relations = True
else:
self._store_exchange_relations = False
# Add methods that are defined only for special cases
if n == 2:
self.greedy_element = MethodType(greedy_element, self, self.__class__)
self.greedy_coefficient = MethodType(greedy_coefficient, self, self.__class__)
self.theta_basis_element = MethodType(theta_basis_element, self, self.__class__)
示例6: MacMahonOmega
# 需要导入模块: from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing import gen [as 别名]
#.........这里部分代码省略.........
Traceback (most recent call last):
...
NotImplementedError: Factor 2 - x*mu is not normalized.
sage: MacMahonOmega(mu, 1, [1 - x*mu - mu^2])
Traceback (most recent call last):
...
NotImplementedError: Cannot handle factor 1 - x*mu - mu^2.
::
sage: L.<mu, x, y, z, w> = LaurentPolynomialRing(QQ)
sage: MacMahonOmega(mu, 1/mu,
....: Factorization([(1 - x*mu, 1), (1 - y/mu, 2)], unit=2))
1/2*x * (-x + 1)^-1 * (-x*y + 1)^-2
"""
from sage.arith.misc import factor
from sage.misc.misc_c import prod
from sage.rings.integer_ring import ZZ
from sage.rings.polynomial.laurent_polynomial_ring \
import LaurentPolynomialRing, LaurentPolynomialRing_univariate
from sage.structure.factorization import Factorization
if op != operator.ge:
raise NotImplementedError('At the moment, only Omega_ge is implemented.')
if denominator is None:
if isinstance(expression, Factorization):
numerator = expression.unit() * \
prod(f**e for f, e in expression if e > 0)
denominator = tuple(f for f, e in expression if e < 0
for _ in range(-e))
else:
numerator = expression.numerator()
denominator = expression.denominator()
else:
numerator = expression
# at this point we have numerator/denominator
if isinstance(denominator, (list, tuple)):
factors_denominator = denominator
else:
if not isinstance(denominator, Factorization):
denominator = factor(denominator)
if not denominator.is_integral():
raise ValueError('Factorization {} of the denominator '
'contains negative exponents.'.format(denominator))
numerator *= ZZ(1) / denominator.unit()
factors_denominator = tuple(factor
for factor, exponent in denominator
for _ in range(exponent))
# at this point we have numerator/factors_denominator
P = var.parent()
if isinstance(P, LaurentPolynomialRing_univariate) and P.gen() == var:
L = P
L0 = L.base_ring()
elif var in P.gens():
var = repr(var)
L0 = LaurentPolynomialRing(
P.base_ring(), tuple(v for v in P.variable_names() if v != var))
L = LaurentPolynomialRing(L0, var)
var = L.gen()
else:
raise ValueError('{} is not a variable.'.format(var))
other_factors = []
to_numerator = []
decoded_factors = []
for factor in factors_denominator:
factor = L(factor)
D = factor.dict()
if not D:
raise ZeroDivisionError('Denominator contains a factor 0.')
elif len(D) == 1:
exponent, coefficient = next(iteritems(D))
if exponent == 0:
other_factors.append(L0(factor))
else:
to_numerator.append(factor)
elif len(D) == 2:
if D.get(0, 0) != 1:
raise NotImplementedError('Factor {} is not normalized.'.format(factor))
D.pop(0)
exponent, coefficient = next(iteritems(D))
decoded_factors.append((-coefficient, exponent))
else:
raise NotImplementedError('Cannot handle factor {}.'.format(factor))
numerator = L(numerator) / prod(to_numerator)
result_numerator, result_factors_denominator = \
_Omega_(numerator.dict(), decoded_factors)
if result_numerator == 0:
return Factorization([], unit=result_numerator)
return Factorization([(result_numerator, 1)] +
list((f, -1) for f in other_factors) +
list((1-f, -1) for f in result_factors_denominator),
sort=Factorization_sort,
simplify=Factorization_simplify)
示例7: loop_representation
# 需要导入模块: from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing [as 别名]
# 或者: from sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing import gen [as 别名]
def loop_representation(self):
r"""
Return the map `\pi` from ``self`` to `2 \times 2` matrices
over `R[\lambda,\lambda^{-1}]`, where `F` is the fraction field
of the base ring of ``self``.
Let `AW` be the Askey-Wilson algebra over `R`, and let `F` be
the fraction field of `R`. Let `M` be the space of `2 \times 2`
matrices over `F[\lambda, \lambda^{-1}]`. Consider the following
elements of `M`:
.. MATH::
\mathcal{A} = \begin{pmatrix}
\lambda & 1 - \lambda^{-1} \\ 0 & \lambda^{-1}
\end{pmatrix},
\qquad
\mathcal{B} = \begin{pmatrix}
\lambda^{-1} & 0 \\ \lambda - 1 & \lambda
\end{pmatrix},
\qquad
\mathcal{C} = \begin{pmatrix}
1 & \lambda - 1 \\ 1 - \lambda^{-1} & \lambda + \lambda^{-1} - 1
\end{pmatrix}.
From Lemma 3.11 of [Terwilliger2011]_, we define a
representation `\pi: AW \to M` by
.. MATH::
A \mapsto q \mathcal{A} + q^{-1} \mathcal{A}^{-1},
\qquad
B \mapsto q \mathcal{B} + q^{-1} \mathcal{B}^{-1},
\qquad
C \mapsto q \mathcal{C} + q^{-1} \mathcal{C}^{-1},
.. MATH::
\alpha, \beta, \gamma \mapsto \nu I,
where `\nu = (q^2 + q^-2)(\lambda + \lambda^{-1})
+ (\lambda + \lambda^{-1})^2`.
We call this representation the *loop representation* as
it is a representation using the loop group
`SL_2(F[\lambda,\lambda^{-1}])`.
EXAMPLES::
sage: AW = algebras.AskeyWilson(QQ)
sage: q = AW.q()
sage: pi = AW.loop_representation()
sage: A,B,C,a,b,g = [pi(gen) for gen in AW.algebra_generators()]
sage: A
[ 1/q*lambda^-1 + q*lambda ((-q^2 + 1)/q)*lambda^-1 + ((q^2 - 1)/q)]
[ 0 q*lambda^-1 + 1/q*lambda]
sage: B
[ q*lambda^-1 + 1/q*lambda 0]
[((-q^2 + 1)/q) + ((q^2 - 1)/q)*lambda 1/q*lambda^-1 + q*lambda]
sage: C
[1/q*lambda^-1 + ((q^2 - 1)/q) + 1/q*lambda ((q^2 - 1)/q) + ((-q^2 + 1)/q)*lambda]
[ ((q^2 - 1)/q)*lambda^-1 + ((-q^2 + 1)/q) q*lambda^-1 + ((-q^2 + 1)/q) + q*lambda]
sage: a
[lambda^-2 + ((q^4 + 1)/q^2)*lambda^-1 + 2 + ((q^4 + 1)/q^2)*lambda + lambda^2 0]
[ 0 lambda^-2 + ((q^4 + 1)/q^2)*lambda^-1 + 2 + ((q^4 + 1)/q^2)*lambda + lambda^2]
sage: a == b
True
sage: a == g
True
sage: AW.an_element()
(q^-3+3+2*q+q^2)*a*b*g^3 + q*A*C^2*b + 3*q^2*B*a^2*g + A
sage: x = pi(AW.an_element())
sage: y = (q^-3+3+2*q+q^2)*a*b*g^3 + q*A*C^2*b + 3*q^2*B*a^2*g + A
sage: x == y
True
We check the defining relations of the Askey-Wilson algebra::
sage: A + (q*B*C - q^-1*C*B) / (q^2 - q^-2) == a / (q + q^-1)
True
sage: B + (q*C*A - q^-1*A*C) / (q^2 - q^-2) == b / (q + q^-1)
True
sage: C + (q*A*B - q^-1*B*A) / (q^2 - q^-2) == g / (q + q^-1)
True
We check Lemma 3.12 in [Terwilliger2011]_::
sage: M = pi.codomain()
sage: la = M.base_ring().gen()
sage: p = M([[0,-1],[1,1]])
sage: s = M([[0,1],[la,0]])
sage: rho = AW.rho()
sage: sigma = AW.sigma()
sage: all(p*pi(gen)*~p == pi(rho(gen)) for gen in AW.algebra_generators())
True
sage: all(s*pi(gen)*~s == pi(sigma(gen)) for gen in AW.algebra_generators())
True
"""
from sage.matrix.matrix_space import MatrixSpace
#.........这里部分代码省略.........