passagemath-database-jones-numfield 10.6.45__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_database_jones_numfield/__init__.py +3 -0
- passagemath_database_jones_numfield-10.6.45.dist-info/METADATA +94 -0
- passagemath_database_jones_numfield-10.6.45.dist-info/METADATA.bak +95 -0
- passagemath_database_jones_numfield-10.6.45.dist-info/RECORD +10 -0
- passagemath_database_jones_numfield-10.6.45.dist-info/WHEEL +5 -0
- passagemath_database_jones_numfield-10.6.45.dist-info/top_level.txt +2 -0
- sage/all__sagemath_database_jones_numfield.py +3 -0
- sage/databases/all__sagemath_database_jones_numfield.py +6 -0
- sage/databases/jones.py +282 -0
- sage_wheels/share/jones/jones.sobj +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: passagemath-database-jones-numfield
|
|
3
|
+
Version: 10.6.45
|
|
4
|
+
Summary: passagemath: Table of number fields
|
|
5
|
+
Author-email: The Sage Developers <sage-support@googlegroups.com>
|
|
6
|
+
Maintainer: Matthias Köppe, passagemath contributors
|
|
7
|
+
License-Expression: GPL-2.0-or-later
|
|
8
|
+
Project-URL: release notes, https://github.com/passagemath/passagemath/releases
|
|
9
|
+
Project-URL: repo (upstream), https://github.com/sagemath/sage
|
|
10
|
+
Project-URL: repo, https://github.com/passagemath/passagemath
|
|
11
|
+
Project-URL: documentation, https://passagemath.org/docs/latest
|
|
12
|
+
Project-URL: homepage (upstream), https://www.sagemath.org
|
|
13
|
+
Project-URL: discourse, https://passagemath.discourse.group
|
|
14
|
+
Project-URL: tracker (upstream), https://github.com/sagemath/sage/issues
|
|
15
|
+
Project-URL: tracker, https://github.com/passagemath/passagemath/issues
|
|
16
|
+
Classifier: Development Status :: 6 - Mature
|
|
17
|
+
Classifier: Intended Audience :: Education
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Operating System :: POSIX
|
|
20
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
21
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
22
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
28
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
29
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
30
|
+
Requires-Python: <3.15,>=3.10
|
|
31
|
+
Description-Content-Type: text/x-rst
|
|
32
|
+
Requires-Dist: passagemath-environment~=10.6.45.0
|
|
33
|
+
|
|
34
|
+
=====================================
|
|
35
|
+
passagemath: Table of number fields
|
|
36
|
+
=====================================
|
|
37
|
+
|
|
38
|
+
`passagemath <https://github.com/passagemath/passagemath>`__ is open
|
|
39
|
+
source mathematical software in Python, released under the GNU General
|
|
40
|
+
Public Licence GPLv2+.
|
|
41
|
+
|
|
42
|
+
It is a fork of `SageMath <https://www.sagemath.org/>`__, which has been
|
|
43
|
+
developed 2005-2025 under the motto “Creating a Viable Open Source
|
|
44
|
+
Alternative to Magma, Maple, Mathematica, and MATLAB”.
|
|
45
|
+
|
|
46
|
+
The passagemath fork uses the motto "Creating a Free Passage Between the
|
|
47
|
+
Scientific Python Ecosystem and Mathematical Software Communities."
|
|
48
|
+
It was created in October 2024 with the following goals:
|
|
49
|
+
|
|
50
|
+
- providing modularized installation with pip,
|
|
51
|
+
- establishing first-class membership in the scientific Python
|
|
52
|
+
ecosystem,
|
|
53
|
+
- giving `clear attribution of upstream
|
|
54
|
+
projects <https://groups.google.com/g/sage-devel/c/6HO1HEtL1Fs/m/G002rPGpAAAJ>`__,
|
|
55
|
+
- providing independently usable Python interfaces to upstream
|
|
56
|
+
libraries,
|
|
57
|
+
- offering `platform portability and integration testing
|
|
58
|
+
services <https://github.com/passagemath/passagemath/issues/704>`__
|
|
59
|
+
to upstream projects,
|
|
60
|
+
- inviting collaborations with upstream projects,
|
|
61
|
+
- `building a professional, respectful, inclusive
|
|
62
|
+
community <https://groups.google.com/g/sage-devel/c/xBzaINHWwUQ>`__,
|
|
63
|
+
- `empowering Sage users to participate in the scientific Python ecosystem
|
|
64
|
+
<https://github.com/passagemath/passagemath/issues/248>`__ by publishing packages,
|
|
65
|
+
- developing a port to `Pyodide <https://pyodide.org/en/stable/>`__ for
|
|
66
|
+
serverless deployment with Javascript,
|
|
67
|
+
- developing a native Windows port.
|
|
68
|
+
|
|
69
|
+
`Full documentation <https://passagemath.org/docs/latest/html/en/index.html>`__ is
|
|
70
|
+
available online.
|
|
71
|
+
|
|
72
|
+
passagemath attempts to support and provides binary wheels suitable for
|
|
73
|
+
all major Linux distributions and recent versions of macOS.
|
|
74
|
+
|
|
75
|
+
Binary wheels for native Windows (x86_64) are are available for a subset of
|
|
76
|
+
the passagemath distributions. Use of the full functionality of passagemath
|
|
77
|
+
on Windows currently requires the use of Windows Subsystem for Linux (WSL)
|
|
78
|
+
or virtualization.
|
|
79
|
+
|
|
80
|
+
The supported Python versions in the passagemath 10.6.x series are 3.10.x-3.14.x.
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
About this pip-installable distribution package
|
|
84
|
+
-----------------------------------------------
|
|
85
|
+
|
|
86
|
+
This pip-installable distribution ``passagemath-database-jones-numfield`` is a
|
|
87
|
+
distribution of a table of number fields with bounded ramification and degree
|
|
88
|
+
at most 6.
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
What is included
|
|
92
|
+
----------------
|
|
93
|
+
|
|
94
|
+
- Wheels on PyPI include the database_jones_numfield files
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: passagemath-database-jones-numfield
|
|
3
|
+
Version: 10.6.45
|
|
4
|
+
Summary: passagemath: Table of number fields
|
|
5
|
+
Author-email: The Sage Developers <sage-support@googlegroups.com>
|
|
6
|
+
Maintainer: Matthias Köppe, passagemath contributors
|
|
7
|
+
License-Expression: GPL-2.0-or-later
|
|
8
|
+
Project-URL: release notes, https://github.com/passagemath/passagemath/releases
|
|
9
|
+
Project-URL: repo (upstream), https://github.com/sagemath/sage
|
|
10
|
+
Project-URL: repo, https://github.com/passagemath/passagemath
|
|
11
|
+
Project-URL: documentation, https://passagemath.org/docs/latest
|
|
12
|
+
Project-URL: homepage (upstream), https://www.sagemath.org
|
|
13
|
+
Project-URL: discourse, https://passagemath.discourse.group
|
|
14
|
+
Project-URL: tracker (upstream), https://github.com/sagemath/sage/issues
|
|
15
|
+
Project-URL: tracker, https://github.com/passagemath/passagemath/issues
|
|
16
|
+
Classifier: Development Status :: 6 - Mature
|
|
17
|
+
Classifier: Intended Audience :: Education
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Operating System :: POSIX
|
|
20
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
21
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
22
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
28
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
29
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
30
|
+
Requires-Python: <3.15,>=3.10
|
|
31
|
+
Description-Content-Type: text/x-rst
|
|
32
|
+
Requires-Dist: passagemath-conf~=10.6.45.0; sys_platform != "win32"
|
|
33
|
+
Requires-Dist: passagemath-environment~=10.6.45.0
|
|
34
|
+
|
|
35
|
+
=====================================
|
|
36
|
+
passagemath: Table of number fields
|
|
37
|
+
=====================================
|
|
38
|
+
|
|
39
|
+
`passagemath <https://github.com/passagemath/passagemath>`__ is open
|
|
40
|
+
source mathematical software in Python, released under the GNU General
|
|
41
|
+
Public Licence GPLv2+.
|
|
42
|
+
|
|
43
|
+
It is a fork of `SageMath <https://www.sagemath.org/>`__, which has been
|
|
44
|
+
developed 2005-2025 under the motto “Creating a Viable Open Source
|
|
45
|
+
Alternative to Magma, Maple, Mathematica, and MATLAB”.
|
|
46
|
+
|
|
47
|
+
The passagemath fork uses the motto "Creating a Free Passage Between the
|
|
48
|
+
Scientific Python Ecosystem and Mathematical Software Communities."
|
|
49
|
+
It was created in October 2024 with the following goals:
|
|
50
|
+
|
|
51
|
+
- providing modularized installation with pip,
|
|
52
|
+
- establishing first-class membership in the scientific Python
|
|
53
|
+
ecosystem,
|
|
54
|
+
- giving `clear attribution of upstream
|
|
55
|
+
projects <https://groups.google.com/g/sage-devel/c/6HO1HEtL1Fs/m/G002rPGpAAAJ>`__,
|
|
56
|
+
- providing independently usable Python interfaces to upstream
|
|
57
|
+
libraries,
|
|
58
|
+
- offering `platform portability and integration testing
|
|
59
|
+
services <https://github.com/passagemath/passagemath/issues/704>`__
|
|
60
|
+
to upstream projects,
|
|
61
|
+
- inviting collaborations with upstream projects,
|
|
62
|
+
- `building a professional, respectful, inclusive
|
|
63
|
+
community <https://groups.google.com/g/sage-devel/c/xBzaINHWwUQ>`__,
|
|
64
|
+
- `empowering Sage users to participate in the scientific Python ecosystem
|
|
65
|
+
<https://github.com/passagemath/passagemath/issues/248>`__ by publishing packages,
|
|
66
|
+
- developing a port to `Pyodide <https://pyodide.org/en/stable/>`__ for
|
|
67
|
+
serverless deployment with Javascript,
|
|
68
|
+
- developing a native Windows port.
|
|
69
|
+
|
|
70
|
+
`Full documentation <https://passagemath.org/docs/latest/html/en/index.html>`__ is
|
|
71
|
+
available online.
|
|
72
|
+
|
|
73
|
+
passagemath attempts to support and provides binary wheels suitable for
|
|
74
|
+
all major Linux distributions and recent versions of macOS.
|
|
75
|
+
|
|
76
|
+
Binary wheels for native Windows (x86_64) are are available for a subset of
|
|
77
|
+
the passagemath distributions. Use of the full functionality of passagemath
|
|
78
|
+
on Windows currently requires the use of Windows Subsystem for Linux (WSL)
|
|
79
|
+
or virtualization.
|
|
80
|
+
|
|
81
|
+
The supported Python versions in the passagemath 10.6.x series are 3.10.x-3.14.x.
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
About this pip-installable distribution package
|
|
85
|
+
-----------------------------------------------
|
|
86
|
+
|
|
87
|
+
This pip-installable distribution ``passagemath-database-jones-numfield`` is a
|
|
88
|
+
distribution of a table of number fields with bounded ramification and degree
|
|
89
|
+
at most 6.
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
What is included
|
|
93
|
+
----------------
|
|
94
|
+
|
|
95
|
+
- Wheels on PyPI include the database_jones_numfield files
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
passagemath_database_jones_numfield/__init__.py,sha256=d05QXdJ4poWm5aG29zPdN-ALRtVYuZJllt0M3paxdx8,120
|
|
2
|
+
sage/all__sagemath_database_jones_numfield.py,sha256=_BI9Fw48b1L-whWCVreD4WSRFI3WgTzdyP12wY5QVKA,130
|
|
3
|
+
sage/databases/all__sagemath_database_jones_numfield.py,sha256=pKsZf9qbjY6EM50Yf3QBm4ySHm3bx8wiSerQ5y3Lf2w,179
|
|
4
|
+
sage/databases/jones.py,sha256=HHFQAVE_-KlheT7rnIKJGTw5nxBl49fdvcrl-eoNexI,11022
|
|
5
|
+
sage_wheels/share/jones/jones.sobj,sha256=HgCAbbvJn_XahvjSHXW6sU5LAKhe68cOoNnGS-ct_Dg,184466
|
|
6
|
+
passagemath_database_jones_numfield-10.6.45.dist-info/METADATA,sha256=fb_GNj9YmRvLYf3O3DMUHEAL5MhhREkQiUkTR-BY7fw,4226
|
|
7
|
+
passagemath_database_jones_numfield-10.6.45.dist-info/METADATA.bak,sha256=__7TPtaXgdVkp8F4ZuvGTdROP61ZH_8y2kYRNlnDGSs,4294
|
|
8
|
+
passagemath_database_jones_numfield-10.6.45.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
9
|
+
passagemath_database_jones_numfield-10.6.45.dist-info/top_level.txt,sha256=vcClUXeh-dH3LwFncGB2sW6oItm7f9dYAe6QyP0Fdbo,41
|
|
10
|
+
passagemath_database_jones_numfield-10.6.45.dist-info/RECORD,,
|
sage/databases/jones.py
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-database-jones-numfield
|
|
2
|
+
r"""
|
|
3
|
+
John Jones's tables of number fields
|
|
4
|
+
|
|
5
|
+
In order to use the Jones database, the optional :ref:`database_jones_numfield
|
|
6
|
+
<spkg_database_jones_numfield>` package must be installed using the Sage command ::
|
|
7
|
+
|
|
8
|
+
sage -i database_jones_numfield
|
|
9
|
+
|
|
10
|
+
This is a table of number fields with bounded ramification and
|
|
11
|
+
degree `\leq 6`. You can query the database for all number
|
|
12
|
+
fields in Jones's tables with bounded ramification and degree.
|
|
13
|
+
|
|
14
|
+
EXAMPLES: First load the database::
|
|
15
|
+
|
|
16
|
+
sage: J = JonesDatabase()
|
|
17
|
+
sage: J
|
|
18
|
+
John Jones's table of number fields with bounded ramification and degree <= 6
|
|
19
|
+
|
|
20
|
+
List the degree and discriminant of all fields in the database that
|
|
21
|
+
have ramification at most at 2::
|
|
22
|
+
|
|
23
|
+
sage: [(k.degree(), k.disc()) for k in J.unramified_outside([2])] # optional - database_jones_numfield
|
|
24
|
+
[(1, 1), (2, -4), (2, -8), (2, 8), (4, 256), (4, 512), (4, -1024), (4, -2048), (4, 2048), (4, 2048), (4, 2048)]
|
|
25
|
+
|
|
26
|
+
List the discriminants of the fields of degree exactly 2 unramified
|
|
27
|
+
outside 2::
|
|
28
|
+
|
|
29
|
+
sage: [k.disc() for k in J.unramified_outside([2],2)] # optional - database_jones_numfield
|
|
30
|
+
[-4, -8, 8]
|
|
31
|
+
|
|
32
|
+
List the discriminants of cubic field in the database ramified
|
|
33
|
+
exactly at 3 and 5::
|
|
34
|
+
|
|
35
|
+
sage: [k.disc() for k in J.ramified_at([3,5],3)] # optional - database_jones_numfield
|
|
36
|
+
[-135, -675, -6075, -6075]
|
|
37
|
+
sage: factor(6075)
|
|
38
|
+
3^5 * 5^2
|
|
39
|
+
sage: factor(675)
|
|
40
|
+
3^3 * 5^2
|
|
41
|
+
sage: factor(135)
|
|
42
|
+
3^3 * 5
|
|
43
|
+
|
|
44
|
+
List all fields in the database ramified at 101::
|
|
45
|
+
|
|
46
|
+
sage: J.ramified_at(101) # optional - database_jones_numfield
|
|
47
|
+
[Number Field in a with defining polynomial x^2 - 101,
|
|
48
|
+
Number Field in a with defining polynomial x^4 - x^3 + 13*x^2 - 19*x + 361,
|
|
49
|
+
Number Field in a with defining polynomial x^5 + x^4 - 6*x^3 - x^2 + 18*x + 4,
|
|
50
|
+
Number Field in a with defining polynomial x^5 + 2*x^4 + 7*x^3 + 4*x^2 + 11*x - 6,
|
|
51
|
+
Number Field in a with defining polynomial x^5 - x^4 - 40*x^3 - 93*x^2 - 21*x + 17]
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
# ****************************************************************************
|
|
55
|
+
# Sage: Open Source Mathematical Software
|
|
56
|
+
#
|
|
57
|
+
# Copyright (C) 2005 William Stein <wstein@gmail.com>
|
|
58
|
+
#
|
|
59
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
60
|
+
#
|
|
61
|
+
# This code is distributed in the hope that it will be useful,
|
|
62
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
63
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
64
|
+
# General Public License for more details.
|
|
65
|
+
#
|
|
66
|
+
# The full text of the GPL is available at:
|
|
67
|
+
#
|
|
68
|
+
# https://www.gnu.org/licenses/
|
|
69
|
+
# ****************************************************************************
|
|
70
|
+
|
|
71
|
+
import os
|
|
72
|
+
|
|
73
|
+
from sage.rings.number_field.number_field import NumberField
|
|
74
|
+
from sage.rings.rational_field import RationalField
|
|
75
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
76
|
+
from sage.combinat.subset import powerset
|
|
77
|
+
from sage.env import SAGE_SHARE
|
|
78
|
+
|
|
79
|
+
from sage.misc.persist import load, save
|
|
80
|
+
|
|
81
|
+
from sage.features.databases import DatabaseJones
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def sortkey(K):
|
|
85
|
+
"""
|
|
86
|
+
A completely deterministic sorting key for number fields.
|
|
87
|
+
|
|
88
|
+
EXAMPLES::
|
|
89
|
+
|
|
90
|
+
sage: from sage.databases.jones import sortkey
|
|
91
|
+
sage: sortkey(QuadraticField(-3))
|
|
92
|
+
(2, 3, False, x^2 + 3)
|
|
93
|
+
"""
|
|
94
|
+
return K.degree(), abs(K.discriminant()), K.discriminant() > 0, K.polynomial()
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class JonesDatabase:
|
|
98
|
+
def __init__(self):
|
|
99
|
+
self.root = None
|
|
100
|
+
|
|
101
|
+
def __repr__(self):
|
|
102
|
+
return "John Jones's table of number fields with bounded ramification and degree <= 6"
|
|
103
|
+
|
|
104
|
+
def _load(self, path, filename):
|
|
105
|
+
print(filename)
|
|
106
|
+
i = 0
|
|
107
|
+
while filename[i].isalpha():
|
|
108
|
+
i += 1
|
|
109
|
+
j = len(filename) - 1
|
|
110
|
+
while filename[j].isalpha() or filename[j] in [".", "_"]:
|
|
111
|
+
j -= 1
|
|
112
|
+
S = sorted([eval(z) for z in filename[i:j + 1].split("-")])
|
|
113
|
+
with open(path + "/" + filename) as f:
|
|
114
|
+
data = f.read()
|
|
115
|
+
data = data.replace("^", "**")
|
|
116
|
+
x = PolynomialRing(RationalField(), 'x').gen() # used next line
|
|
117
|
+
v = eval(data)
|
|
118
|
+
s = tuple(S)
|
|
119
|
+
if s in self.root:
|
|
120
|
+
self.root[s] += v
|
|
121
|
+
self.root[s].sort()
|
|
122
|
+
else:
|
|
123
|
+
self.root[s] = v
|
|
124
|
+
|
|
125
|
+
def _init(self, path):
|
|
126
|
+
"""
|
|
127
|
+
Create the database from scratch from the PARI files on John Jones's
|
|
128
|
+
web page, downloaded (e.g., via wget) to a local directory, which
|
|
129
|
+
is specified as path above.
|
|
130
|
+
|
|
131
|
+
INPUT:
|
|
132
|
+
|
|
133
|
+
- ``path`` -- (default: works on William Stein install)
|
|
134
|
+
path must be the path to Jones's Number_Fields directory
|
|
135
|
+
(http://hobbes.la.asu.edu/Number_Fields); these files should have
|
|
136
|
+
been downloaded using wget
|
|
137
|
+
|
|
138
|
+
EXAMPLES: This is how to create the database from scratch, assuming
|
|
139
|
+
that the number fields are in the default directory above: From a
|
|
140
|
+
cold start of Sage::
|
|
141
|
+
|
|
142
|
+
sage: J = JonesDatabase()
|
|
143
|
+
sage: J._init() # not tested
|
|
144
|
+
...
|
|
145
|
+
|
|
146
|
+
This takes about 5 seconds.
|
|
147
|
+
"""
|
|
148
|
+
x = PolynomialRing(RationalField(), 'x').gen()
|
|
149
|
+
self.root = {}
|
|
150
|
+
self.root[tuple()] = [x - 1]
|
|
151
|
+
if not os.path.exists(path):
|
|
152
|
+
raise OSError("Path %s does not exist." % path)
|
|
153
|
+
for X in os.listdir(path):
|
|
154
|
+
if X[-4:] == "solo":
|
|
155
|
+
Z = path + "/" + X
|
|
156
|
+
print(X)
|
|
157
|
+
for Y in os.listdir(Z):
|
|
158
|
+
if Y[-3:] == ".gp":
|
|
159
|
+
self._load(Z, Y)
|
|
160
|
+
|
|
161
|
+
data_dir = os.path.dirname(DatabaseJones().absolute_filename())
|
|
162
|
+
os.makedirs(data_dir, exist_ok=True)
|
|
163
|
+
save(self.root, os.path.join(data_dir, "jones.sobj"))
|
|
164
|
+
|
|
165
|
+
def unramified_outside(self, S, d=None, var='a'):
|
|
166
|
+
"""
|
|
167
|
+
Return all fields in the database of degree d unramified
|
|
168
|
+
outside S. If d is omitted, return fields of any degree up to 6.
|
|
169
|
+
The fields are ordered by degree and discriminant.
|
|
170
|
+
|
|
171
|
+
INPUT:
|
|
172
|
+
|
|
173
|
+
- ``S`` -- list or set of primes, or a single prime
|
|
174
|
+
|
|
175
|
+
- ``d`` -- ``None`` (default, in which case all fields of degree <= 6 are returned)
|
|
176
|
+
or a positive integer giving the degree of the number fields returned
|
|
177
|
+
|
|
178
|
+
- ``var`` -- the name used for the generator of the number fields (default: ``'a'``)
|
|
179
|
+
|
|
180
|
+
EXAMPLES::
|
|
181
|
+
|
|
182
|
+
sage: J = JonesDatabase() # optional - database_jones_numfield
|
|
183
|
+
sage: J.unramified_outside([101,109]) # optional - database_jones_numfield
|
|
184
|
+
[Number Field in a with defining polynomial x - 1,
|
|
185
|
+
Number Field in a with defining polynomial x^2 - 101,
|
|
186
|
+
Number Field in a with defining polynomial x^2 - 109,
|
|
187
|
+
Number Field in a with defining polynomial x^3 - x^2 - 36*x + 4,
|
|
188
|
+
Number Field in a with defining polynomial x^4 - x^3 + 13*x^2 - 19*x + 361,
|
|
189
|
+
Number Field in a with defining polynomial x^4 - x^3 + 14*x^2 + 34*x + 393,
|
|
190
|
+
Number Field in a with defining polynomial x^5 + x^4 - 6*x^3 - x^2 + 18*x + 4,
|
|
191
|
+
Number Field in a with defining polynomial x^5 + 2*x^4 + 7*x^3 + 4*x^2 + 11*x - 6,
|
|
192
|
+
Number Field in a with defining polynomial x^5 - x^4 - 40*x^3 - 93*x^2 - 21*x + 17]
|
|
193
|
+
"""
|
|
194
|
+
try:
|
|
195
|
+
S = list(S)
|
|
196
|
+
except TypeError:
|
|
197
|
+
S = [S]
|
|
198
|
+
Z = []
|
|
199
|
+
for X in powerset(S):
|
|
200
|
+
Z += self.ramified_at(X, d=d, var=var)
|
|
201
|
+
return sorted(Z, key=sortkey)
|
|
202
|
+
|
|
203
|
+
def __getitem__(self, S):
|
|
204
|
+
return self.get(S)
|
|
205
|
+
|
|
206
|
+
def get(self, S, var='a'):
|
|
207
|
+
"""
|
|
208
|
+
Return all fields in the database ramified exactly at
|
|
209
|
+
the primes in S.
|
|
210
|
+
|
|
211
|
+
INPUT:
|
|
212
|
+
|
|
213
|
+
- ``S`` -- list or set of primes, or a single prime
|
|
214
|
+
|
|
215
|
+
- ``var`` -- the name used for the generator of the number fields (default: ``'a'``)
|
|
216
|
+
|
|
217
|
+
EXAMPLES::
|
|
218
|
+
|
|
219
|
+
sage: J = JonesDatabase() # optional - database_jones_numfield
|
|
220
|
+
sage: J.get(163, var='z') # optional - database_jones_numfield
|
|
221
|
+
[Number Field in z with defining polynomial x^2 + 163,
|
|
222
|
+
Number Field in z with defining polynomial x^3 - x^2 - 54*x + 169,
|
|
223
|
+
Number Field in z with defining polynomial x^4 - x^3 - 7*x^2 + 2*x + 9]
|
|
224
|
+
sage: J.get([3, 4]) # optional - database_jones_numfield
|
|
225
|
+
Traceback (most recent call last):
|
|
226
|
+
...
|
|
227
|
+
ValueError: S must be a list of primes
|
|
228
|
+
"""
|
|
229
|
+
if self.root is None:
|
|
230
|
+
self.root = load(DatabaseJones().absolute_filename())
|
|
231
|
+
try:
|
|
232
|
+
S = list(S)
|
|
233
|
+
except TypeError:
|
|
234
|
+
S = [S]
|
|
235
|
+
if not all(p.is_prime() for p in S):
|
|
236
|
+
raise ValueError("S must be a list of primes")
|
|
237
|
+
S.sort()
|
|
238
|
+
s = tuple(S)
|
|
239
|
+
if s not in self.root:
|
|
240
|
+
return []
|
|
241
|
+
return [NumberField(f, var, check=False) for f in self.root[s]]
|
|
242
|
+
|
|
243
|
+
def ramified_at(self, S, d=None, var='a'):
|
|
244
|
+
"""
|
|
245
|
+
Return all fields in the database of degree d ramified exactly at
|
|
246
|
+
the primes in S. The fields are ordered by degree and discriminant.
|
|
247
|
+
|
|
248
|
+
INPUT:
|
|
249
|
+
|
|
250
|
+
- ``S`` -- list or set of primes
|
|
251
|
+
|
|
252
|
+
- ``d`` -- ``None`` (default, in which case all fields of degree <= 6 are returned)
|
|
253
|
+
or a positive integer giving the degree of the number fields returned
|
|
254
|
+
|
|
255
|
+
- ``var`` -- the name used for the generator of the number fields (default: ``'a'``)
|
|
256
|
+
|
|
257
|
+
EXAMPLES::
|
|
258
|
+
|
|
259
|
+
sage: # optional - database_jones_numfield
|
|
260
|
+
sage: J = JonesDatabase()
|
|
261
|
+
sage: J.ramified_at([101,109])
|
|
262
|
+
[]
|
|
263
|
+
sage: J.ramified_at([109])
|
|
264
|
+
[Number Field in a with defining polynomial x^2 - 109,
|
|
265
|
+
Number Field in a with defining polynomial x^3 - x^2 - 36*x + 4,
|
|
266
|
+
Number Field in a with defining polynomial x^4 - x^3 + 14*x^2 + 34*x + 393]
|
|
267
|
+
sage: J.ramified_at(101)
|
|
268
|
+
[Number Field in a with defining polynomial x^2 - 101,
|
|
269
|
+
Number Field in a with defining polynomial x^4 - x^3 + 13*x^2 - 19*x + 361,
|
|
270
|
+
Number Field in a with defining polynomial x^5 + x^4 - 6*x^3 - x^2 + 18*x + 4,
|
|
271
|
+
Number Field in a with defining polynomial x^5 + 2*x^4 + 7*x^3 + 4*x^2 + 11*x - 6,
|
|
272
|
+
Number Field in a with defining polynomial x^5 - x^4 - 40*x^3 - 93*x^2 - 21*x + 17]
|
|
273
|
+
sage: J.ramified_at((2, 5, 29), 3, 'c')
|
|
274
|
+
[Number Field in c with defining polynomial x^3 - x^2 - 8*x - 28,
|
|
275
|
+
Number Field in c with defining polynomial x^3 - x^2 + 10*x + 102,
|
|
276
|
+
Number Field in c with defining polynomial x^3 - x^2 - 48*x - 188,
|
|
277
|
+
Number Field in c with defining polynomial x^3 - x^2 + 97*x - 333]
|
|
278
|
+
"""
|
|
279
|
+
Z = self.get(S, var=var)
|
|
280
|
+
if d is not None:
|
|
281
|
+
Z = [k for k in Z if k.degree() == d]
|
|
282
|
+
return sorted(Z, key=sortkey)
|
|
Binary file
|