There are some weird shenanigans happening when one uses CurveExtra.
In particular, I'm convinced certain things are being passed by references instead of copied.
I hopefully will debug this in the feature, but for the time being here are my findings:
1- Increasing precision doesn't seem to work after calling Heuristic* as it makes it internally calls CurveExtra
# magma -b
> ICs := [10/3, 1/9, 4/27, 1/236196];
> C := HyperellipticCurveFromIgusaClebsch(ICs);
> HeuristicEndomorphismAlgebra(C : Geometric:=true);
Runtime error: Error in determining tangent representation: 2.8575E-100
> C2 := CurveExtra(C : prec:=2000);
> Parent(BaseRing(C2)`iota);
Complex field of precision 110
> HeuristicEndomorphismAlgebra(C2 : Geometric:=true);
Runtime error: Error in determining tangent representation: 1.5088E-99
2- increasing the precision on a sibling works before calling Heuristic*(C) despite the call not being on the sibling, I wouldn't expect this to work:
There are some weird shenanigans happening when one uses CurveExtra. In particular, I'm convinced certain things are being passed by references instead of copied. I hopefully will debug this in the feature, but for the time being here are my findings: 1- Increasing precision doesn't seem to work after calling
Heuristic*
as it makes it internally callsCurveExtra
2- increasing the precision on a sibling works before calling
Heuristic*(C)
despite the call not being on the sibling, I wouldn't expect this to work:but instead having to do
CC: @kimballmartin