isogeny_computation

333 days ago by arabindr

def isogeny_class_computation(E,p): E = E.change_ring(QQbar).short_weierstrass_model() F = E.division_polynomial(p).change_ring(QQ) f = F.factor() i=0 p=5 t=f[0][0].degree() w=[R(1)] while t < (p+1)/2: for j in w: if (j*f[i][0]).degree() < (p+1)/2 and (j*f[i][0]).divides(F): w.append(j*f[i][0]) t = f[i+1][0].degree() i+=1 v=[E] for f in w: try: v.append(E.change_ring(QQ).isogeny(f).codomain()) except ValueError: pass v = [F.change_ring(QQ).global_minimal_model() for F in v] return v