本文整理汇总了Python中sage.rings.arith.factor函数的典型用法代码示例。如果您正苦于以下问题:Python factor函数的具体用法?Python factor怎么用?Python factor使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了factor函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: mumu
def mumu(N):
"""
Return 0 if any cube divides `N`. Otherwise return
`(-2)^v` where `v` is the number of primes that
exactly divide `N`.
This is similar to the Moebius function.
INPUT:
- ``N`` - an integer at least 1
OUTPUT: Integer
EXAMPLES::
sage: from sage.modular.arithgroup.congroup_gammaH import mumu
sage: mumu(27)
0
sage: mumu(6*25)
4
sage: mumu(7*9*25)
-2
sage: mumu(9*25)
1
"""
if N < 1:
raise ValueError, "N must be at least 1"
p = 1
for _,r in factor(N):
if r > 2:
return ZZ(0)
elif r == 1:
p *= -2
return ZZ(p)
开发者ID:sageb0t,项目名称:testsage,代码行数:35,代码来源:congroup_gammaH.py
示例2: multiplicative_order
def multiplicative_order(self):
r"""
Returns the *multiplicative* order of this element, which must be
nonzero.
EXAMPLES::
sage: from sage.rings.finite_rings.finite_field_ext_pari import FiniteField_ext_pari
sage: a = FiniteField_ext_pari(5**3, 'a').0
sage: a.multiplicative_order()
124
sage: a**124
1
"""
try:
return self.__multiplicative_order
except AttributeError:
if self.is_zero():
raise ArithmeticError("Multiplicative order of 0 not defined.")
n = self.parent().order() - 1
order = 1
for p, e in arith.factor(n):
# Determine the power of p that divides the order.
a = self**(n//(p**e))
while a != 1:
order *= p
a = a**p
self.__multiplicative_order = order
return order
开发者ID:jkeitel,项目名称:sage,代码行数:29,代码来源:element_ext_pari.py
示例3: coefficient_n_recursive
def coefficient_n_recursive(self, n):
r"""
Reimplement the recursive algorithm in sage modular/hecke/module.py
We do this because of a bug in sage with .eigenvalue()
"""
from sage.rings import arith
ev = self.eigenvalues
c2 = self._coefficients.get(2)
if c2 is not None:
K = c2.parent()
else:
if ev.max_coefficient_in_db() >= 2:
ev.init_dynamic_properties()
else:
raise StopIteration,"Newform does not have eigenvalue a(2)!"
self._coefficients[2]=ev[2]
K = ev[2].parent()
prod = K(1)
if K.absolute_degree()>1 and K.is_relative():
KZ = K.base_field()
else:
KZ = K
#emf_logger.debug("K= {0}".format(K))
F = arith.factor(n)
for p, r in F:
#emf_logger.debug("parent_char_val[{0}]={1}".format(p,self.parent.character_used_in_computation.value(p)))
#emf_logger.debug("char_val[{0}]={1}".format(p,self.character.value(p)))
(p, r) = (int(p), int(r))
pr = p**r
cp = self._coefficients.get(p)
# emf_logger.debug("c{0} = {1}".format(p,cp))
if cp is None:
if ev.has_eigenvalue(p):
cp = ev[p]
elif ev.max_coefficient_in_db() >= p:
ev.init_dynamic_properties()
cp = ev[p]
if cp is None:
raise IndexError,"p={0} is outside the range of computed primes (primes up to {1})! for label:{2}".format(p,max(ev.primes()),self.label)
if self._coefficients.get(pr) is None:
if r == 1:
c = cp
else:
eps = KZ(self.parent.character_used_in_computation.value(p))
# a_{p^r} := a_p * a_{p^{r-1}} - eps(p)p^{k-1} a_{p^{r-2}}
apr1 = self.coefficient_n_recursive(pr//p)
#ap = self.coefficient_n_recursive(p)
k = self.weight
apr2 = self.coefficient_n_recursive(pr//(p*p))
c = cp*apr1 - eps*(p**(k-1)) * apr2
#emf_logger.debug("c({0})={1}".format(pr,c))
#ev[pr]=c
self._coefficients[pr]=c
prod *= self._coefficients[pr]
return prod
开发者ID:am-github,项目名称:lmfdb,代码行数:56,代码来源:web_newforms.py
示例4: create_key_and_extra_args
def create_key_and_extra_args(self, order, name=None, modulus=None, names=None, impl=None, proof=None, **kwds):
"""
EXAMPLES::
sage: GF.create_key_and_extra_args(9, 'a')
((9, ('a',), 'conway', None, '{}', 3, 2, True), {})
sage: GF.create_key_and_extra_args(9, 'a', foo='value')
((9, ('a',), 'conway', None, "{'foo': 'value'}", 3, 2, True), {'foo': 'value'})
"""
from sage.structure.proof.all import WithProof, arithmetic
if proof is None:
proof = arithmetic()
with WithProof("arithmetic", proof):
order = int(order)
if order <= 1:
raise ValueError("the order of a finite field must be > 1.")
if arith.is_prime(order):
name = None
modulus = None
p = integer.Integer(order)
n = integer.Integer(1)
elif arith.is_prime_power(order):
if not names is None:
name = names
name = normalize_names(1, name)
p, n = arith.factor(order)[0]
if modulus is None or modulus == "default":
if exists_conway_polynomial(p, n):
modulus = "conway"
else:
if p == 2:
modulus = "minimal_weight"
else:
modulus = "random"
elif modulus == "random":
modulus += str(random.randint(0, 1 << 128))
if isinstance(modulus, (list, tuple)):
modulus = FiniteField(p)["x"](modulus)
# some classes use 'random' as the modulus to
# generate a random modulus, but we don't want
# to cache it
elif sage.rings.polynomial.polynomial_element.is_Polynomial(modulus):
modulus = modulus.change_variable_name("x")
elif not isinstance(modulus, str):
raise ValueError("Modulus parameter not understood.")
else: # Neither a prime, nor a prime power
raise ValueError("the order of a finite field must be a prime power.")
return (order, name, modulus, impl, str(kwds), p, n, proof), kwds
开发者ID:sageb0t,项目名称:testsage,代码行数:54,代码来源:constructor.py
示例5: factored_order
def factored_order(self):
"""
EXAMPLES::
sage: R = IntegerModRing(18)
sage: FF = IntegerModRing(17)
sage: R.factored_order()
2 * 3^2
sage: FF.factored_order()
17
"""
return factor(self.__order, int_=(self.__order < 2 ** 31))
开发者ID:sensen1,项目名称:sage,代码行数:12,代码来源:integer_mod_ring.py
示例6: irred
def irred(K, n):
F = []
p = K.characteristic()
for ell, exp in factor(n):
if ell == 2:
F.append(rand_irred(K, ell**exp))
elif ell.divides(p-1):
F.append(kummer(K, ell, exp))
elif ell.divides(p+1):
F.append(cheby(K, ell, exp))
else:
F.append(rand_irred(K, ell**exp))
return reduce(comp_prod, F)
开发者ID:defeo,项目名称:ff_compositum,代码行数:14,代码来源:bench.py
示例7: factored_order
def factored_order(self):
"""
EXAMPLES::
sage: R = IntegerModRing(18)
sage: FF = IntegerModRing(17)
sage: R.factored_order()
2 * 3^2
sage: FF.factored_order()
17
"""
if self.__factored_order is not None:
return self.__factored_order
self.__factored_order = factor(self.__order, int_=(self.__order < 2**31))
return self.__factored_order
开发者ID:CETHop,项目名称:sage,代码行数:15,代码来源:integer_mod_ring.py
示例8: squarefree_part
def squarefree_part(x):
"""
Returns the square free part of `x`, i.e., a divisor
`z` such that `x = z y^2`, for a perfect square
`y^2`.
EXAMPLES::
sage: squarefree_part(100)
1
sage: squarefree_part(12)
3
sage: squarefree_part(10)
10
sage: squarefree_part(216r) # see #8976
6
::
sage: x = QQ['x'].0
sage: S = squarefree_part(-9*x*(x-6)^7*(x-3)^2); S
-9*x^2 + 54*x
sage: S.factor()
(-9) * (x - 6) * x
::
sage: f = (x^3 + x + 1)^3*(x-1); f
x^10 - x^9 + 3*x^8 + 3*x^5 - 2*x^4 - x^3 - 2*x - 1
sage: g = squarefree_part(f); g
x^4 - x^3 + x^2 - 1
sage: g.factor()
(x - 1) * (x^3 + x + 1)
"""
try:
return x.squarefree_part()
except AttributeError:
pass
from sage.rings.arith import factor
from sage.structure.all import parent
F = factor(x)
n = parent(x)(1)
for p, e in F:
if e%2 != 0:
n *= p
return n * F.unit()
开发者ID:Findstat,项目名称:sage,代码行数:46,代码来源:functional.py
示例9: factored_unit_order
def factored_unit_order(self):
"""
Returns a list of Factorization objects, each the factorization of the
order of the units in a `\ZZ / p^n \ZZ` component of this group (using
the Chinese Remainder Theorem).
EXAMPLES::
sage: R = Integers(8*9*25*17*29)
sage: R.factored_unit_order()
[2^2, 2 * 3, 2^2 * 5, 2^4, 2^2 * 7]
"""
ans = []
from sage.structure.factorization import Factorization
for p, e in self.factored_order():
ans.append(Factorization([(p,e-1)]) * factor(p-1, int_=(self.__order < 2**31)))
return ans
开发者ID:CETHop,项目名称:sage,代码行数:17,代码来源:integer_mod_ring.py
示例10: create_key_and_extra_args
def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
impl=None, proof=None, **kwds):
"""
EXAMPLES::
sage: GF.create_key_and_extra_args(9, 'a')
((9, ('a',), x^2 + 2*x + 2, None, '{}', 3, 2, True), {})
sage: GF.create_key_and_extra_args(9, 'a', foo='value')
((9, ('a',), x^2 + 2*x + 2, None, "{'foo': 'value'}", 3, 2, True), {'foo': 'value'})
"""
from sage.structure.proof.all import WithProof, arithmetic
if proof is None: proof = arithmetic()
with WithProof('arithmetic', proof):
order = int(order)
if order <= 1:
raise ValueError("the order of a finite field must be > 1.")
if arith.is_prime(order):
name = None
modulus = None
p = integer.Integer(order)
n = integer.Integer(1)
elif arith.is_prime_power(order):
if not names is None: name = names
name = normalize_names(1,name)
p, n = arith.factor(order)[0]
if modulus is None or isinstance(modulus, str):
# A string specifies an algorithm to find a suitable modulus.
if modulus == "default": # for backward compatibility
modulus = None
modulus = GF(p)['x'].irreducible_element(n, algorithm=modulus)
elif isinstance(modulus, (list, tuple)):
modulus = GF(p)['x'](modulus)
elif sage.rings.polynomial.polynomial_element.is_Polynomial(modulus):
modulus = modulus.change_variable_name('x')
else:
raise TypeError("wrong type for modulus parameter")
else:
raise ValueError("the order of a finite field must be a prime power.")
return (order, name, modulus, impl, str(kwds), p, n, proof), kwds
开发者ID:CETHop,项目名称:sage,代码行数:43,代码来源:constructor.py
示例11: other_keys
def other_keys(self, key, K):
"""
EXAMPLES::
sage: key, extra = GF.create_key_and_extra_args(9, 'a'); key
(9, ('a',), x^2 + 2*x + 2, None, '{}', 3, 2, True)
sage: K = GF.create_object(0, key); K
Finite Field in a of size 3^2
sage: GF.other_keys(key, K)
[(9, ('a',), x^2 + 2*x + 2, None, '{}', 3, 2, True),
(9, ('a',), x^2 + 2*x + 2, 'givaro', '{}', 3, 2, True)]
"""
if len(key) == 5: # backward compat
order, name, modulus, impl, _ = key
p, n = arith.factor(order)[0]
proof = True
else:
order, name, modulus, impl, _, p, n, proof = key
from sage.structure.proof.all import WithProof
with WithProof('arithmetic', proof):
if K.degree() > 1:
modulus = K.modulus().change_variable_name('x')
new_keys = [(order, name, modulus, impl, _, p, n, proof)]
from finite_field_prime_modn import FiniteField_prime_modn
if isinstance(K, FiniteField_prime_modn):
impl = 'modn'
elif isinstance(K, FiniteField_givaro):
impl = 'givaro'
else:
from finite_field_ntl_gf2e import FiniteField_ntl_gf2e
from finite_field_ext_pari import FiniteField_ext_pari
from finite_field_pari_ffelt import FiniteField_pari_ffelt
if isinstance(K, FiniteField_ntl_gf2e):
impl = 'ntl'
elif isinstance(K, FiniteField_ext_pari):
impl = 'pari_mod'
elif isinstance(K, FiniteField_pari_ffelt):
impl = 'pari_ffelt'
new_keys.append( (order, name, modulus, impl, _, p, n, proof) )
return new_keys
开发者ID:NitikaAgarwal,项目名称:sage,代码行数:41,代码来源:constructor.py
示例12: clifford_conductor
def clifford_conductor(self):
"""
This is the product of all primes where the Clifford invariant is -1
Note: For ternary forms, this is the discriminant of the
quaternion algebra associated to the quadratic space
(i.e. the even Clifford algebra)
EXAMPLES::
sage: Q = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
sage: Q.clifford_invariant(2)
1
sage: Q.clifford_invariant(37)
-1
sage: Q.clifford_conductor()
37
::
sage: DiagonalQuadraticForm(ZZ, [1, 1, 1]).clifford_conductor()
2
sage: QuadraticForm(ZZ, 3, [2, -2, 0, 2, 0, 5]).clifford_conductor()
30
For hyperbolic spaces, the clifford conductor is 1::
sage: H = QuadraticForm(ZZ, 2, [0, 1, 0])
sage: H.clifford_conductor()
1
sage: (H + H).clifford_conductor()
1
sage: (H + H + H).clifford_conductor()
1
sage: (H + H + H + H).clifford_conductor()
1
"""
D = self.disc()
return prod(filter(lambda p: self.clifford_invariant(p) == -1,
map(lambda x: x[0], factor(2 * self.level()))))
开发者ID:amitjamadagni,项目名称:sage,代码行数:41,代码来源:quadratic_form__ternary_Tornaria.py
示例13: hasse_conductor
def hasse_conductor(self):
"""
This is the product of all primes where the Hasse invariant equals -1
EXAMPLES::
sage: Q = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
sage: Q.hasse_invariant(2)
-1
sage: Q.hasse_invariant(37)
-1
sage: Q.hasse_conductor()
74
::
sage: DiagonalQuadraticForm(ZZ, [1, 1, 1]).hasse_conductor()
1
sage: QuadraticForm(ZZ, 3, [2, -2, 0, 2, 0, 5]).hasse_conductor()
10
"""
D = self.disc()
return prod([x[0] for x in factor(2 * self.level()) if self.hasse_invariant(x[0]) == -1])
开发者ID:sampadsaha5,项目名称:sage,代码行数:23,代码来源:quadratic_form__ternary_Tornaria.py
示例14: hasse_conductor
def hasse_conductor(self):
"""
This is the product of all primes where the Hasse invariant equals -1
EXAMPLES::
sage: Q = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
sage: Q.hasse_invariant(2)
-1
sage: Q.hasse_invariant(37)
-1
sage: Q.hasse_conductor()
74
::
sage: DiagonalQuadraticForm(ZZ, [1, 1, 1]).hasse_conductor()
1
sage: QuadraticForm(ZZ, 3, [2, -2, 0, 2, 0, 5]).hasse_conductor()
10
"""
D = self.disc()
return prod(filter(lambda(p):self.hasse_invariant(p)==-1, \
map(lambda(x):x[0],factor(2*self.level()))))
开发者ID:sageb0t,项目名称:testsage,代码行数:24,代码来源:quadratic_form__ternary_Tornaria.py
示例15: CohenOesterle
def CohenOesterle(eps, k):
r"""
Compute the Cohen-Oesterle function associate to eps, `k`.
This is a summand in the formula for the dimension of the space of
cusp forms of weight `2` with character
`\varepsilon`.
INPUT:
- ``eps`` - Dirichlet character
- ``k`` - integer
OUTPUT: element of the base ring of eps.
EXAMPLES::
sage: G.<eps> = DirichletGroup(7)
sage: sage.modular.dims.CohenOesterle(eps, 2)
-2/3
sage: sage.modular.dims.CohenOesterle(eps, 4)
-1
"""
N = eps.modulus()
facN = factor(N)
f = eps.conductor()
gamma_k = 0
if k%4==2:
gamma_k = frac(-1,4)
elif k%4==0:
gamma_k = frac(1,4)
mu_k = 0
if k%3==2:
mu_k = frac(-1,3)
elif k%3==0:
mu_k = frac(1,3)
def _lambda(r,s,p):
"""
Used internally by the CohenOesterle function.
INPUT:
- ``r, s, p`` - integers
OUTPUT: Integer
EXAMPLES: (indirect doctest)
::
sage: K = CyclotomicField(3)
sage: eps = DirichletGroup(7*43,K).0^2
sage: sage.modular.dims.CohenOesterle(eps,2)
-4/3
"""
if 2*s<=r:
if r%2==0:
return p**(r//2) + p**((r//2)-1)
return 2*p**((r-1)//2)
return 2*(p**(r-s))
#end def of lambda
K = eps.base_ring()
return K(frac(-1,2) * mul([_lambda(r,valuation(f,p),p) for p, r in facN]) + \
gamma_k * mul([CO_delta(r,p,N,eps) for p, r in facN]) + \
mu_k * mul([CO_nu(r,p,N,eps) for p, r in facN]))
开发者ID:Etn40ff,项目名称:sage,代码行数:69,代码来源:dims.py
示例16: O
def O(*x):
"""
Big O constructor for various types.
EXAMPLES:
This is useful for writing power series elements. ::
sage: R.<t> = ZZ[['t']]
sage: (1+t)^10 + O(t^5)
1 + 10*t + 45*t^2 + 120*t^3 + 210*t^4 + O(t^5)
A power series ring is created implicitly if a polynomial element is passed in. ::
sage: R.<x> = QQ['x']
sage: O(x^100)
O(x^100)
sage: 1/(1+x+O(x^5))
1 - x + x^2 - x^3 + x^4 + O(x^5)
sage: R.<u,v> = QQ[[]]
sage: 1 + u + v^2 + O(u, v)^5
1 + u + v^2 + O(u, v)^5
This is also useful to create p-adic numbers. ::
sage: O(7^6)
O(7^6)
sage: 1/3 + O(7^6)
5 + 4*7 + 4*7^2 + 4*7^3 + 4*7^4 + 4*7^5 + O(7^6)
It behaves well with respect to adding negative powers of p::
sage: a = O(11^-32); a
O(11^-32)
sage: a.parent()
11-adic Field with capped relative precision 20
There are problems if you add a rational with very negative valuation to a big_oh. ::
sage: 11^-12 + O(11^15)
11^-12 + O(11^8)
The reason that this fails is that the O function doesn't know the right precision cap to use. If you cast explicitly or use other means of element creation, you can get around this issue. ::
sage: K = Qp(11, 30)
sage: K(11^-12) + O(11^15)
11^-12 + O(11^15)
sage: 11^-12 + K(O(11^15))
11^-12 + O(11^15)
sage: K(11^-12, absprec = 15)
11^-12 + O(11^15)
sage: K(11^-12, 15)
11^-12 + O(11^15)
"""
if len(x) > 1:
if isinstance(x[0], multi_power_series_ring_element.MPowerSeries):
return multi_power_series_ring_element.MO(x)
x = x[0]
if isinstance(x, power_series_ring_element.PowerSeries):
return x.parent()(0, x.degree())
elif isinstance(x, Polynomial):
if x.parent().ngens() != 1:
raise NotImplementedError("completion only currently defined for univariate polynomials")
if not x.is_monomial():
raise NotImplementedError("completion only currently defined for the maximal ideal (x)")
return x.parent().completion(x.parent().gen())(0, x.degree())
elif isinstance(x, laurent_series_ring_element.LaurentSeries):
return laurent_series_ring_element.LaurentSeries(x.parent(), 0).add_bigoh(x.valuation())
elif isinstance(x, (int,long,integer.Integer,rational.Rational)): # p-adic number
if x <= 0:
raise ArithmeticError("x must be a prime power >= 2")
F = arith.factor(x)
if len(F) != 1:
raise ArithmeticError("x must be prime power")
p, r = F[0]
if r >= 0:
return padics_factory.Zp(p, prec = max(r, 20), type = 'capped-rel')(0, absprec = r)
else:
return padics_factory.Qp(p, prec = max(r, 20), type = 'capped-rel')(0, absprec = r)
elif isinstance(x, padic_generic_element.pAdicGenericElement):
return x.parent()(0, absprec = x.valuation())
raise ArithmeticError("O(x) not defined")
开发者ID:BlairArchibald,项目名称:sage,代码行数:88,代码来源:big_oh.py
示例17: mutually_orthogonal_latin_squares
def mutually_orthogonal_latin_squares(n,k=None, partitions = False):
r"""
Returns `k` Mutually Orthogonal `n\times n` Latin Squares (MOLS).
For more information on Latin Squares and MOLS, see
:mod:`~sage.combinat.designs.latin_squares` or the :wikipedia:`Latin_square`,
or even the
:wikipedia:`Wikipedia entry on MOLS <Graeco-Latin_square#Mutually_orthogonal_Latin_squares>`.
INPUT:
- ``n`` (integer) -- size of the latin square.
- ``k`` (integer) -- returns `k` MOLS. If set to ``None`` (default), returns
the maximum number of MOLS that Sage can build.
.. WARNING::
This has no reason to be the maximum number of `n\times n` MOLS, just
the best Sage can do !
- ``partition`` (boolean) -- a Latin Square can be seen as 3 partitions of
the `n^2` cells of the array into `n` sets of size `n`, respectively :
* The partition of rows
* The partition of columns
* The partition of number (cells numbered with 0, cells numbered with 1,
...)
These partitions have the additional property that any two sets from
different partitions intersect on exactly one element.
When ``partition`` is set to ``True``, this function returns a list of `k+2`
partitions satisfying this intersection property instead of the `k+2` MOLS
(though the data is exactly the same in both cases).
EXAMPLES::
sage: designs.mutually_orthogonal_latin_squares(5)
[
[0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4] [0 1 2 3 4]
[3 0 1 4 2] [4 3 0 2 1] [1 2 4 0 3] [2 4 3 1 0]
[4 3 0 2 1] [1 2 4 0 3] [2 4 3 1 0] [3 0 1 4 2]
[1 2 4 0 3] [2 4 3 1 0] [3 0 1 4 2] [4 3 0 2 1]
[2 4 3 1 0], [3 0 1 4 2], [4 3 0 2 1], [1 2 4 0 3]
]
sage: designs.mutually_orthogonal_latin_squares(7,3)
[
[0 1 2 3 4 5 6] [0 1 2 3 4 5 6] [0 1 2 3 4 5 6]
[4 0 3 1 6 2 5] [5 6 0 4 2 1 3] [6 4 1 0 5 3 2]
[5 6 0 4 2 1 3] [6 4 1 0 5 3 2] [1 3 5 2 0 6 4]
[6 4 1 0 5 3 2] [1 3 5 2 0 6 4] [2 5 4 6 3 0 1]
[1 3 5 2 0 6 4] [2 5 4 6 3 0 1] [3 2 6 5 1 4 0]
[2 5 4 6 3 0 1] [3 2 6 5 1 4 0] [4 0 3 1 6 2 5]
[3 2 6 5 1 4 0], [4 0 3 1 6 2 5], [5 6 0 4 2 1 3]
]
sage: designs.mutually_orthogonal_latin_squares(5,2,partitions=True)
[[[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]],
[[0, 5, 10, 15, 20],
[1, 6, 11, 16, 21],
[2, 7, 12, 17, 22],
[3, 8, 13, 18, 23],
[4, 9, 14, 19, 24]],
[[0, 6, 12, 18, 24],
[1, 7, 14, 15, 23],
[2, 9, 13, 16, 20],
[3, 5, 11, 19, 22],
[4, 8, 10, 17, 21]],
[[0, 7, 13, 19, 21],
[1, 9, 10, 18, 22],
[2, 8, 11, 15, 24],
[3, 6, 14, 17, 20],
[4, 5, 12, 16, 23]]]
TESTS::
sage: designs.mutually_orthogonal_latin_squares(5,5)
Traceback (most recent call last):
...
ValueError: There exist at most n-1 MOLS of size n.
"""
from sage.rings.finite_rings.constructor import FiniteField
from sage.combinat.designs.block_design import AffineGeometryDesign
from sage.rings.arith import is_prime_power
from sage.matrix.constructor import Matrix
from sage.rings.arith import factor
if k is not None and k >= n:
raise ValueError("There exist at most n-1 MOLS of size n.")
if is_prime_power(n):
if k is None:
k = n-1
# Section 6.4.1 of [Stinson2004]
Fp = FiniteField(n,'x')
B = AffineGeometryDesign(2,1,Fp).blocks()
#.........这里部分代码省略.........
开发者ID:amitjamadagni,项目名称:sage,代码行数:101,代码来源:latin_squares.py
示例18: create_object
def create_object(self, version, key, check_irreducible=True, elem_cache=None,
names=None, **kwds):
"""
EXAMPLES::
sage: K = GF(19) # indirect doctest
sage: TestSuite(K).run()
"""
# IMPORTANT! If you add a new class to the list of classes
# that get cached by this factor object, then you *must* add
# the following method to that class in order to fully support
# pickling:
#
# def __reduce__(self): # and include good doctests, please!
# return self._factory_data[0].reduce_data(self)
#
# This is not in the base class for finite fields, since some finite
# fields need not be created using this factory object, e.g., residue
# class fields.
if len(key) == 5:
# for backward compatibility of pickles (see trac 10975).
order, name, modulus, impl, _ = key
p, n = arith.factor(order)[0]
proof = True
else:
order, name, modulus, impl, _, p, n, proof = key
if elem_cache is None:
elem_cache = order < 500
if n == 1 and (impl is None or impl == 'modn'):
from finite_field_prime_modn import FiniteField_prime_modn
# Using a check option here is probably a worthwhile
# compromise since this constructor is simple and used a
# huge amount.
K = FiniteField_prime_modn(order, check=False)
else:
# We have to do this with block so that the finite field
# constructors below will use the proof flag that was
# passed in when checking for primality, factoring, etc.
# Otherwise, we would have to complicate all of their
# constructors with check options (like above).
from sage.structure.proof.all import WithProof
with WithProof('arithmetic', proof):
if check_irreducible and polynomial_element.is_Polynomial(modulus):
if modulus.parent().base_ring().characteristic() == 0:
modulus = modulus.change_ring(FiniteField(p))
if not modulus.is_irreducible():
raise ValueError("finite field modulus must be irreducible but it is not.")
if modulus.degree() != n:
raise ValueError("The degree of the modulus does not correspond to the cardinality of the field.")
if name is None:
raise TypeError("you must specify the generator name.")
if impl is None:
if order < zech_log_bound:
# DO *NOT* use for prime subfield, since that would lead to
# a circular reference in the call to ParentWithGens in the
# __init__ method.
impl = 'givaro'
elif order % 2 == 0:
impl = 'ntl'
else:
impl = 'pari_ffelt'
if impl == 'givaro':
if kwds.has_key('repr'):
repr = kwds['repr']
else:
repr = 'poly'
K = FiniteField_givaro(order, name, modulus, repr=repr, cache=elem_cache)
elif impl == 'ntl':
from finite_field_ntl_gf2e import FiniteField_ntl_gf2e
K = FiniteField_ntl_gf2e(order, name, modulus)
elif impl == 'pari_ffelt':
from finite_field_pari_ffelt import FiniteField_pari_ffelt
K = FiniteField_pari_ffelt(p, modulus, name)
elif (impl == 'pari_mod'
or impl == 'pari'): # for unpickling old pickles
from finite_field_ext_pari import FiniteField_ext_pari
K = FiniteField_ext_pari(order, name, modulus)
else:
raise ValueError("no such finite field implementation: %s" % impl)
# Temporary; see create_key_and_extra_args() above.
if kwds.has_key('prefix'):
K._prefix = kwds['prefix']
return K
开发者ID:NitikaAgarwal,项目名称:sage,代码行数:88,代码来源:constructor.py
示例19: create_key_and_extra_args
def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
impl=None, proof=None, **kwds):
"""
EXAMPLES::
sage: GF.create_key_and_extra_args(9, 'a')
((9, ('a',), x^2 + 2*x + 2, None, '{}', 3, 2, True), {})
sage: GF.create_key_and_extra_args(9, 'a', foo='value')
((9, ('a',), x^2 + 2*x + 2, None, "{'foo': 'value'}", 3, 2, True), {'foo': 'value'})
"""
from sage.structure.proof.all import WithProof, arithmetic
if proof is None: proof = arithmetic()
with WithProof('arithmetic', proof):
order = int(order)
if order <= 1:
raise ValueError("the order of a finite field must be > 1.")
if arith.is_prime(order):
name = None
modulus = None
p = integer.Integer(order)
n = integer.Integer(1)
elif arith.is_prime_power(order):
if not names is None: name = names
name = normalize_names(1,name)
p, n = arith.factor(order)[0]
# The following is a temporary solution that allows us
# to construct compatible systems of finite fields
# until algebraic closures of finite fields are
# implemented in Sage. It requires the user to
# specify two parameters:
#
# - `conway` -- boolean; if True, this field is
# constructed to fit in a compatible system using
# a Conway polynomial.
# - `prefix` -- a string used to generate names for
# automatically constructed finite fields
#
# See the docstring of FiniteFieldFactory for examples.
#
# Once algebraic closures of finite fields are
# implemented, this syntax should be superseded by
# something like the following:
#
# sage: Fpbar = GF(5).algebraic_closure('z')
# sage: F, e = Fpbar.subfield(3) # e is the embedding into Fpbar
# sage: F
# Finite field in z3 of size 5^3
#
# This temporary solution only uses actual Conway
# polynomials (no pseudo-Conway polynomials), since
# pseudo-Conway polynomials are not unique, and until
# we have algebraic closures of finite fields, there
# is no good place to store a specific choice of
# pseudo-Conway polynomials.
if name is None:
if not (kwds.has_key('conway') and kwds['conway']):
raise ValueError("parameter 'conway' is required if no name given")
if not kwds.has_key('prefix'):
raise ValueError("parameter 'prefix' is required if no name given")
name = kwds['prefix'] + str(n)
if kwds.has_key('conway') and kwds['conway']:
from conway_polynomials import conway_polynomial
if not kwds.has_key('prefix'):
raise ValueError("a prefix must be specified if conway=True")
if modulus is not None:
raise ValueError("no modulus may be specified if conway=True")
# The following raises a RuntimeError if no polynomial is found.
modulus = conway_polynomial(p, n)
if modulus is None or isinstance(modulus, str):
# A string specifies an algorithm to find a suitable modulus.
if modulus == "default": # for backward compatibility
modulus = None
modulus = GF(p)['x'].irreducible_element(n, algorithm=modulus)
elif isinstance(modulus, (list, tuple)):
modulus = GF(p)['x'](modulus)
elif sage.rings.polynomial.polynomial_element.is_Polynomial(modulus):
modulus = modulus.change_variable_name('x')
else:
raise TypeError("wrong type for modulus parameter")
else:
raise ValueError("the order of a finite field must be a prime power.")
return (order, name, modulus, impl, str(kwds), p, n, proof), kwds
开发者ID:NitikaAgarwal,项目名称:sage,代码行数:88,代码来源:constructor.py
示例20: difference_family
#.........这里部分代码省略.........
if existence:
return True
elif explain_construction:
return "The database contains a ({},{},{})-difference family".format(v,k,l)
vv, blocks = next(DF[v,k,l].iteritems())
# Build the group
from sage.rings.finite_rings.integer_mod_ring import Zmod
if len(vv) == 1:
G = Zmod(vv[0])
else:
from sage.categories.cartesian_product import cartesian_product
G = cartesian_product([Zmod(i) for i in vv])
df = [[G(i) for i in b] for b in blocks]
if check and not is_difference_family(G, df, v=v, k=k, l=l):
raise RuntimeError("There is an invalid ({},{},{})-difference "
"family in the database... Please contact "
"[email protected]".format(v,k,l))
return G,df
e = k*(k-1)
if (l*(v-1)) % e:
if existence:
return Unknown
raise NotImplementedError("No construction available for ({},{},{})-difference family".format(v,k,l))
t = l*(v-1) // e # number of blocks
# trivial construction
if k == (v-1) and l == (v-2):
from sage.rings.finite_rings.integer_mod_ring import Zmod
G = Zmod(v)
return G, [range(1,v)]
factorization = arith.factor(v)
D = None
if len(factorization) == 1: # i.e. is v a prime power
from sage.rings.finite_rings.constructor import GF
G = K = GF(v,'z')
if radical_difference_family(K, k, l, existence=True):
if existence:
return True
elif explain_construction:
return "Radical difference family on a finite field"
else:
D = radical_difference_family(K,k,l)
elif l == 1 and k == 6 and df_q_6_1(K,existence=True):
if existence:
return True
elif explain_construction:
return "Wilson 1972 difference family made from the union of two cyclotomic cosets"
else:
D = df_q_6_1(K)
# Twin prime powers construction
# i.e. v = p(p+2) where p and p+2 are prime powers
# k = (v-1)/2
# lambda = (k-1)/2 (ie 2l+1 = k)
elif (k == (v-1)//2 and
l == (k-1)//2 and
len(factorization) == 2 and
abs(pow(*factorization[0]) - pow(*factorization[1])) == 2):
if existence:
return True
|
请发表评论