add simple CLI interface
This commit is contained in:
parent
0763056ccb
commit
729d1a10b7
@ -7,6 +7,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define LOOP(i,n) for(int i = 0; i < (n); i++)
|
#define LOOP(i,n) for(int i = 0; i < (n); i++)
|
||||||
#define SWAP(t,x,y) do { t _tmp = (x); (x) = (y); (y) = _tmp; } while (0);
|
#define SWAP(t,x,y) do { t _tmp = (x); (x) = (y); (y) = _tmp; } while (0);
|
||||||
@ -81,15 +82,51 @@ static double gaussian_sqrt5_imag(NUMBER x)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum mode {
|
||||||
|
MODE_HELP,
|
||||||
|
MODE_TRACES,
|
||||||
|
MODE_SUMMARY,
|
||||||
|
MODE_TRACE_IDS
|
||||||
|
};
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char buf[100];
|
char buf[100];
|
||||||
int n = atoi(argv[1]);
|
int mode;
|
||||||
|
|
||||||
|
if(argc < 2 || strcmp(argv[1], "help") == 0)
|
||||||
|
mode = MODE_HELP;
|
||||||
|
else if(strcmp(argv[1], "traces") == 0)
|
||||||
|
mode = MODE_TRACES;
|
||||||
|
else if(strcmp(argv[1], "summary") == 0)
|
||||||
|
mode = MODE_SUMMARY;
|
||||||
|
else if(strcmp(argv[1], "trace_ids") == 0)
|
||||||
|
mode = MODE_TRACE_IDS;
|
||||||
|
else
|
||||||
|
mode = MODE_HELP;
|
||||||
|
|
||||||
|
if(mode == MODE_HELP) {
|
||||||
|
fprintf(stderr, "Usage: %s <help|traces|summary|trace_ids> [arguments]\n", argv[0]);
|
||||||
|
fprintf(stderr, "%s help display this page\n", argv[0]);
|
||||||
|
fprintf(stderr, "%s traces <n> <qreal> <qimag> enumerate group and output unique trace/trace inverse pairs\n", argv[0]);
|
||||||
|
fprintf(stderr, "%s summary <n> <qreal> <qimag> only output max slope etc.\n", argv[0]);
|
||||||
|
fprintf(stderr, "%s trace_ids <n> <qreal> <qimag> list of ids of unique traces\n", argv[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(argc < 5) {
|
||||||
|
fprintf(stderr, "Not enough arguments!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int n = atoi(argv[2]);
|
||||||
|
|
||||||
mpq_t qreal, qimag;
|
mpq_t qreal, qimag;
|
||||||
mpq_inits(qreal, qimag, NULL);
|
mpq_inits(qreal, qimag, NULL);
|
||||||
mpq_set_si(qreal, 50, 10);
|
mpq_set_str(qreal, argv[3], 10);
|
||||||
mpq_set_si(qimag, 1, 10);
|
mpq_set_str(qimag, argv[4], 10);
|
||||||
|
// mpq_set_si(qreal, 50, 10);
|
||||||
|
// mpq_set_si(qimag, 1, 10);
|
||||||
mpq_canonicalize(qreal);
|
mpq_canonicalize(qreal);
|
||||||
mpq_canonicalize(qimag);
|
mpq_canonicalize(qimag);
|
||||||
|
|
||||||
@ -170,12 +207,21 @@ int main(int argc, char *argv[])
|
|||||||
max_slope_id = traces[i].id;
|
max_slope_id = traces[i].id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(mode == MODE_TRACES) {
|
||||||
printf("%d %f %f %f\n",
|
printf("%d %f %f %f\n",
|
||||||
traces[i].id, log(ev_abs2[0]), log(ev_abs2[1]), log(ev_abs2[2]));
|
traces[i].id, log(ev_abs2[0]), log(ev_abs2[1]), log(ev_abs2[2]));
|
||||||
|
} else if(mode == MODE_TRACE_IDS) {
|
||||||
|
printf("%d\n", traces[i].id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
coxeter_snprint(buf, sizeof(buf), &group->elements[max_slope_id]);
|
coxeter_snprint(buf, sizeof(buf), &group->elements[max_slope_id]);
|
||||||
gmp_printf("q = %Qd + i*%Qd\tElements: %d\tTraces: %d\tMaximal slope: %f at %s\n", qreal, qimag, n, nuniq, max_slope, buf);
|
|
||||||
|
if(mode == MODE_SUMMARY) {
|
||||||
|
gmp_fprintf(stdout, "%f %f %d %d %f %s\n", mpq_get_d(qreal), mpq_get_d(qimag), n, nuniq, max_slope, buf);
|
||||||
|
} else {
|
||||||
|
gmp_fprintf(stderr, "q = %Qd + i*%Qd\tElements: %d\tTraces: %d\tMaximal slope: %f at %s\n", qreal, qimag, n, nuniq, max_slope, buf);
|
||||||
|
}
|
||||||
|
|
||||||
mps_monomial_poly_free(solver, MPS_POLYNOMIAL(poly));
|
mps_monomial_poly_free(solver, MPS_POLYNOMIAL(poly));
|
||||||
mps_context_free(solver);
|
mps_context_free(solver);
|
||||||
|
Loading…
Reference in New Issue
Block a user