Skip to content

Commit

Permalink
Bump dependencies (#3374)
Browse files Browse the repository at this point in the history
* `ordering` -> `internal_ordering` for polynomial rings
* Adjust to unexported symbols from Hecke
* `find_name` now lives in `PrettyPrinting`

(cherry picked from commit d32efdd)
  • Loading branch information
joschmitt authored and benlorenz committed Feb 22, 2024
1 parent f1abad7 commit cf09d17
Show file tree
Hide file tree
Showing 30 changed files with 97 additions and 95 deletions.
10 changes: 5 additions & 5 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,23 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
cohomCalg_jll = "5558cf25-a90e-53b0-b813-cadaa3ae7ade"

[compat]
AbstractAlgebra = "0.39.0"
AlgebraicSolving = "0.4.10"
AbstractAlgebra = "0.40.0"
AlgebraicSolving = "0.4.11"
Distributed = "1.6"
DocStringExtensions = "0.8, 0.9"
GAP = "0.10.2"
Hecke = "0.28.0"
Hecke = "0.29.0"
JSON = "^0.20, ^0.21"
JSON3 = "1.13.2"
LazyArtifacts = "1.6"
Nemo = "0.42.1"
Nemo = "0.43.0"
Pkg = "1.6"
Polymake = "0.11.13"
Preferences = "1"
Random = "1.6"
RandomExtensions = "0.4.3"
Serialization = "1.6"
Singular = "0.22.0"
Singular = "0.22.3"
TOPCOM_jll = "0.17.8"
UUIDs = "1.6"
cohomCalg_jll = "0.32.0"
Expand Down
8 changes: 3 additions & 5 deletions docs/src/CommutativeAlgebra/rings.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,13 @@ of the coefficient ring of the polynomial ring.
The basic constructor below allows one to build multivariate polynomial rings:

```@julia
polynomial_ring(C::Ring, V::Vector{String}; ordering=:lex, cached::Bool = true)
polynomial_ring(C::Ring, V::Vector{String}; cached::Bool = true)
```

Its return value is a tuple, say `R, vars`, consisting of a polynomial ring `R` with coefficient ring `C` and a vector `vars` of generators (variables) which print according to the strings in the vector `V` .
The input `ordering=:lex` refers to the lexicograpical monomial ordering which specifies the default way of storing and displaying polynomials in OSCAR (terms are sorted in descending
order). The other possible choices are `:deglex` and `:degrevlex`. Gröbner bases, however, can be computed with respect to any monomial ordering. See the section on Gröbner bases.

!!! note
Caching is used to ensure that a given ring constructed from given parameters is unique in the system. For example, there is only one ring of multivariate polynomials over $\mathbb{Z}$ with variables printing as x, y, z, and with `ordering=:lex`.
Caching is used to ensure that a given ring constructed from given parameters is unique in the system. For example, there is only one ring of multivariate polynomials over $\mathbb{Z}$ with variables printing as x, y, z.

###### Examples

Expand Down Expand Up @@ -264,7 +262,7 @@ grade(R::MPolyRing, W::Vector{<:Vector{<:IntegerUnion}})
grade(R::MPolyRing, W::Vector{<:IntegerUnion})
```
```@docs
graded_polynomial_ring(C::Ring, V::Vector{String}, W; ordering=:lex)
graded_polynomial_ring(C::Ring, V::Vector{String}, W)
```

## Tests on Graded Rings
Expand Down
2 changes: 1 addition & 1 deletion examples/ZeroDec.jl
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ before returning the primary decomposition.
#OUTPUT: Primary decomposition of I with associated primes in a list

function zerodecomp(I::Singular.sideal, outputReduced::Bool = false, usefglm::Bool = false)
if ordering(I.base_ring) != :lex
if Singular.ordering(I.base_ring) != :lex
Icopy = changeOrderOfBasering(I, :lex);
else
Icopy = Singular.deepcopy(I)
Expand Down
22 changes: 11 additions & 11 deletions experimental/GModule/GaloisCohomology.jl
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ end
The natural `ZZ[H]` module where `H`, a subgroup of the
automorphism group acts on the ray class group.
"""
function Oscar.gmodule(H::PermGroup, mR::MapRayClassGrp, mG = automorphism_group(PermGroup, nf(order(codomain((mR)))))[2])
k = nf(order(codomain(mR)))
function Oscar.gmodule(H::PermGroup, mR::MapRayClassGrp, mG = automorphism_group(PermGroup, Hecke.nf(order(codomain((mR)))))[2])
k = Hecke.nf(order(codomain(mR)))
G = domain(mG)

ac = Hecke.induce_action(mR, [image(mG, G(g)) for g = gens(H)])
Expand Down Expand Up @@ -145,14 +145,14 @@ function Oscar.gmodule(H::PermGroup, mu::Map{FinGenAbGroup, FacElemMon{AbsSimple
return _gmodule(base_ring(codomain(mu)), H, mu, mG)
end

function Oscar.gmodule(H::PermGroup, mu::Map{FinGenAbGroup, AbsSimpleNumFieldOrder}, mG = automorphism_group(PermGroup, nf(codomain(mu)))[2])
function Oscar.gmodule(H::PermGroup, mu::Map{FinGenAbGroup, AbsSimpleNumFieldOrder}, mG = automorphism_group(PermGroup, Hecke.nf(codomain(mu)))[2])
#TODO: preimage for sunits can fail (inf. loop) if
# (experimentally) the ideals in S are not coprime or include 1
# or if the s-unit is not in the image (eg. action and not closed set S)
u = domain(mu)
U = [mu(g) for g = gens(u)]
zk = codomain(mu)
k = nf(zk)
k = Hecke.nf(zk)
G = domain(mG)
ac = [hom(u, u, [preimage(mu, zk(mG(G(g))(k(x)))) for x = U]) for g = gens(H)]
return gmodule(H, ac)
Expand Down Expand Up @@ -1045,7 +1045,7 @@ function Oscar.galois_group(A::ClassField, ::QQField; idel_parent::Union{IdelPar
mR = A.rayclassgroupmap
mQ = A.quotientmap
zk = order(m0)
@req order(automorphism_group(nf(zk))[1]) == degree(zk) "base field must be normal"
@req order(automorphism_group(Hecke.nf(zk))[1]) == degree(zk) "base field must be normal"
if gcd(degree(A), degree(base_field(A))) == 1
s, ms = split_extension(gmodule(A))
return permutation_group(s), ms
Expand All @@ -1060,7 +1060,7 @@ function Oscar.galois_group(A::ClassField, ::QQField; idel_parent::Union{IdelPar
@assert Oscar.GrpCoh.istwo_cocycle(a)
gA = gmodule(A, idel_parent.mG)
qA = cohomology_group(gA, 2)
n = degree(nf(zk))
n = degree(Hecke.nf(zk))
aa = map_entries(a, parent = gA) do x
x = parent(x)(Hecke.mod_sym(x.coeff, gcd(n, degree(A))))
J = ideal(idel_parent, x, coprime = m0)
Expand Down Expand Up @@ -1125,15 +1125,15 @@ For a 2-cochain with with values in the multiplicative group of a number field,
compute the local invariant of the algebra at the completion at the prime
ideal or embeddings given.
"""
function local_index(CC::GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}, P::AbsSimpleNumFieldOrderIdeal, mG::Map = automorphism_group(PermGroup, nf(order(P)))[2]; B = nothing, index_only::Bool = false)
function local_index(CC::GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}, P::AbsSimpleNumFieldOrderIdeal, mG::Map = automorphism_group(PermGroup, Hecke.nf(order(P)))[2]; B = nothing, index_only::Bool = false)
return local_index([CC], P, mG, B = B, index_only = index_only)[1]
end

function local_index(C::GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}, emb::Hecke.NumFieldEmb, mG::Map = automorphism_group(PermGroup, nf(order(P)))[2]; index_only::Bool = false)
function local_index(C::GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}, emb::Hecke.NumFieldEmb, mG::Map = automorphism_group(PermGroup, Hecke.nf(order(P)))[2]; index_only::Bool = false)
return local_index([C], emb, mG)[1]
end

function local_index(CC::Vector{GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}}, emb::Hecke.NumFieldEmb, mG::Map = automorphism_group(PermGroup, nf(order(P)))[2]; index_only::Bool = false)
function local_index(CC::Vector{GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}}, emb::Hecke.NumFieldEmb, mG::Map = automorphism_group(PermGroup, Hecke.nf(order(P)))[2]; index_only::Bool = false)
if is_real(emb)
return [Hecke.QmodnZ()(0) for x = CC]
end
Expand Down Expand Up @@ -1198,8 +1198,8 @@ function induce_hom(ml::Hecke.CompletionMap, mL::Hecke.CompletionMap, mkK::NumFi
return hom(l, L, hom(bl, bL, rt), im_data)
end

function local_index(CC::Vector{GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}}, P::AbsSimpleNumFieldOrderIdeal, mG::Map = automorphism_group(PermGroup, nf(order(P)))[2]; B::Any = nothing, index_only::Bool = false)
k = nf(order(P))
function local_index(CC::Vector{GrpCoh.CoChain{2, PermGroupElem, GrpCoh.MultGrpElem{AbsSimpleNumFieldElem}}}, P::AbsSimpleNumFieldOrderIdeal, mG::Map = automorphism_group(PermGroup, Hecke.nf(order(P)))[2]; B::Any = nothing, index_only::Bool = false)
k = Hecke.nf(order(P))

if B !== nothing && haskey(B.lp, P)
data = B.lp[P]
Expand Down
8 changes: 4 additions & 4 deletions experimental/GaloisGrp/src/Subfields.jl
Original file line number Diff line number Diff line change
Expand Up @@ -314,8 +314,8 @@ function _subfields(K::AbsSimpleNumField; pStart = 2*degree(K)+1, prime = 0)
@show pr = clog(B, p)
@show pr *= div(n,2)
@show pr += 2*clog(2*n, p)
H = factor_mod_pk_init(f, p)
@show factor_mod_pk(H, 1)
H = Hecke.factor_mod_pk_init(f, p)
@show Hecke.factor_mod_pk(H, 1)

Check warning on line 318 in experimental/GaloisGrp/src/Subfields.jl

View check run for this annotation

Codecov / codecov/patch

experimental/GaloisGrp/src/Subfields.jl#L317-L318

Added lines #L317 - L318 were not covered by tests

b = basis(K)
b .*= inv(derivative(f)(gen(K)))
Expand All @@ -324,7 +324,7 @@ function _subfields(K::AbsSimpleNumField; pStart = 2*degree(K)+1, prime = 0)
bz = [Zx(bd[i]*bt[i]) for i=1:length(bd)]
@assert parent(f) == parent(bz[1])

lf = factor_mod_pk(Array, H, 1)
lf = Hecke.factor_mod_pk(Array, H, 1)

Check warning on line 327 in experimental/GaloisGrp/src/Subfields.jl

View check run for this annotation

Codecov / codecov/patch

experimental/GaloisGrp/src/Subfields.jl#L327

Added line #L327 was not covered by tests
#the roots in G are of course roots of the lf[i]
#roots that belong to the same factor would give rise
#to the same principal subfield. So we can save on LLL calls.
Expand All @@ -334,7 +334,7 @@ function _subfields(K::AbsSimpleNumField; pStart = 2*degree(K)+1, prime = 0)
rt_to_lf = [findall(x->iszero(f[1](x)), r) for f = lf]
done = zeros(Int, length(lf))
while true
lf = factor_mod_pk(Array, H, pr)
lf = Hecke.factor_mod_pk(Array, H, pr)

Check warning on line 337 in experimental/GaloisGrp/src/Subfields.jl

View check run for this annotation

Codecov / codecov/patch

experimental/GaloisGrp/src/Subfields.jl#L337

Added line #L337 was not covered by tests
ppr = ZZRingElem(p)^pr
@assert parent(lf[1][1]) == parent(f)
@assert all(x->is_monic(x[1]), lf)
Expand Down
4 changes: 2 additions & 2 deletions experimental/QuadFormAndIsom/src/embeddings.jl
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ function _overlattice(gamma::TorQuadModuleMap,
z = zero_matrix(QQ, 0, degree(A))
glue = reduce(vcat, QQMatrix[matrix(QQ, 1, degree(A), g) for g in _glue]; init=z)
glue = vcat(basis_matrix(A+B), glue)
Fakeglue = FakeFmpqMat(glue)
Fakeglue = Hecke.FakeFmpqMat(glue)
_FakeB = hnf(Fakeglue)
_B = QQ(1, denominator(Fakeglue))*change_base_ring(QQ, numerator(_FakeB))
C = lattice(ambient_space(A), _B[end-rank(A)-rank(B)+1:end, :])
Expand All @@ -182,7 +182,7 @@ function _overlattice(gamma::TorQuadModuleMap,
z = zero_matrix(QQ, 0, degree(cover(D)))
glue = reduce(vcat, QQMatrix[matrix(QQ, 1, degree(cover(D)), g) for g in _glue]; init=z)
glue = vcat(block_diagonal_matrix(basis_matrix.(ZZLat[A, B])), glue)
Fakeglue = FakeFmpqMat(glue)
Fakeglue = Hecke.FakeFmpqMat(glue)
_FakeB = hnf(Fakeglue)
_B = QQ(1, denominator(Fakeglue))*change_base_ring(QQ, numerator(_FakeB))
C = lattice(ambient_space(cover(D)), _B[end-rank(A)-rank(B)+1:end, :])
Expand Down
18 changes: 9 additions & 9 deletions experimental/QuadFormAndIsom/src/hermitian_miranda_morrison.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

function _get_quotient_split(P::Hecke.RelNumFieldOrderIdeal, i::Int)
OE = order(P)
E = nf(OE)
E = Hecke.nf(OE)

Check warning on line 15 in experimental/QuadFormAndIsom/src/hermitian_miranda_morrison.jl

View check run for this annotation

Codecov / codecov/patch

experimental/QuadFormAndIsom/src/hermitian_miranda_morrison.jl#L15

Added line #L15 was not covered by tests
Eabs, EabstoE = absolute_simple_field(E)

Pabs = EabstoE\P
Expand Down Expand Up @@ -57,7 +57,7 @@ end
function _get_quotient_inert(P::Hecke.RelNumFieldOrderIdeal, i::Int)
OE = order(P)
OK = base_ring(OE)
E = nf(OE)
E = Hecke.nf(OE)

Check warning on line 60 in experimental/QuadFormAndIsom/src/hermitian_miranda_morrison.jl

View check run for this annotation

Codecov / codecov/patch

experimental/QuadFormAndIsom/src/hermitian_miranda_morrison.jl#L60

Added line #L60 was not covered by tests
K = base_field(E)
p = minimum(P)

Expand Down Expand Up @@ -109,7 +109,7 @@ end

function _get_quotient_ramified(P::Hecke.RelNumFieldOrderIdeal, i::Int)
OE = order(P)
E = nf(OE)
E = Hecke.nf(OE)
p = minimum(P)
e = valuation(different(OE), P)

Expand Down Expand Up @@ -182,7 +182,7 @@ function _get_quotient(O::Hecke.RelNumFieldOrder, p::Hecke.AbsSimpleNumFieldOrde
@hassert :ZZLatWithIsom 1 is_prime(p)
@hassert :ZZLatWithIsom 1 is_maximal(order(p))
@hassert :ZZLatWithIsom 1 order(p) === base_ring(O)
E = nf(O)
E = Hecke.nf(O)
F = prime_decomposition(O, p)
P = F[1][1]
if i == 0
Expand Down Expand Up @@ -489,7 +489,7 @@ end

function _is_special(L::HermLat, p::AbsSimpleNumFieldOrderIdeal)
OE = base_ring(L)
E = nf(OE)
E = Hecke.nf(OE)
lp = prime_decomposition(OE, p)
if lp[1][2] != 2 || !iseven(rank(L))
return false
Expand Down Expand Up @@ -588,14 +588,14 @@ end

# the minimum P-valuation among all the non-zero entries of M
function _scale_valuation(M::T, P::Hecke.RelNumFieldOrderIdeal) where T <: MatrixElem{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}
@hassert :ZZLatWithIsom 1 nf(order(P)) === base_ring(M)
@hassert :ZZLatWithIsom 1 Hecke.nf(order(P)) === base_ring(M)
iszero(M) && return inf
return minimum(valuation(v, P) for v in collect(M) if !iszero(v))
end

# the minimum P-valuation among all the non-zero diagonal entries of M
function _norm_valuation(M::T, P::Hecke.RelNumFieldOrderIdeal) where T <: MatrixElem{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}
@hassert :ZZLatWithIsom 1 nf(order(P)) === base_ring(M)
@hassert :ZZLatWithIsom 1 Hecke.nf(order(P)) === base_ring(M)
iszero(diagonal(M)) && return inf
r = minimum(valuation(v, P) for v in diagonal(M) if !iszero(v))
return r
Expand Down Expand Up @@ -671,7 +671,7 @@ end
#
function _approximate_isometry(H::HermLat, H2::HermLat, g::AutomorphismGroupElem{TorQuadModule}, P::Hecke.RelNumFieldOrderIdeal, e::Int, a::Int, k::Int, res::AbstractSpaceRes)
E = base_field(H)
@hassert :ZZLatWithIsom 1 nf(order(P)) === E
@hassert :ZZLatWithIsom 1 Hecke.nf(order(P)) === E
ok, b = is_modular(H, minimum(P))
if ok && b == -a
return identity_matrix(E, 1)
Expand Down Expand Up @@ -743,7 +743,7 @@ end
# that part is taken from the Sage implementation of Simon Brandhorst
function _find_rho(P::Hecke.RelNumFieldOrderIdeal, e::Int)
OE = order(P)
E = nf(OE)
E = Hecke.nf(OE)
lp = prime_decomposition(OE, minimum(P))
dya = is_dyadic(P)
if !dya
Expand Down
4 changes: 2 additions & 2 deletions experimental/Schemes/elliptic_surface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ function weierstrass_model(X::EllipticSurface)
@assert has_decomposition_info(default_covering(P))

# Create the singular Weierstrass model S of the elliptic K3 surface X
a = a_invars(E)
a = a_invariants(E)
U = affine_charts(P)[1] # the standard Weierstrass chart
(x, y, t) = gens(OO(U))
@assert all(denominator(i)==1 for i in a)
Expand Down Expand Up @@ -1639,7 +1639,7 @@ function _elliptic_parameter_conversion(X::EllipticSurface, u::VarietyFunctionFi

f_loc = first(gens(modulus(OO(U))))
@assert f == R_to_kkt_frac_XY(f_loc) && _is_in_weierstrass_form(f) "local equation is not in Weierstrass form"
a = a_invars(E)
a = a_invariants(E)

u_loc = u[U]::AbstractAlgebra.Generic.FracFieldElem # the representative on the Weierstrass chart

Expand Down
8 changes: 4 additions & 4 deletions src/AlgebraicGeometry/Surfaces/K3Auto.jl
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@ end
function short_vectors_affine(gram::MatrixElem, v::MatrixElem, alpha::QQFieldElem, d)
# find a solution <x,v> = alpha with x in L if it exists
w = gram*transpose(v)
tmp = FakeFmpqMat(w)
tmp = Hecke.FakeFmpqMat(w)
wn = numerator(tmp)
wd = denominator(tmp)
b, x = can_solve_with_solution(transpose(wn), matrix(ZZ, 1, 1, [alpha*wd]); side = :right)
Expand Down Expand Up @@ -1074,7 +1074,7 @@ function _alg58_close_vector(data::BorcherdsCtx, w::ZZMatrix)
# to avoid repeated calculation of the same stuff e.g. K and Q
# find a solution <x,v> = alpha with x in L if it exists
ww = transpose(wS)
tmp = FakeFmpqMat(ww)
tmp = Hecke.FakeFmpqMat(ww)
wn = numerator(tmp)
wd = denominator(tmp)
K = kernel(wn; side = :left)
Expand Down Expand Up @@ -1156,7 +1156,7 @@ function _walls_of_chamber(data::BorcherdsCtx, weyl_vector, algorithm::Symbol=:s
d = rank(data.S)
walls = Vector{ZZMatrix}(undef,d)
for i in 1:d
vs = numerator(FakeFmpqMat(walls1[i]))
vs = numerator(Hecke.FakeFmpqMat(walls1[i]))
g = gcd(_vec(vs))
if g != 1
vs = divexact(vs, g)
Expand All @@ -1174,7 +1174,7 @@ function _walls_of_chamber(data::BorcherdsCtx, weyl_vector, algorithm::Symbol=:s
for i in 1:d
v = matrix(QQ, 1, degree(data.SS), r[i])
# rescale v to be primitive in S
vs = numerator(FakeFmpqMat(v))
vs = numerator(Hecke.FakeFmpqMat(v))
g = gcd(_vec(vs))

Check warning on line 1178 in src/AlgebraicGeometry/Surfaces/K3Auto.jl

View check run for this annotation

Codecov / codecov/patch

src/AlgebraicGeometry/Surfaces/K3Auto.jl#L1177-L1178

Added lines #L1177 - L1178 were not covered by tests
if g!=1
vs = divexact(vs, g)
Expand Down
2 changes: 1 addition & 1 deletion src/Groups/matrices/iso_nf_fq.jl
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ end

# Small helper function to make the reduction call uniform
function _reduce(M::MatrixElem{AbsSimpleNumFieldElem}, OtoFq)
e = extend(OtoFq, nf(domain(OtoFq)))
e = extend(OtoFq, Hecke.nf(domain(OtoFq)))
return map_entries(e, M)
end

Expand Down
11 changes: 6 additions & 5 deletions src/InvariantTheory/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,9 @@ mutable struct InvRing{FldT, GrpT, PolyRingElemT, PolyRingT, ActionT}
field::FldT
poly_ring::PolyRingT

# The underlying polynomial ring needs to be created with ordering = :degrevlex
# for the application of divrem in the secondary and fundamental invariants.
# The underlying polynomial ring needs to be created with
# internal_ordering = :degrevlex for the application of divrem in the secondary
# and fundamental invariants.
# If the user gave us a polynomial ring (which is stored in poly_ring), this
# might not be the case.
poly_ring_internal::PolyRingT
Expand All @@ -78,7 +79,7 @@ mutable struct InvRing{FldT, GrpT, PolyRingElemT, PolyRingT, ActionT}
n = degree(G)
# We want to use divrem w.r.t. degrevlex for the computation of secondary
# invariants and fundamental invariants
R, = graded_polynomial_ring(K, "x" => 1:n, cached = false, ordering = :degrevlex)
R, = graded_polynomial_ring(K, "x" => 1:n, cached = false, internal_ordering = :degrevlex)
return InvRing(K, G, action, R)
end

Expand All @@ -103,8 +104,8 @@ mutable struct InvRing{FldT, GrpT, PolyRingElemT, PolyRingT, ActionT}

# We want to use divrem w.r.t. degrevlex for the computation of secondary
# invariants and fundamental invariants
if ordering(poly_ring) != :degrevlex
z.poly_ring_internal, _ = graded_polynomial_ring(K, ngens(poly_ring), cached = false, ordering = :degrevlex)
if internal_ordering(poly_ring) != :degrevlex
z.poly_ring_internal, _ = graded_polynomial_ring(K, ngens(poly_ring), cached = false, internal_ordering = :degrevlex)
end

return z
Expand Down
Loading

0 comments on commit cf09d17

Please sign in to comment.