/*
Copyright (C) 2020 Fredrik Johansson
This file is part of Calcium.
Calcium is free software: you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License (LGPL) as published
by the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version. See .
*/
#include
#include
#include
#include "../qqbar.h"
#include "../ca_ext.h"
void
ca_ext_fprint(FILE *file, const ca_ext_t x, ca_ctx_t ctx)
{
if (x->head == CA_QQBar)
{
flint_fprintf(file, "Algebraic ");
if (qqbar_is_i(CA_EXT_QQBAR(x)))
flint_fprintf(file, "I");
else
{
/*
flint_fprintf(file, "Algebraic [deg %wd] ", qqbar_degree(CA_EXT_QQBAR(x)));
qqbar_printn(CA_EXT_QQBAR(x), 10);
*/
qqbar_fprintn(file, CA_EXT_QQBAR(x), 8);
/*
flint_fprintf(file, " (");
fmpz_poly_print_pretty(QQBAR_POLY(CA_EXT_QQBAR(x)), "a");
flint_fprintf(file, "=0)");
*/
}
}
else
{
flint_fprintf(file, "%s", calcium_func_name(CA_EXT_HEAD(x)));
if (CA_EXT_FUNC_NARGS(x) != 0)
{
slong i;
flint_fprintf(file, "(");
for (i = 0; i < CA_EXT_FUNC_NARGS(x); i++)
{
ca_fprint(file, CA_EXT_FUNC_ARGS(x) + i, ctx);
if (i < CA_EXT_FUNC_NARGS(x) - 1)
flint_fprintf(file, ", ");
}
flint_fprintf(file, ")");
}
}
}
char*
ca_ext_get_str(const ca_ext_t x, ca_ctx_t ctx)
{
char * buffer = NULL;
size_t buffer_size = 0;
FILE * out = open_memstream(&buffer, &buffer_size);
ca_ext_fprint(out, x, ctx);
fclose(out);
return buffer;
}