michaelmusty / belyi Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
In line 76 of BelyiMap (main function), we compute the number of passport representatives, which indicates how much precision we'll need since that grows with the degree. But this can eat up all memory.
We only need an estimate here, so I propose we place this with a mass computation instead, which should be much faster.
lambda := [
[ <2, 8>, <1, 7> ],
[ <8, 2>, <4, 1>, <2, 1>, <1, 1> ],
[ <8, 2>, <4, 1>, <2, 1>, <1, 1> ]
];
G := TransitiveGroup(23,5);
pass := PassportRepresentatives(G : partitions := lambda);
pass[1];
gives as output:
[*
[
[ <2, 8>, <1, 7> ],
[ <7, 3>, <1, 2> ],
[ <8, 2>, <4, 1>, <2, 1>, <1, 1> ]
So it's returning output that doesn't satisfy the vararg conditions.
Including a Euclidean map of large degree
Did some experiments including a large degree example and it is really tricky to get the matrix which computes the coefficients of the Belyi map using power series expansions to have good stability properties. You can fiddle with a lot of things (replace w <- c*w in the series, rescale x and y, etc.), and this can significantly change things like the condition number.
But I'm not sure we need any of this! The series are designed to behave when they are evaluated, and indeed when we work in precision 10^(-100) we'll get values of x and y that are pretty close to that amount of precision. (Even though the precision in the coefficients decays polynomially.)
In genus zero, no series are solved for: the Newton equations are set up using the ramification values in the usual way: we write A(x) + B(x) = C(x) with A,B,C factored, and we plug in the approximate roots.
I think we can do the same in the elliptic and hyperelliptic case. Because of the issue of the common zero, we may need just a tiny bit from the series, imposing a few additional linear equations, but that should be it. That should mean that we can get away with much less power series precision, which means the whole thing will run a lot lot faster.
We didn't get a clean breakup: there are functions in galoisorbits.m that call BelyiDB functions. They should be moved there.
Matt Radosevich's code is super fast to compute Euclidean Belyi maps. But unfortunately the method does not guarantee descent to a minimal field of definition, and actually I'm not sure it will always be possible!
But there are many cases where it should be possible, and for that we'd need an algorithm.
Examples where I did descent by hand:
Currently the code in this case gives a map defined over a quadratic extension of the minimal field.
Here are ones where I haven't yet descended:
Our code runs reasonably well when the base field doesn't have too large of a degree. We should think about a better approach when the degree is large. Here are some thoughts:
How do we handle this dependency in a reasonable way, without assuming that all of our users have CHIMPed up?
Right now, in genus zero we only use the equations implied by
A(x) - B(x) = C(x)
where phi(x) = A(x)/B(x) and phi(x)-1 = C(x)/B(x).
The resulting ideal is far from reduced (see SV, https://math.dartmouth.edu/~jvoight/articles/compute-belyi-090519.pdf, Example 2.11), and a way to improve things is to apply the Atkin-Swinnerton-Dyer trick.
We should be able to get away with a lot less precision as input into Newton this way.
AttachSpec("spec");
sigma := [Sym(4) | (1,2,3,4), (1,3,4,2), (1,3,4)];
Gamma := TriangleSubgroup(sigma);
SetVerbose("Shimura", true);
FundamentalDomain(Gamma : Precision := 70);
X, phi := BelyiMap(Gamma);
The above code fails, but works if you delete the FundamentalDomain line. Something is wrong when it computes the elliptic curve periods, and it's a precision issue (the imaginary parts are 10^-30, and should be zero). [And if you replace the last line with BelyiMap(Gamma : Precision := 30), it works again.]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.