diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cm/cm_any.c | 5 | ||||
| -rw-r--r-- | src/gen/metadata.c | 10 | ||||
| -rw-r--r-- | src/io/output.c | 12 | ||||
| -rw-r--r-- | src/misc/types.h | 1 | ||||
| -rw-r--r-- | src/util/random.c | 3 |
5 files changed, 23 insertions, 8 deletions
diff --git a/src/cm/cm_any.c b/src/cm/cm_any.c index fef4cff..e1dab54 100644 --- a/src/cm/cm_any.c +++ b/src/cm/cm_any.c @@ -17,11 +17,16 @@ static void good_qdisc_minimal(cm_any_qdisc_t *qdisc, GEN order) { pari_sp ltop = avma; GEN d = stoi(2); + size_t j = 0; while (true) { + ++j; if (!issquarefree(d)) { d = addis(d, 1); continue; } + if (j % 100 == 0) { + debug_log("D: %Ps", d); + } GEN D = quaddisc(negi(d)); GEN K = Buchall(quadpoly(D), 0, DEFAULTPREC); GEN alphas = bnfisintnorm(K, order); diff --git a/src/gen/metadata.c b/src/gen/metadata.c index 382aa1c..99e7dfc 100644 --- a/src/gen/metadata.c +++ b/src/gen/metadata.c @@ -7,6 +7,7 @@ #include "gens.h" GENERATOR(metadata_gen) { + pari_sp ltop = avma; GEN j = field_elementi(ell_get_j(curve->curve)); GEN disc = field_elementi(ell_get_disc(curve->curve)); GEN embedding_degree; @@ -21,11 +22,17 @@ GENERATOR(metadata_gen) { return -7; } GEN frobenius = negi(subii(curve->order, addis(q, 1))); + GEN conductor; GEN cm_disc; if (typ(curve->field) == t_INT) { - cm_disc = core(subii(mulis(q, 4), sqri(frobenius))); + GEN full_disc = subii(mulis(q, 4), sqri(frobenius)); + cm_disc = core(full_disc); + conductor = sqrti(diviiexact(full_disc, cm_disc)); + gerepileall(ltop, 6, &j, &disc, &embedding_degree, &frobenius, &cm_disc, &conductor); } else if (typ(curve->field) == t_FFELT) { cm_disc = NULL; + conductor = NULL; + gerepileall(ltop, 3, &j, &disc, &frobenius); } else { return -7; } @@ -34,5 +41,6 @@ GENERATOR(metadata_gen) { curve->meta.embedding_degree = embedding_degree; curve->meta.frobenius_trace = frobenius; curve->meta.cm_discriminant = cm_disc; + curve->meta.conductor = conductor; return 1; } diff --git a/src/io/output.c b/src/io/output.c index 0913f04..5f9bb3e 100644 --- a/src/io/output.c +++ b/src/io/output.c @@ -121,19 +121,16 @@ static JSON_Value *output_jjson(curve_t *curve) { json_object_set_value(root_object, "subgroups", gens_value); } if (cfg->metadata) { - debug_log("here"); if (curve->meta.j_invariant != NULL) { char *j = pari_sprintf("%Pi", curve->meta.j_invariant); json_object_dotset_string(root_object, "meta.j", j); pari_free(j); } - debug_log("here"); if (curve->meta.discriminant != NULL) { char *disc = pari_sprintf("%Pi", curve->meta.discriminant); json_object_dotset_string(root_object, "meta.discriminant", disc); pari_free(disc); } - debug_log("here"); if (curve->meta.embedding_degree != NULL) { char *embedding_degree = pari_sprintf("%Pi", curve->meta.embedding_degree); @@ -141,13 +138,11 @@ static JSON_Value *output_jjson(curve_t *curve) { embedding_degree); pari_free(embedding_degree); } - debug_log("here"); if (curve->meta.frobenius_trace != NULL) { char *frobenius = pari_sprintf("%Pi", curve->meta.frobenius_trace); json_object_dotset_string(root_object, "meta.frobenius", frobenius); pari_free(frobenius); } - debug_log("here"); if (curve->meta.cm_discriminant != NULL) { char *cm_discriminant = pari_sprintf("%Pi", curve->meta.cm_discriminant); @@ -155,7 +150,12 @@ static JSON_Value *output_jjson(curve_t *curve) { cm_discriminant); pari_free(cm_discriminant); } - debug_log("here"); + if (curve->meta.conductor != NULL) { + char *conductor = pari_sprintf("%Pi", curve->meta.conductor); + json_object_dotset_string(root_object, "meta.conductor", + conductor); + pari_free(conductor); + } } avma = ltop; diff --git a/src/misc/types.h b/src/misc/types.h index 4f39a39..827e8aa 100644 --- a/src/misc/types.h +++ b/src/misc/types.h @@ -87,6 +87,7 @@ typedef struct { GEN cm_discriminant; GEN frobenius_trace; GEN embedding_degree; + GEN conductor; } metadata_t; /** diff --git a/src/util/random.c b/src/util/random.c index eaeceaf..b88bb50 100644 --- a/src/util/random.c +++ b/src/util/random.c @@ -6,6 +6,7 @@ #include "random.h" #include <time.h> +#include <stdint.h> void random_reseed(void) { pari_ulong seed = 0; @@ -14,7 +15,7 @@ void random_reseed(void) { if (rand) { size_t read = 0; while (read < sizeof(pari_ulong)) { - read += fread(&seed + read, 1, sizeof(pari_ulong) - read, rand); + read += fread(((uint8_t*) &seed) + read, 1, sizeof(pari_ulong) - read, rand); } fclose(rand); |
