# SageMath code for working with elliptic curve 2.0.3.1-9984.1-b5
# (Note that not all these functions may be available, and some may take a long time to execute.)


# Define the base number field: 
R.<x> = PolynomialRing(QQ);  K.<a> = NumberField(R([1, -1, 1]))

# Define the curve: 
E = EllipticCurve([K([0,0]),K([0,1]),K([0,0]),K([61,-2]),K([-90,225])])

# Test whether it is a global minimal model: 
E.is_global_minimal_model()

# Compute the conductor: 
E.conductor()

# Compute the norm of the conductor: 
E.conductor().norm()

# Compute the discriminant: 
E.discriminant()

# Compute the norm of the discriminant: 
E.discriminant().norm()

# Compute the j-invariant: 
E.j_invariant()

# Test for Complex Multiplication: 
E.has_cm(), E.cm_discriminant()

# Compute the Mordell-Weil rank: 
E.rank()

# Compute the generators (of infinite order): 
gens = E.gens(); gens

# Compute the heights of the generators (of infinite order): 
[P.height() for P in gens]

# Compute the regulator: 
E.regulator_of_points(gens)

# Compute the torsion subgroup: 
T = E.torsion_subgroup(); T.invariants()

# Compute the order of the torsion subgroup: 
T.order()

# Compute the generators of the torsion subgroup: 
T.gens()

# Compute the local reduction data at primes of bad reduction: 
E.local_data()