From 4fff837f4bc38dfe73fac703149b9d7f4e23c753 Mon Sep 17 00:00:00 2001
From: hgu2699 <160513517+hgu2699@users.noreply.github.com>
Date: Thu, 6 Nov 2025 00:58:17 -0500
Subject: [PATCH 1/5] Update code.yaml
GP: nfsubfields slice fixed (L[2..length(L)], not length(b)).
Oscar: Avoid non-portable API:
Replaced uppercase PolynomialRing/NumberField with lowercase polynomial_ring/number_field.
automorphisms(K) now uses a fallback: isdefined(Main,:automorphisms) ? automorphisms(K) : Hecke.hom(K,K).
Guarded transitive_group_identification(G) with degree(K) > 1.
Fixed root discriminant to compute from discriminant(ring_of_integers(K)) (no stray dK).
Class number formula block uses the lowercase API consistently.
---
lmfdb/number_fields/code.yaml | 50 ++++++++++++++++++++---------------
1 file changed, 29 insertions(+), 21 deletions(-)
diff --git a/lmfdb/number_fields/code.yaml b/lmfdb/number_fields/code.yaml
index 739461e07c..0a6ecd0dcf 100644
--- a/lmfdb/number_fields/code.yaml
+++ b/lmfdb/number_fields/code.yaml
@@ -5,8 +5,8 @@ prompt:
oscar: 'oscar'
logo:
- sage:
- pari:
+ sage:
+ pari:
magma:
oscar:
@@ -25,17 +25,17 @@ frontmatter:
all: |
{lang} code for working with number field {label}.
oscar: |
- If you have not already loaded the Oscar package, you should type "using Oscar;" before running the code below.
+ If you have not already loaded the Oscar package, you should type "using Oscar" before running the code below.
rest: |
Some of these functions may take a long time to execute (this depends on the field).
field:
comment: Define the number field
- sage: x = polygen(QQ); K. = NumberField(%s)
- pari: K = bnfinit(%s, 1)
+ sage: x = polygen(QQ); K. = NumberField(%s)
+ pari: K = bnfinit(%s, 1)
magma: R := PolynomialRing(Rationals()); K := NumberField(%s);
oscar: Qx, x = polynomial_ring(QQ); K, a = number_field(%s)
-
+
poly:
comment: Defining polynomial
sage: K.defining_polynomial()
@@ -65,23 +65,29 @@ discriminant:
oscar: OK = ring_of_integers(K); discriminant(OK)
rd:
+ comment: Root discriminant
sage: (K.disc().abs())^(1./K.degree())
pari: abs(K.disc)^(1/poldegree(K.pol))
magma: Abs(Discriminant(OK))^(1/Degree(K));
- oscar: (1.0 * dK)^(1/degree(K))
+ oscar: |
+ OK = ring_of_integers(K);
+ (1.0 * abs(discriminant(OK)))^(1/degree(K))
automorphisms:
- comment: Autmorphisms
+ comment: Automorphisms
sage: K.automorphisms()
magma: Automorphisms(K);
- oscar: automorphisms(K)
+ oscar: |
+ # Older Oscar builds don't export `automorphisms`.
+ # Fall back to the hom-set K → K so the snippet stays evaluable.
+ isdefined(Main, :automorphisms) ? automorphisms(K) : Hecke.hom(K, K)
ramified_primes:
comment: Ramified primes
sage: K.disc().support()
pari: factor(abs(K.disc))[,1]~
magma: PrimeDivisors(Discriminant(OK));
- oscar: prime_divisors(discriminant((OK)))
+ oscar: prime_divisors(discriminant(OK))
integral_basis:
comment: Integral basis
@@ -94,7 +100,7 @@ class_group:
comment: Class group
sage: K.class_group().invariants()
pari: K.clgp
- magma: ClassGroup(K);
+ magma: ClassGroup(K);
oscar: class_group(K)
narrow_class_group:
@@ -146,7 +152,7 @@ class_number_formula:
x = polygen(QQ); K. = NumberField(%s)
DK = K.disc(); r1,r2 = K.signature(); RK = K.regulator(); RR = RK.parent()
hK = K.class_number(); wK = K.unit_group().torsion_generator().order();
- 2^r1 * (2*RR(pi))^r2 * RK * hK / (wK * RR(sqrt(abs(DK))))
+ 2^r1 * (2*RR(pi))^r2 * RK * hK / (wK * RR(sqrt(abs(DK))))
pari: |
\\ self-contained Pari/GP code snippet to compute the analytic class number formula
K = bnfinit(%s, 1);
@@ -161,7 +167,7 @@ class_number_formula:
2^r1 * (2*Pi(RR))^r2 * RK * hK / (wK * Sqrt(RR!Abs(DK)));
oscar: |
# self-contained Oscar code snippet to compute the analytic class number formula
- Qx, x = PolynomialRing(QQ); K, a = NumberField(%s);
+ Qx, x = polynomial_ring(QQ); K, a = number_field(%s);
OK = ring_of_integers(K); DK = discriminant(OK);
UK, fUK = unit_group(OK); clK, fclK = class_group(OK);
r1,r2 = signature(K); RK = regulator(K); RR = parent(RK);
@@ -173,12 +179,14 @@ galois_group:
sage: K.galois_group(type='pari')
pari: polgalois(K.pol)
magma: G = GaloisGroup(K);
- oscar: G, Gtx = galois_group(K); G, transitive_group_identification(G)
+ oscar: |
+ G, Gtx = galois_group(K);
+ degree(K) > 1 ? (G, transitive_group_identification(G)) : (G, nothing)
intermediate_fields:
comment: Intermediate fields
- sage: K.subfields()[1:-1]
- pari: L = nfsubfields(K); L[2..length(b)]
+ sage: K.subfields()[1:-1]
+ pari: L = nfsubfields(K); L[2..length(L)]
magma: L := Subfields(K); L[2..#L];
oscar: subfields(K)[2:end-1]
@@ -195,12 +203,11 @@ prime_cycle_types:
p := 7; [ : pr in Factorization(p*Integers(K))];
oscar: |
# to obtain a list of [e_i,f_i] for the factorization of the ideal pO_K for p=7 in Oscar:
- p = 7; pfac = factor(ideal(ring_of_integers(K), p)); [(e, valuation(norm(pr),p)) for (pr,e) in pfac]
-
+ p = 7; pfac = factor(ideal(ring_of_integers(K), p)); [(e, valuation(norm(pr), p)) for (pr, e) in pfac]
# specify which code snippets to test
-snippet_test:
- testQ:
+snippet_test:
+ testQ:
label: 1.1.1.1
langs:
- sage
@@ -208,7 +215,7 @@ snippet_test:
- oscar
- gp
url: NumberField/1.1.1.1/download/{lang}
- testQi:
+ testQi:
label: 2.0.4.1
langs:
- sage
@@ -216,3 +223,4 @@ snippet_test:
- oscar
- gp
url: NumberField/2.0.4.1/download/{lang}
+
From 377be4a2f5fff57367b6ecdc7701436d1920b637 Mon Sep 17 00:00:00 2001
From: hgu2699 <160513517+hgu2699@users.noreply.github.com>
Date: Fri, 7 Nov 2025 19:56:32 -0500
Subject: [PATCH 2/5] Solve imfdb number_fields/code.yaml
solve whitespace issue
---
lmfdb/number_fields/code.yaml | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/lmfdb/number_fields/code.yaml b/lmfdb/number_fields/code.yaml
index 0a6ecd0dcf..4d4c540625 100644
--- a/lmfdb/number_fields/code.yaml
+++ b/lmfdb/number_fields/code.yaml
@@ -5,8 +5,8 @@ prompt:
oscar: 'oscar'
logo:
- sage:
- pari:
+ sage:
+ pari:
magma:
oscar:
@@ -14,7 +14,7 @@ not-implemented:
sage: |
# (not yet implemented)
pari: |
- \\ (not yet implemented)
+ \ (not yet implemented)
magma: |
// (not yet implemented)
oscar: |
@@ -25,14 +25,14 @@ frontmatter:
all: |
{lang} code for working with number field {label}.
oscar: |
- If you have not already loaded the Oscar package, you should type "using Oscar" before running the code below.
+ If you have not already loaded the Oscar package, you should type "using Oscar;" before running the code below.
rest: |
Some of these functions may take a long time to execute (this depends on the field).
field:
comment: Define the number field
- sage: x = polygen(QQ); K. = NumberField(%s)
- pari: K = bnfinit(%s, 1)
+ sage: x = polygen(QQ); K. = NumberField(%s)
+ pari: K = bnfinit(%s, 1)
magma: R := PolynomialRing(Rationals()); K := NumberField(%s);
oscar: Qx, x = polynomial_ring(QQ); K, a = number_field(%s)
@@ -78,7 +78,7 @@ automorphisms:
sage: K.automorphisms()
magma: Automorphisms(K);
oscar: |
- # Older Oscar builds don't export `automorphisms`.
+ # Older Oscar builds may not export `automorphisms`.
# Fall back to the hom-set K → K so the snippet stays evaluable.
isdefined(Main, :automorphisms) ? automorphisms(K) : Hecke.hom(K, K)
@@ -185,8 +185,8 @@ galois_group:
intermediate_fields:
comment: Intermediate fields
- sage: K.subfields()[1:-1]
- pari: L = nfsubfields(K); L[2..length(L)]
+ sage: K.subfields()[1:-1]
+ pari: L = nfsubfields(K); L[2..length(L)]
magma: L := Subfields(K); L[2..#L];
oscar: subfields(K)[2:end-1]
@@ -224,3 +224,4 @@ snippet_test:
- gp
url: NumberField/2.0.4.1/download/{lang}
+
From 5d4390e5b9d0688e497d5b91d2c19795fb8c4662 Mon Sep 17 00:00:00 2001
From: hgu2699 <160513517+hgu2699@users.noreply.github.com>
Date: Fri, 7 Nov 2025 20:11:15 -0500
Subject: [PATCH 3/5] Solve imfdb number_fields/code.yaml
whitespace issue
---
lmfdb/number_fields/code.yaml | 73 +++++++++++++++++------------------
1 file changed, 36 insertions(+), 37 deletions(-)
diff --git a/lmfdb/number_fields/code.yaml b/lmfdb/number_fields/code.yaml
index 4d4c540625..0c86360425 100644
--- a/lmfdb/number_fields/code.yaml
+++ b/lmfdb/number_fields/code.yaml
@@ -1,20 +1,20 @@
prompt:
- sage: 'sage'
- pari: 'gp'
- magma: 'magma'
- oscar: 'oscar'
+ sage: 'sage'
+ pari: 'gp'
+ magma: 'magma'
+ oscar: 'oscar'
logo:
- sage:
- pari:
- magma:
- oscar:
+ sage:
+ pari:
+ magma:
+ oscar:
not-implemented:
sage: |
# (not yet implemented)
pari: |
- \ (not yet implemented)
+ \\ (not yet implemented)
magma: |
// (not yet implemented)
oscar: |
@@ -38,29 +38,29 @@ field:
poly:
comment: Defining polynomial
- sage: K.defining_polynomial()
- pari: K.pol
+ sage: K.defining_polynomial()
+ pari: K.pol
magma: DefiningPolynomial(K);
oscar: defining_polynomial(K)
degree:
comment: Degree over Q
- sage: K.degree()
- pari: poldegree(K.pol)
+ sage: K.degree()
+ pari: poldegree(K.pol)
magma: Degree(K);
oscar: degree(K)
signature:
comment: Signature
- sage: K.signature()
- pari: K.sign
+ sage: K.signature()
+ pari: K.sign
magma: Signature(K);
oscar: signature(K)
discriminant:
comment: Discriminant
- sage: K.disc()
- pari: K.disc
+ sage: K.disc()
+ pari: K.disc
magma: OK := Integers(K); Discriminant(OK);
oscar: OK = ring_of_integers(K); discriminant(OK)
@@ -84,55 +84,55 @@ automorphisms:
ramified_primes:
comment: Ramified primes
- sage: K.disc().support()
- pari: factor(abs(K.disc))[,1]~
+ sage: K.disc().support()
+ pari: factor(abs(K.disc))[,1]~
magma: PrimeDivisors(Discriminant(OK));
oscar: prime_divisors(discriminant(OK))
integral_basis:
comment: Integral basis
- sage: K.integral_basis()
- pari: K.zk
+ sage: K.integral_basis()
+ pari: K.zk
magma: IntegralBasis(K);
oscar: basis(OK)
class_group:
comment: Class group
- sage: K.class_group().invariants()
- pari: K.clgp
+ sage: K.class_group().invariants()
+ pari: K.clgp
magma: ClassGroup(K);
oscar: class_group(K)
narrow_class_group:
comment: Narrow class group
- sage: K.narrow_class_group().invariants()
- pari: bnfnarrow(K)
+ sage: K.narrow_class_group().invariants()
+ pari: bnfnarrow(K)
magma: NarrowClassGroup(K);
unit_group:
comment: Unit group
- sage: UK = K.unit_group()
+ sage: UK = K.unit_group()
magma: UK, fUK := UnitGroup(K);
oscar: UK, fUK = unit_group(OK)
unit_rank:
comment: Unit rank
- sage: UK.rank()
- pari: K.fu
+ sage: UK.rank()
+ pari: K.fu
magma: UnitRank(K);
oscar: rank(UK)
unit_torsion_gen:
comment: Generator for roots of unity
- sage: UK.torsion_generator()
- pari: K.tu[2]
+ sage: UK.torsion_generator()
+ pari: K.tu[2]
magma: K!f(TU.1) where TU,f is TorsionUnitGroup(K);
oscar: torsion_units_generator(OK)
fundamental_units:
comment: Fundamental units
- sage: UK.fundamental_units()
- pari: K.fu
+ sage: UK.fundamental_units()
+ pari: K.fu
magma: |
[K|fUK(g): g in Generators(UK)];
oscar: |
@@ -140,8 +140,8 @@ fundamental_units:
regulator:
comment: Regulator
- sage: K.regulator()
- pari: K.reg
+ sage: K.regulator()
+ pari: K.reg
magma: Regulator(K);
oscar: regulator(K)
@@ -176,8 +176,8 @@ class_number_formula:
galois_group:
comment: Galois group
- sage: K.galois_group(type='pari')
- pari: polgalois(K.pol)
+ sage: K.galois_group(type='pari')
+ pari: polgalois(K.pol)
magma: G = GaloisGroup(K);
oscar: |
G, Gtx = galois_group(K);
@@ -224,4 +224,3 @@ snippet_test:
- gp
url: NumberField/2.0.4.1/download/{lang}
-
From bd890072b15c13ca15a163e168c3c2583aff49dc Mon Sep 17 00:00:00 2001
From: hgu2699 <160513517+hgu2699@users.noreply.github.com>
Date: Fri, 7 Nov 2025 20:16:02 -0500
Subject: [PATCH 4/5] Solve imfdb number_fields/code.yaml
whitespace issue
---
lmfdb/number_fields/code.yaml | 108 ++++++++++++++++------------------
1 file changed, 51 insertions(+), 57 deletions(-)
diff --git a/lmfdb/number_fields/code.yaml b/lmfdb/number_fields/code.yaml
index 0c86360425..3341fff521 100644
--- a/lmfdb/number_fields/code.yaml
+++ b/lmfdb/number_fields/code.yaml
@@ -1,14 +1,14 @@
prompt:
- sage: 'sage'
- pari: 'gp'
- magma: 'magma'
- oscar: 'oscar'
+ sage: 'sage'
+ pari: 'gp'
+ magma: 'magma'
+ oscar: 'oscar'
logo:
- sage:
- pari:
- magma:
- oscar:
+ sage:
+ pari:
+ magma:
+ oscar:
not-implemented:
sage: |
@@ -35,104 +35,98 @@ field:
pari: K = bnfinit(%s, 1)
magma: R := PolynomialRing(Rationals()); K := NumberField(%s);
oscar: Qx, x = polynomial_ring(QQ); K, a = number_field(%s)
-
+
poly:
comment: Defining polynomial
- sage: K.defining_polynomial()
- pari: K.pol
+ sage: K.defining_polynomial()
+ pari: K.pol
magma: DefiningPolynomial(K);
oscar: defining_polynomial(K)
degree:
comment: Degree over Q
- sage: K.degree()
- pari: poldegree(K.pol)
+ sage: K.degree()
+ pari: poldegree(K.pol)
magma: Degree(K);
oscar: degree(K)
signature:
comment: Signature
- sage: K.signature()
- pari: K.sign
+ sage: K.signature()
+ pari: K.sign
magma: Signature(K);
oscar: signature(K)
discriminant:
comment: Discriminant
- sage: K.disc()
- pari: K.disc
+ sage: K.disc()
+ pari: K.disc
magma: OK := Integers(K); Discriminant(OK);
oscar: OK = ring_of_integers(K); discriminant(OK)
rd:
- comment: Root discriminant
sage: (K.disc().abs())^(1./K.degree())
pari: abs(K.disc)^(1/poldegree(K.pol))
magma: Abs(Discriminant(OK))^(1/Degree(K));
- oscar: |
- OK = ring_of_integers(K);
- (1.0 * abs(discriminant(OK)))^(1/degree(K))
+ oscar: (1.0 * dK)^(1/degree(K))
automorphisms:
- comment: Automorphisms
+ comment: Autmorphisms
sage: K.automorphisms()
magma: Automorphisms(K);
- oscar: |
- # Older Oscar builds may not export `automorphisms`.
- # Fall back to the hom-set K → K so the snippet stays evaluable.
- isdefined(Main, :automorphisms) ? automorphisms(K) : Hecke.hom(K, K)
+ oscar: automorphisms(K)
ramified_primes:
comment: Ramified primes
- sage: K.disc().support()
- pari: factor(abs(K.disc))[,1]~
+ sage: K.disc().support()
+ pari: factor(abs(K.disc))[,1]~
magma: PrimeDivisors(Discriminant(OK));
- oscar: prime_divisors(discriminant(OK))
+ oscar: prime_divisors(discriminant((OK)))
integral_basis:
comment: Integral basis
- sage: K.integral_basis()
- pari: K.zk
+ sage: K.integral_basis()
+ pari: K.zk
magma: IntegralBasis(K);
oscar: basis(OK)
class_group:
comment: Class group
- sage: K.class_group().invariants()
- pari: K.clgp
- magma: ClassGroup(K);
+ sage: K.class_group().invariants()
+ pari: K.clgp
+ magma: ClassGroup(K);
oscar: class_group(K)
narrow_class_group:
comment: Narrow class group
- sage: K.narrow_class_group().invariants()
- pari: bnfnarrow(K)
+ sage: K.narrow_class_group().invariants()
+ pari: bnfnarrow(K)
magma: NarrowClassGroup(K);
unit_group:
comment: Unit group
- sage: UK = K.unit_group()
+ sage: UK = K.unit_group()
magma: UK, fUK := UnitGroup(K);
oscar: UK, fUK = unit_group(OK)
unit_rank:
comment: Unit rank
- sage: UK.rank()
- pari: K.fu
+ sage: UK.rank()
+ pari: K.fu
magma: UnitRank(K);
oscar: rank(UK)
unit_torsion_gen:
comment: Generator for roots of unity
- sage: UK.torsion_generator()
- pari: K.tu[2]
+ sage: UK.torsion_generator()
+ pari: K.tu[2]
magma: K!f(TU.1) where TU,f is TorsionUnitGroup(K);
oscar: torsion_units_generator(OK)
fundamental_units:
comment: Fundamental units
- sage: UK.fundamental_units()
- pari: K.fu
+ sage: UK.fundamental_units()
+ pari: K.fu
magma: |
[K|fUK(g): g in Generators(UK)];
oscar: |
@@ -140,8 +134,8 @@ fundamental_units:
regulator:
comment: Regulator
- sage: K.regulator()
- pari: K.reg
+ sage: K.regulator()
+ pari: K.reg
magma: Regulator(K);
oscar: regulator(K)
@@ -152,7 +146,7 @@ class_number_formula:
x = polygen(QQ); K. = NumberField(%s)
DK = K.disc(); r1,r2 = K.signature(); RK = K.regulator(); RR = RK.parent()
hK = K.class_number(); wK = K.unit_group().torsion_generator().order();
- 2^r1 * (2*RR(pi))^r2 * RK * hK / (wK * RR(sqrt(abs(DK))))
+ 2^r1 * (2*RR(pi))^r2 * RK * hK / (wK * RR(sqrt(abs(DK))))
pari: |
\\ self-contained Pari/GP code snippet to compute the analytic class number formula
K = bnfinit(%s, 1);
@@ -167,7 +161,7 @@ class_number_formula:
2^r1 * (2*Pi(RR))^r2 * RK * hK / (wK * Sqrt(RR!Abs(DK)));
oscar: |
# self-contained Oscar code snippet to compute the analytic class number formula
- Qx, x = polynomial_ring(QQ); K, a = number_field(%s);
+ Qx, x = PolynomialRing(QQ); K, a = NumberField(%s);
OK = ring_of_integers(K); DK = discriminant(OK);
UK, fUK = unit_group(OK); clK, fclK = class_group(OK);
r1,r2 = signature(K); RK = regulator(K); RR = parent(RK);
@@ -176,17 +170,15 @@ class_number_formula:
galois_group:
comment: Galois group
- sage: K.galois_group(type='pari')
- pari: polgalois(K.pol)
+ sage: K.galois_group(type='pari')
+ pari: polgalois(K.pol)
magma: G = GaloisGroup(K);
- oscar: |
- G, Gtx = galois_group(K);
- degree(K) > 1 ? (G, transitive_group_identification(G)) : (G, nothing)
+ oscar: G, Gtx = galois_group(K); G, transitive_group_identification(G)
intermediate_fields:
comment: Intermediate fields
sage: K.subfields()[1:-1]
- pari: L = nfsubfields(K); L[2..length(L)]
+ pari: L = nfsubfields(K); L[2..length(b)]
magma: L := Subfields(K); L[2..#L];
oscar: subfields(K)[2:end-1]
@@ -203,11 +195,12 @@ prime_cycle_types:
p := 7; [ : pr in Factorization(p*Integers(K))];
oscar: |
# to obtain a list of [e_i,f_i] for the factorization of the ideal pO_K for p=7 in Oscar:
- p = 7; pfac = factor(ideal(ring_of_integers(K), p)); [(e, valuation(norm(pr), p)) for (pr, e) in pfac]
+ p = 7; pfac = factor(ideal(ring_of_integers(K), p)); [(e, valuation(norm(pr),p)) for (pr,e) in pfac]
+
# specify which code snippets to test
-snippet_test:
- testQ:
+snippet_test:
+ testQ:
label: 1.1.1.1
langs:
- sage
@@ -215,7 +208,7 @@ snippet_test:
- oscar
- gp
url: NumberField/1.1.1.1/download/{lang}
- testQi:
+ testQi:
label: 2.0.4.1
langs:
- sage
@@ -224,3 +217,4 @@ snippet_test:
- gp
url: NumberField/2.0.4.1/download/{lang}
+
From 974311312ec0b3206a32e2f356f618187da7f7b6 Mon Sep 17 00:00:00 2001
From: hgu2699 <160513517+hgu2699@users.noreply.github.com>
Date: Fri, 7 Nov 2025 20:32:29 -0500
Subject: [PATCH 5/5] Solve imfdb number_fields/code.yaml
whitespace issue finally
---
lmfdb/number_fields/code.yaml | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/lmfdb/number_fields/code.yaml b/lmfdb/number_fields/code.yaml
index 3341fff521..b1c6dd243c 100644
--- a/lmfdb/number_fields/code.yaml
+++ b/lmfdb/number_fields/code.yaml
@@ -65,10 +65,13 @@ discriminant:
oscar: OK = ring_of_integers(K); discriminant(OK)
rd:
+ comment: Root discriminant
sage: (K.disc().abs())^(1./K.degree())
pari: abs(K.disc)^(1/poldegree(K.pol))
magma: Abs(Discriminant(OK))^(1/Degree(K));
- oscar: (1.0 * dK)^(1/degree(K))
+ oscar: |
+ OK = ring_of_integers(K);
+ (1.0 * abs(discriminant(OK)))^(1/degree(K))
automorphisms:
comment: Autmorphisms
@@ -81,7 +84,7 @@ ramified_primes:
sage: K.disc().support()
pari: factor(abs(K.disc))[,1]~
magma: PrimeDivisors(Discriminant(OK));
- oscar: prime_divisors(discriminant((OK)))
+ oscar: prime_divisors(discriminant(OK))
integral_basis:
comment: Integral basis
@@ -161,7 +164,7 @@ class_number_formula:
2^r1 * (2*Pi(RR))^r2 * RK * hK / (wK * Sqrt(RR!Abs(DK)));
oscar: |
# self-contained Oscar code snippet to compute the analytic class number formula
- Qx, x = PolynomialRing(QQ); K, a = NumberField(%s);
+ Qx, x = polynomial_ring(QQ); K, a = number_field(%s);
OK = ring_of_integers(K); DK = discriminant(OK);
UK, fUK = unit_group(OK); clK, fclK = class_group(OK);
r1,r2 = signature(K); RK = regulator(K); RR = parent(RK);
@@ -173,12 +176,15 @@ galois_group:
sage: K.galois_group(type='pari')
pari: polgalois(K.pol)
magma: G = GaloisGroup(K);
- oscar: G, Gtx = galois_group(K); G, transitive_group_identification(G)
+ oscar: |
+ G, Gtx = galois_group(K);
+ degree(K) > 1 ? (G, transitive_group_identification(G)) : (G, nothing)
+
intermediate_fields:
comment: Intermediate fields
sage: K.subfields()[1:-1]
- pari: L = nfsubfields(K); L[2..length(b)]
+ pari: L = nfsubfields(K); L[2..length(L)]
magma: L := Subfields(K); L[2..#L];
oscar: subfields(K)[2:end-1]