LMFDB / lmfdb

L-Functions and Modular Forms Database
Other
245 stars 198 forks source link

Several Siegel modular forms pages that get stuck and produce server errrors #1531

Closed AndrewVSutherland closed 8 years ago

AndrewVSutherland commented 8 years ago

If you go to the page http://www.lmfdb.org/ModularForm/GSp/Q/Sp4Z_2/ and click on any of the Galois orbit links for weights 26, 28, or 30 in the first table the server appears to go into an infinite loop (and eventually times out with a server error). If you run the lmfdb locally and request the page

http://127.0.0.1:37777/ModularForm/GSp/Q/Sp4Z_2.26_C

it appears to get stuck in an infinite loop (or possibly just a very long computation) and will eventually consume a lot of memory (67 GB when I left it running overnight). It appears to get stuck inside the _maximal_order number field method in Sage which makes a call to _pari_integral_basis that does not return in less than 8 hours.

Below is the traceback you get on ctrl-C:

`Traceback (most recent call last): File "/usr/local/sage/sage-1/local/lib/python/SocketServer.py", line 295, in _handle_request_noblock self.process_request(request, client_address) File "/usr/local/sage/sage-1/local/lib/python/SocketServer.py", line 321, in process_request self.finish_request(request, client_address) File "/usr/local/sage/sage-1/local/lib/python/SocketServer.py", line 334, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/local/sage/sage-1/local/lib/python/SocketServer.py", line 655, in init self.handle() File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Werkzeug-0.11.4-py2.7.egg/werkzeug/serving.py", line 216, in handle rv = BaseHTTPRequestHandler.handle(self) File "/usr/local/sage/sage-1/local/lib/python/BaseHTTPServer.py", line 340, in handle self.handle_one_request() File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Werkzeug-0.11.4-py2.7.egg/werkzeug/serving.py", line 251, in handle_one_request return self.run_wsgi() File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Werkzeug-0.11.4-py2.7.egg/werkzeug/serving.py", line 193, in run_wsgi execute(self.server.app) File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Werkzeug-0.11.4-py2.7.egg/werkzeug/serving.py", line 181, in execute application_iter = app(environ, start_response) File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1836, in call return self.wsgi_app(environ, start_response) File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1817, in wsgi_app response = self.full_dispatch_request() File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1475, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1461, in dispatch_request return self.view_functionsrule.endpoint File "/home/drew/github/lmfdb/lmfdb/siegel_modular_forms/siegel_modular_form.py", line 192, in ModularForm_GSp4_Q_top_level return prepare_sample_page( sam[0], request.args, bread) File "/home/drew/github/lmfdb/lmfdb/siegel_modular_forms/siegel_modular_form.py", line 325, in prepare_sample_page null_ideal = sam.field().ring_of_integers().ideal(0) File "sage/rings/number_field/number_field_base.pyx", line 54, in sage.rings.number_field.number_field_base.NumberField.ring_of_integers (build/cythonized/sage/rings/number_field/number_field_base.c:1888) return self.maximal_order(*args, kwds) File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/sage/rings/number_field/number_field.py", line 7317, in maximal_order return self._maximal_order(self._normalize_prime_list(v)) File "sage/misc/cachefunc.pyx", line 1909, in sage.misc.cachefunc.CachedMethodCaller.call (build/cythonized/sage/misc/cachefunc.c:9941) w = self._instance_call(*args, *kwds) File "sage/misc/cachefunc.pyx", line 1785, in sage.misc.cachefunc.CachedMethodCaller._instance_call (build/cythonized/sage/misc/cachefunc.c:9408) return self.f(self._instance, args, kwds) File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/sage/rings/number_field/number_field.py", line 7339, in _maximal_order B = [self(b, check=False) for b in self._pari_integral_basis(v=v)] File "/usr/local/sage/sage-1/local/lib/python2.7/site-packages/sage/rings/number_field/number_field.py", line 5178, in _pari_integral_basis B = f.nfbasis() File "sage/libs/pari/gen.pyx", line 7467, in sage.libs.pari.gen.gen.nfbasis (build/cythonized/sage/libs/pari/gen.c:136512) pari_catch_sig_on() File "src/cysignals/signals.pyx", line 96, in cysignals.signals.sig_raise_exception (build/src/cysignals/signals.c:1010) KeyboardInterrupt ``

AndrewVSutherland commented 8 years ago

I will either fix or hide these links.

AndrewVSutherland commented 8 years ago

The problem occurs in line 325 of siegel_modular_form.py when it is attempting to compute the ring of integers of a number field with large discriminant in sage. For the page http://127.0.0.1:37777/ModularForm/GSp/Q/Sp4Z_2.26_C it is the degree 8 field defined by

x^8 - 2*x^7 - 357101291310*x^6 + 52840539355719536*x^5 + 22640564812749741524120*x^4 - 4204304986232338333203658272*x^3 - 233023237121289760198239377830176*x^2 + 41633688176726774757701479405996976640*x + 1568887010644434880435299480241036148266368

I think the easiest fix is to simple remove those samples from the database where the ring of integers cannot be readily computed (even precomputing them seems problematic). The discriminant of the polynomial above does not appear to be easy to factor (so sage isn't even getting past this necessary first step), and polredbest does not improve this polynomial (the same comments apply to several others which are worse).

AndrewVSutherland commented 8 years ago

Fixed in #1577.