"On Landau–Siegel zeros and heights of singular moduli" arXiv:1911.07215
-
generators/listgen.py: Generator of lists (negFDs.txt and hjtds.txt simultaneously, described below).
-
generators/figure_1.py: Generator of the image (described below)
-
params.txt: Tells generators the upper limit and precision for values generated for lists (default: negative fundamental discriminants up to -10^6, precision up to 10^{-16})
-
lpl1chiD/*: Additional scripts to calculate and plot L'(1, chi_D)/L(1, chi_D) (cf. lpl1chiD/README.md)
- imgs/figure_1eN.png: Graph of ht(j(tau_D))/3log(|D|) for D negative fundamental discriminants with |D| <= 10^N, where:
- ht = absolute logarithmic Weil height,
- j = Klein's classical j-invariant function,
- tau_D = sqrt(D)/2 if D == 0 (mod 4), (-1+sqrt(D))/2 if D == 1 (mod 4),
-
lists/negFDs_1eN.txt: Negative fundamental discriminants for D > -10^N
-
lists/hjtds_1eN.txt: List of the values of ht(j(tau_D))/3log(|D|) for D > -10^N
- Run gen.sh (can be halted and resumed at any point)
- Run generators/listgen.py (can be halted and resumed at any point)
- Run generators/figure_1.py
In both cases, lists are stored in ~/lists and images are stored in ~/imgs.
All the Python scripts were written for Python 2.7. Apart from standard Python libraries, mpmath and Matplotlib are necessary to run the scripts.
As a first version, the algorithms were not exactly written with efficiency in mind. For example, a laptop with the specs
- Processor: Intel(R) Core(TM) i3-5005U CPU @ 2.00GHz,
- Memory: 4GiB, clock 1600MHz (0.6ns),
- HDD: WDC WD5000LPCX-6 500GB,
running listgen.py until 10^6 takes approximately 30 hours, whilst running it until 10^7 takes a good portion of an entire month.