Dembele's algorithm attempted on a different curve

307 days ago by Jonathan_Bober

We are going to try to use Dembele's method for another elliptic curve. (Something seems wrong with this code.)

var('x') K.<a> = NumberField(x^2 - x - 1) R = RealField(53) C = ComplexField(53) phi2, phi = K.embeddings(R) # I think it's important that we choose the correct embedding here. # We want the embedding such that phi(a) > 0 a1 = phi(a) a2 = phi2(a) class QuadraticCharacter: def __init__(self, P): P = ideal(P) self.k = P.residue_field() self.K = self.k.lift(self.k(1)).parent().number_field() self.character_table = {} self.character_table[self.k(0)] = 0 self.conductor = P g = self.k.multiplicative_generator() a = g current_sign = -1 for n in range(self.k.order() - 1): self.character_table[a] = current_sign current_sign = -current_sign a = a * g # a should now be gen. We use this to make sure we haven't made a big mistake: if a != g: print a, g raise ValueError("something went wrong.") def __call__(self, a): a = self.k(a) return self.character_table[a] def gauss_sum(self): CC = ComplexField(200) RR = RealField(200) I = CC.0 characteristic = self.k.characteristic() x = CC(0) d = K(K.disc()).sqrt() m = self.conductor.gens_reduced()[0] for a, value in self.character_table.iteritems(): x = x + value * CC(2 * pi * I * (self.k.lift(a)/(d * m)).trace()).exp() return x def make_tot_pos(n): if phi(n) > 0: if phi2(n) < 0: return n * a else: return n else: if phi2(n) < 0: return n * a * (1 - a) else: return n * (1 - a) 
       
ap_dict = load("/home/bober/math/reu/aps_for_179.sobj") 
       
level = K.ideal(5 - 12 * a) level_conjugate = K.ideal(12 * a - 7) level_gen = make_tot_pos(level.gens_reduced()[0]) ap_dict[level] = -1 # guess ap_dict[level_conjugate] = 4 # guess ideals = K.ideals_of_bdd_norm(971) an_list = {} for n in range(1, 971): for I in ideals[n]: an = 1 F = I.factor() for (p, e) in F: p = K.ideal(p.gens_reduced()) ap = ap_dict[p] if p == level: an *= ap^e else: if e == 1: an *= ap elif e == 2: an *= (ap^2 - norm(p)) elif e == 3: an *= (ap^3 - 2 * norm(p) * ap) elif e == 4: an *= (ap^4 - 4 * ap^2 * norm(p) + norm(p)^2) elif e == 5: an *= ap^5 - 4 * ap^3 * norm(p) + 3 * ap * norm(p)^2 else: raise ValueError("not ready to handle thing that are divisible by higher than cubic powers") an_list[I] = an 
       
E = EllipticCurve(K, [0, -a, a, 0, 0]) Ec = EllipticCurve(K, [0, -(1-a), 1-a, 0, 0]) #E = EllipticCurve(K, [1, -(1-a + 1), 1-a, 0, 0]) #Ec = EllipticCurve(K, [1, -(a + 1), a, 0, 0]) level = E.conductor() level_gen = make_tot_pos(level.gens_reduced()[0]) ap_dict = {} ideals = K.ideals_of_bdd_norm(8001) for n in range(1, 8001): for p in ideals[n]: p = K.ideal(p.gens_reduced()) if p == E.conductor(): ap_dict[p] = -1 # cheating. elif is_prime(p): ap_dict[p] = E.change_ring(p.residue_field()).trace_of_frobenius() an_list = {} for n in range(1, 8001): for I in ideals[n]: an = 1 F = I.factor() for (p, e) in F: p = K.ideal(p.gens_reduced()) ap = ap_dict[p] if p == level: an *= ap^e else: if e == 1: an *= ap elif e == 2: an *= (ap^2 - norm(p)) elif e == 3: an *= (ap^3 - 2 * norm(p) * ap) elif e == 4: an *= (ap^4 - 4 * ap^2 * norm(p) + norm(p)^2) elif e == 5: an *= ap^5 - 4 * ap^3 * norm(p) + 3 * ap * norm(p)^2 elif e == 6: an *= ap^6 - 5*ap^4*norm(p) + 6*ap^2*norm(p)^2 - norm(p)^3 elif e == 7: an *= ap^7 - 6*ap^5*norm(p) + 10*ap^3*norm(p)^2 - 4*ap*norm(p)^3 else: raise ValueError("not ready to handle thing that are divisible by higher than cubic powers") N = make_tot_pos(I.gens_reduced()[0]) an_list[N] = (phi(N), phi2(N), an) #an_list[I] = an # we store the embeddings along with an because we are going to use them at the same time 
       
@parallel(ncpus=8) def mixed_period(f, chi, normbound = 10000000, verbose = 0): # right now f is the form with the above ap list if verbose: print "mixed_period() called with chi.conductor.norm() ==", chi.conductor.norm() N = phi(level_gen) # a totally positive generator for the the level of f Nbar = phi2(level_gen) c = make_tot_pos(chi.conductor.gens_reduced()[0]) nu = phi(c) nubar = phi2(c) D = R(5) S = 0 x,y,z,w = SR.var('x,y,z,w') A = fast_callable( 1 - exp(-2 * pi * x * y/(nu * sqrt(D * N))), vars = [x,y], domain = R) B = fast_callable( exp( 2 * pi / sqrt(D) * (x * y / (nubar * sqrt(Nbar)) - z * w/(nu * sqrt(N))) ), vars = [x,y,z,w], domain = R) for (n, (n1, n2, an)) in an_list.iteritems(): if norm(n) > normbound: continue #n = make_tot_pos(n.gens_reduced()[0]) S2 = 0 #A = fast_callable( 1 - exp(-2 * pi * phi(n) * x/(nu * sqrt(D * N))), vars = [x], domain = R) #B = fast_callable( exp( 2 * pi / sqrt(D) * (x * y / (nubar * sqrt(Nbar)) - z * w/(nu * sqrt(N))) ), vars = [x,y,z,w], domain = R) for k in range(-10, 10): # not sure what kind of range to use on k right now #A = R(-2 * pi * phi(n) * phi(a)^(2 * k + 1) / (nu * sqrt(D * N))) #B = R(2 * pi / sqrt(D) * (phi2(n) * phi(1 - a)^(2 * k + 1) / (nubar * sqrt(Nbar)) - phi(n) * phi(a)^(2 * k)/(nu * sqrt(N)))) S2 = S2 + A(n1, a1^(2 * k + 1))*B(n2, a2^(2 * k + 1), n1, a1^(2 * k)) S = S + an * chi(n)/norm(n) * S2 S = -S * 5/R(2 * pi^2) return C(-4 * pi^2 * sqrt(5) * chi.gauss_sum()) * S 
       
def find_good_characters(sign): mm_list = [] mp_list = [] pm_list = [] pp_list = [] for p in prime_range(600): print "looking for a character mod", p if p == 5: continue P_list = K.primes_above(p) if norm(P_list[0]) > 700: continue for P in P_list: chi = QuadraticCharacter(P) if chi(-level_gen) != sign: continue if chi(a) == 1 and chi(1-a) == 1: pp_list.append(chi) elif chi(a) == -1 and chi(1-a) == 1: mp_list.append(chi) elif chi(a) == 1 and chi(1-a) == -1: pm_list.append(chi) else: mm_list.append(chi) return mm_list, mp_list, pm_list, pp_list 
       
chi_mm_list, chi_mp_list, chi_pm_list, chi_pp_list = find_good_characters(1) 
       
looking for a character mod 2
looking for a character mod 3
looking for a character mod 5
looking for a character mod 7
looking for a character mod 11
looking for a character mod 13
looking for a character mod 17
looking for a character mod 19
looking for a character mod 23
looking for a character mod 29
looking for a character mod 31
looking for a character mod 37
looking for a character mod 41
looking for a character mod 43
looking for a character mod 47
looking for a character mod 53
looking for a character mod 59
looking for a character mod 61
looking for a character mod 67
looking for a character mod 71
looking for a character mod 73
looking for a character mod 79
looking for a character mod 83
looking for a character mod 89
looking for a character mod 97
looking for a character mod 101
looking for a character mod 103
looking for a character mod 107
looking for a character mod 109
looking for a character mod 113
looking for a character mod 127
looking for a character mod 131
looking for a character mod 137
looking for a character mod 139
looking for a character mod 149
looking for a character mod 151
looking for a character mod 157
looking for a character mod 163
looking for a character mod 167
looking for a character mod 173
looking for a character mod 179
looking for a character mod 181
looking for a character mod 191
looking for a character mod 193
looking for a character mod 197
looking for a character mod 199
looking for a character mod 211
looking for a character mod 223
looking for a character mod 227
looking for a character mod 229
looking for a character mod 233
looking for a character mod 239
looking for a character mod 241
looking for a character mod 251
looking for a character mod 257
looking for a character mod 263
looking for a character mod 269
looking for a character mod 271
looking for a character mod 277
looking for a character mod 281
looking for a character mod 283
looking for a character mod 293
looking for a character mod 307
looking for a character mod 311
looking for a character mod 313
looking for a character mod 317
looking for a character mod 331
looking for a character mod 337
looking for a character mod 347
looking for a character mod 349
looking for a character mod 353
looking for a character mod 359
looking for a character mod 367
looking for a character mod 373
looking for a character mod 379
looking for a character mod 383
looking for a character mod 389
looking for a character mod 397
looking for a character mod 401
looking for a character mod 409
looking for a character mod 419
looking for a character mod 421
looking for a character mod 431
looking for a character mod 433
looking for a character mod 439
looking for a character mod 443
looking for a character mod 449
looking for a character mod 457
looking for a character mod 461
looking for a character mod 463
looking for a character mod 467
looking for a character mod 479
looking for a character mod 487
looking for a character mod 491
looking for a character mod 499
looking for a character mod 503
looking for a character mod 509
looking for a character mod 521
looking for a character mod 523
looking for a character mod 541
looking for a character mod 547
looking for a character mod 557
looking for a character mod 563
looking for a character mod 569
looking for a character mod 571
looking for a character mod 577
looking for a character mod 587
looking for a character mod 593
looking for a character mod 599
looking for a character mod 2
looking for a character mod 3
looking for a character mod 5
looking for a character mod 7
looking for a character mod 11
looking for a character mod 13
looking for a character mod 17
looking for a character mod 19
looking for a character mod 23
looking for a character mod 29
looking for a character mod 31
looking for a character mod 37
looking for a character mod 41
looking for a character mod 43
looking for a character mod 47
looking for a character mod 53
looking for a character mod 59
looking for a character mod 61
looking for a character mod 67
looking for a character mod 71
looking for a character mod 73
looking for a character mod 79
looking for a character mod 83
looking for a character mod 89
looking for a character mod 97
looking for a character mod 101
looking for a character mod 103
looking for a character mod 107
looking for a character mod 109
looking for a character mod 113
looking for a character mod 127
looking for a character mod 131
looking for a character mod 137
looking for a character mod 139
looking for a character mod 149
looking for a character mod 151
looking for a character mod 157
looking for a character mod 163
looking for a character mod 167
looking for a character mod 173
looking for a character mod 179
looking for a character mod 181
looking for a character mod 191
looking for a character mod 193
looking for a character mod 197
looking for a character mod 199
looking for a character mod 211
looking for a character mod 223
looking for a character mod 227
looking for a character mod 229
looking for a character mod 233
looking for a character mod 239
looking for a character mod 241
looking for a character mod 251
looking for a character mod 257
looking for a character mod 263
looking for a character mod 269
looking for a character mod 271
looking for a character mod 277
looking for a character mod 281
looking for a character mod 283
looking for a character mod 293
looking for a character mod 307
looking for a character mod 311
looking for a character mod 313
looking for a character mod 317
looking for a character mod 331
looking for a character mod 337
looking for a character mod 347
looking for a character mod 349
looking for a character mod 353
looking for a character mod 359
looking for a character mod 367
looking for a character mod 373
looking for a character mod 379
looking for a character mod 383
looking for a character mod 389
looking for a character mod 397
looking for a character mod 401
looking for a character mod 409
looking for a character mod 419
looking for a character mod 421
looking for a character mod 431
looking for a character mod 433
looking for a character mod 439
looking for a character mod 443
looking for a character mod 449
looking for a character mod 457
looking for a character mod 461
looking for a character mod 463
looking for a character mod 467
looking for a character mod 479
looking for a character mod 487
looking for a character mod 491
looking for a character mod 499
looking for a character mod 503
looking for a character mod 509
looking for a character mod 521
looking for a character mod 523
looking for a character mod 541
looking for a character mod 547
looking for a character mod 557
looking for a character mod 563
looking for a character mod 569
looking for a character mod 571
looking for a character mod 577
looking for a character mod 587
looking for a character mod 593
looking for a character mod 599
print len(chi_mm_list), len(chi_mp_list), len(chi_pm_list), len(chi_pp_list) 
       
13 15 13 9
13 15 13 9
# let's evaluate the mixed period for every one of these chi: mm_list = [_2 for (_1, _2) in sorted(list(mixed_period( [ (_, chi, 6000, 1) for (_, chi) in enumerate(chi_mm_list)] )))] mp_list = [_2 for (_1, _2) in sorted(list(mixed_period( [ (_, chi, 6000, 1) for (_, chi) in enumerate(chi_mp_list)] )))] pm_list = [_2 for (_1, _2) in sorted(list(mixed_period( [ (_, chi, 6000, 1) for (_, chi) in enumerate(chi_pm_list)] )))] pp_list = [_2 for (_1, _2) in sorted(list(mixed_period( [ (_, chi, 6000, 1) for (_, chi) in enumerate(chi_pp_list)] )))] #mp_list = sorted(list(mixed_period( [ (_, chi, 6000, 1) for (_, chi) in enumerate(chi_mp_list)] ))) #pm_list = sorted(list(mixed_period( [ (_, chi, 6000, 1) for (_, chi) in enumerate(chi_pm_list)] ))) #pp_list = sorted(list(mixed_period( [ (_, chi, 6000, 1) for (_, chi) in enumerate(chi_pp_list)] ))) 
       
mixed_period() called with chi.conductor.norm() == 109
mixed_period() called with chi.conductor.norm() == 149
mixed_period() called with chi.conductor.norm() == 269
mixed_period() called with chi.conductor.norm() == 529
mixed_period() called with chi.conductor.norm() == 241
mixed_period() called with chi.conductor.norm() == 281
mixed_period() called with chi.conductor.norm() == 241
mixed_period() called with chi.conductor.norm() == 269
mixed_period() called with chi.conductor.norm() == 409
mixed_period() called with chi.conductor.norm() == 421
mixed_period() called with chi.conductor.norm() == 569
mixed_period() called with chi.conductor.norm() == 409
mixed_period() called with chi.conductor.norm() == 569
mixed_period() called with chi.conductor.norm() == 59
mixed_period() called with chi.conductor.norm() == 131
mixed_period() called with chi.conductor.norm() == 211
mixed_period() called with chi.conductor.norm() == 179
mixed_period() called with chi.conductor.norm() == 19
mixed_period() called with chi.conductor.norm() == 71
mixed_period() called with chi.conductor.norm() == 191
mixed_period() called with chi.conductor.norm() == 139
mixed_period() called with chi.conductor.norm() == 271
mixed_period() called with chi.conductor.norm() == 239
mixed_period() called with chi.conductor.norm() == 599
mixed_period() called with chi.conductor.norm() == 359
mixed_period() called with chi.conductor.norm() == 439
mixed_period() called with chi.conductor.norm() == 571
mixed_period() called with chi.conductor.norm() == 479
mixed_period() called with chi.conductor.norm() == 11
mixed_period() called with chi.conductor.norm() == 59
mixed_period() called with chi.conductor.norm() == 139
mixed_period() called with chi.conductor.norm() == 151
mixed_period() called with chi.conductor.norm() == 199
mixed_period() called with chi.conductor.norm() == 271
mixed_period() called with chi.conductor.norm() == 131
mixed_period() called with chi.conductor.norm() == 79
mixed_period() called with chi.conductor.norm() == 499
mixed_period() called with chi.conductor.norm() == 311
mixed_period() called with chi.conductor.norm() == 331
mixed_period() called with chi.conductor.norm() == 599
mixed_period() called with chi.conductor.norm() == 359
mixed_period() called with chi.conductor.norm() == 29
mixed_period() called with chi.conductor.norm() == 101
mixed_period() called with chi.conductor.norm() == 181
mixed_period() called with chi.conductor.norm() == 89
mixed_period() called with chi.conductor.norm() == 229
mixed_period() called with chi.conductor.norm() == 541
mixed_period() called with chi.conductor.norm() == 521
mixed_period() called with chi.conductor.norm() == 509
mixed_period() called with chi.conductor.norm() == 541
mixed_period() called with chi.conductor.norm() == 109
mixed_period() called with chi.conductor.norm() == 149
mixed_period() called with chi.conductor.norm() == 269
mixed_period() called with chi.conductor.norm() == 529
mixed_period() called with chi.conductor.norm() == 241
mixed_period() called with chi.conductor.norm() == 281
mixed_period() called with chi.conductor.norm() == 241
mixed_period() called with chi.conductor.norm() == 269
mixed_period() called with chi.conductor.norm() == 409
mixed_period() called with chi.conductor.norm() == 421
mixed_period() called with chi.conductor.norm() == 569
mixed_period() called with chi.conductor.norm() == 409
mixed_period() called with chi.conductor.norm() == 569
mixed_period() called with chi.conductor.norm() == 59
mixed_period() called with chi.conductor.norm() == 131
mixed_period() called with chi.conductor.norm() == 211
mixed_period() called with chi.conductor.norm() == 179
mixed_period() called with chi.conductor.norm() == 19
mixed_period() called with chi.conductor.norm() == 71
mixed_period() called with chi.conductor.norm() == 191
mixed_period() called with chi.conductor.norm() == 139
mixed_period() called with chi.conductor.norm() == 271
mixed_period() called with chi.conductor.norm() == 239
mixed_period() called with chi.conductor.norm() == 599
mixed_period() called with chi.conductor.norm() == 359
mixed_period() called with chi.conductor.norm() == 439
mixed_period() called with chi.conductor.norm() == 571
mixed_period() called with chi.conductor.norm() == 479
mixed_period() called with chi.conductor.norm() == 11
mixed_period() called with chi.conductor.norm() == 59
mixed_period() called with chi.conductor.norm() == 139
mixed_period() called with chi.conductor.norm() == 151
mixed_period() called with chi.conductor.norm() == 199
mixed_period() called with chi.conductor.norm() == 271
mixed_period() called with chi.conductor.norm() == 131
mixed_period() called with chi.conductor.norm() == 79
mixed_period() called with chi.conductor.norm() == 499
mixed_period() called with chi.conductor.norm() == 311
mixed_period() called with chi.conductor.norm() == 331
mixed_period() called with chi.conductor.norm() == 599
mixed_period() called with chi.conductor.norm() == 359
mixed_period() called with chi.conductor.norm() == 29
mixed_period() called with chi.conductor.norm() == 101
mixed_period() called with chi.conductor.norm() == 181
mixed_period() called with chi.conductor.norm() == 89
mixed_period() called with chi.conductor.norm() == 229
mixed_period() called with chi.conductor.norm() == 541
mixed_period() called with chi.conductor.norm() == 521
mixed_period() called with chi.conductor.norm() == 509
mixed_period() called with chi.conductor.norm() == 541
print [real(mm_list[0]/x) for x in mm_list] print print [real(pm_list[0]/x) for x in pm_list] print print [real(mp_list[0]/x) for x in mp_list] print print [real(pp_list[0]/x) for x in pp_list] 
       
[1.00000000000000, 0.168759656449982, -0.0268421191612168,
-0.762663084782006, -0.761070106688565, -0.0269399753829044,
-0.173938094991181, -0.788359939327743, 0.900364561261731,
0.885749694170041, 0.893450738428573, 1.06478917147191,
0.0188158626691447]

[1.00000000000000, -225.492477025570, -1.00878511098277,
-1.02472682764855, 0.111438941517902, 0.251966248480139,
1.05012143441313, -0.112094529232635, 1.10031803809814,
-0.0629143443467294, 1.11538715474692, -0.113103173037830,
-0.262108935285232]

[1.00000000000000, -1.00281333472709, 1.00447918085943,
0.250974428493264, 0.251074658031053, 37.8664868712174,
1.03077542294718, -0.111543913247717, -24.6795094398765,
1.05475340926564, 1.07328205753254, -1.10403940696757,
-10.7275789933865, 0.112815356169137, -8.65440806110459]

[1.00000000000000, 1.00366057566926, 1.00476291733527, 1.01387516700751,
1.02082371349891, 0.111888016677332, 1.05874596122769, 1.05491684456041,
1.06411655726756]
[1.00000000000000, 0.168759656449982, -0.0268421191612168, -0.762663084782006, -0.761070106688565, -0.0269399753829044, -0.173938094991181, -0.788359939327743, 0.900364561261731, 0.885749694170041, 0.893450738428573, 1.06478917147191, 0.0188158626691447]

[1.00000000000000, -225.492477025570, -1.00878511098277, -1.02472682764855, 0.111438941517902, 0.251966248480139, 1.05012143441313, -0.112094529232635, 1.10031803809814, -0.0629143443467294, 1.11538715474692, -0.113103173037830, -0.262108935285232]

[1.00000000000000, -1.00281333472709, 1.00447918085943, 0.250974428493264, 0.251074658031053, 37.8664868712174, 1.03077542294718, -0.111543913247717, -24.6795094398765, 1.05475340926564, 1.07328205753254, -1.10403940696757, -10.7275789933865, 0.112815356169137, -8.65440806110459]

[1.00000000000000, 1.00366057566926, 1.00476291733527, 1.01387516700751, 1.02082371349891, 0.111888016677332, 1.05874596122769, 1.05491684456041, 1.06411655726756]

The numbers above should all be rational numbers (hopefully small rational numbers). If an element of the list is of the form A/B, then that means that A should divide C_\chi^{ss'}, where C_\chi^{ss'}\Omega^{ss'}_{f, \chi} = \Omega^{ss'}.

So this seems to indicate the first entries (in order) are divisible by 13, 451, 265, and nothing? Of course, the values later in the lists are less accurate, but the 225.5 should mean something. Maybe something is wrong with the code.

print continued_fraction(.16876, 50).convergents() print continued_fraction(.027, 50).convergents() print continued_fraction(.76267, 50).convergents() print continued_fraction(37.87, 50).convergents() print continued_fraction(24.68, 50).convergents() print continued_fraction(10.72, 50).convergents() 
       
[0, 1/5, 1/6, 13/77, 27/160, 94/557, 215/1274, 524/3105, 739/4379]
[0, 1/37]
[0, 1, 3/4, 13/17, 16/21, 45/59, 286/375, 331/434, 617/809, 25011/32794,
25628/33603]
[37, 38, 265/7, 303/8, 871/23]
[24, 25, 74/3]
[10, 11, 32/3, 43/4, 75/7]
[0, 1/5, 1/6, 13/77, 27/160, 94/557, 215/1274, 524/3105, 739/4379]
[0, 1/37]
[0, 1, 3/4, 13/17, 16/21, 45/59, 286/375, 331/434, 617/809, 25011/32794, 25628/33603]
[37, 38, 265/7, 303/8, 871/23]
[24, 25, 74/3]
[10, 11, 32/3, 43/4, 75/7]
mm = mm_list[0]/13 pm = pm_list[0]/451 mp = mp_list[0]/265 pp = pp_list[0] print mp * pm / (mm * pp) 
       
0.000162495315574393 - 8.79922628692053e-64*I
0.000162495315574393 - 8.79922628692053e-64*I

That definitely doesn't work, because this number should be 1.

print continued_fraction(0.000162495315574393, 50).convergents() 
       
[0, 1/6154, 42/258469, 85/523092, 382/2350837, 849/5224766,
5476/33699433, 11801/72623632, 111685/687312121]
[0, 1/6154, 42/258469, 85/523092, 382/2350837, 849/5224766, 5476/33699433, 11801/72623632, 111685/687312121]

Well, maybe there was a 6154 = 2 \cdot 17 \cdot 181 that we missed?

mm = mm_list[0]/(2 * 13 * 181) pp = pp_list[0]/(17) print mp * pm / (mm * pp) 
       
0.999996172044815 - 5.41504385697089e-60*I
0.999996172044815 - 5.41504385697089e-60*I
tau1p = pp/mp tau1m = 1/2 * (1 + pp/mp) tau2p = -pp/pm tau2m = 1/2 * (1 - pp/pm) print tau1p, tau1m, tau2p, tau2m 
       
-8.72772850723797e-59 + 30.2075718945002*I 0.500000000000000 +
15.1037859472501*I -2.37506633430913e-58 + 78.0717148373463*I
0.500000000000000 + 39.0358574186731*I
-8.72772850723797e-59 + 30.2075718945002*I 0.500000000000000 + 15.1037859472501*I -2.37506633430913e-58 + 78.0717148373463*I 0.500000000000000 + 39.0358574186731*I
# now compute the j-invariants j1p = j_invariant_qexp(10)( CC(2 * pi * i * tau1p).exp() ).real(); print j1p j1m = j_invariant_qexp(10)( CC(2 * pi * i * tau1m).exp() ).real(); print j1m j2p = j_invariant_qexp(10)( CC(2 * pi * i * tau2p).exp() ).real(); print j2p j2m = j_invariant_qexp(10)( CC(2 * pi * i * tau2m).exp() ).real(); print j2m 
       
2.68530487119283e82
-1.63868998629784e41
1.09245424335380e213
-3.30522955837231e106
2.68530487119283e82
-1.63868998629784e41
1.09245424335380e213
-3.30522955837231e106

These possible j-invariant values don't look good at all. Below is what they should be. So far, I haven't been able to get them to work out correctly.

print phi(E.j_invariant()), phi2(E.j_invariant()) print phi(Ec.j_invariant()), phi2(Ec.j_invariant()) 
       
-9648.12415537906 -42.4124299867931
-42.4124299867926 -9648.12415537906
-9648.12415537906 -42.4124299867931
-42.4124299867926 -9648.12415537906
D_possibilities = [_1 * _2 * _3 for (_1, _2, _3) in cartesian_product_iterator([[1, a, a^2, a^3], [1, (1-a), (1-a)^2, (1-a)^3], [level_gen, level_gen^2, level_gen^3]])] 
       
 
       
Q.<y> = K['y'] def try_to_find_curve(mm, mp, pm, pp): for D in D_possibilities: #print "Trying D =", D, if phi(D) < 0: tau1 = -pp/mp else: tau1 = 1/2 * (1 - pp/mp) if phi2(D) < 0: tau2 = -pp/pm else: tau2 = 1/2 * (1 - pp/pm) if(tau1.imag() < 0): tau1 = tau1.conjugate() if(tau2.imag() < 0): tau2 = tau2.conjugate() j1 = j_invariant_qexp(10)( CC(2 * pi * i * tau1).exp() ).real(); #print "candidate j1:", j1, j2 = j_invariant_qexp(10)( CC(2 * pi * i * tau2).exp() ).real(); #print "candidate j2:", j2 c4a = (j1 * phi2(D)).nth_root(3) c4b = (j2 * phi(D)).nth_root(3) #print c4a, c4b # check if any nearby polynomials have roots: r_base = -ZZ(round(c4a + c4b)) s_base = ZZ(round(c4a * c4b)) c4_possibilities = [] for r in range(-3, 4): for s in range(-3, 4): c4_possibilities.extend( (y^2 + (r_base + r) * y + (s_base + s)).roots()) for c4, _ in c4_possibilities: #try: # _ = ZZ(c4) #except TypeError: Z = c4^3 - 1728 * D if Z.is_square(): c6 = sqrt(Z) E = EllipticCurve_from_c4c6(c4, c6) print print "Found a curve!!!!", c4, c6, E.conductor() print else: #print "that c4 is no good" pass