aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cm/cm_any.c5
-rw-r--r--src/gen/metadata.c10
-rw-r--r--src/io/output.c12
-rw-r--r--src/misc/types.h1
-rw-r--r--src/util/random.c3
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);