// Magma code for working with elliptic curve 121.c1


// Define the curve: 
E := EllipticCurve([1, 1, 0, -3632, 82757]);

// Simplified equation: 
WeierstrassModel(E);

// Mordell-Weil group: 
MordellWeilGroup(E);

// Mordell-Weil generators: 
Generators(E);

// Torsion subgroup: 
TorsionSubgroup(E);

// Integral points: 
IntegralPoints(E);

// Conductor: 
Conductor(E);

// Discriminant: 
Discriminant(E);

// j-invariant: 
jInvariant(E);

// Potential complex multiplication: 
HasComplexMultiplication(E);

// Faltings height: 
FaltingsHeight(E);

// Stable Faltings height: 
StableFaltingsHeight(E);

// Mordell-Weil rank: 
Rank(E);

// Analytic rank: 
AnalyticRank(E);

// Regulator: 
Regulator(E);

// Real Period: 
(Discriminant(E) gt 0 select 2 else 1) * RealPeriod(E);

// Tamagawa numbers: 
TamagawaNumbers(E);

// Torsion order: 
Order(TorsionSubgroup(E));

// Order of Sha: 
MordellWeilShaInformation(E);

// Special L-value: 
Lr1 where r,Lr1 := AnalyticRank(E: Precision:=12);

// BSD formula: 
/* self-contained Magma code snippet for the BSD formula (checks rank, computes analytic sha) */
E := EllipticCurve([1, 1, 0, -3632, 82757]); r := Rank(E); ar,Lr1 := AnalyticRank(E: Precision := 12); assert r eq ar;
sha := MordellWeilShaInformation(E); omega := RealPeriod(E) * (Discriminant(E) gt 0 select 2 else 1);
reg := Regulator(E); tam := &*TamagawaNumbers(E); tor := #TorsionSubgroup(E);
assert r eq ar; print "analytic sha:", Lr1 * tor^2 / (omega * reg * tam);

// q-expansion of modular form: 
ModularForm(E);

// Modular degree: 
ModularDegree(E);

// Manin constant: 
ManinConstant(E);

// Local data: 
[LocalInformation(E,p) : p in BadPrimes(E)];

// Mod p Galois image: 
[GaloisRepresentation(E,p): p in PrimesUpTo(20)];