Skip to content

Commit

Permalink
Merge g2_psi4, psi6, chi10, chi12 as g2_even_weight
Browse files Browse the repository at this point in the history
  • Loading branch information
j-kieffer committed Feb 10, 2025
1 parent 9d98feb commit b1a62a9
Show file tree
Hide file tree
Showing 13 changed files with 126 additions and 383 deletions.
6 changes: 2 additions & 4 deletions src/acb_theta.h
Original file line number Diff line number Diff line change
Expand Up @@ -217,10 +217,8 @@ void acb_theta_g2_transvectant(acb_poly_t res, const acb_poly_t g, const acb_pol
slong m, slong n, slong k, int lead, slong prec);
slong acb_theta_g2_character(const fmpz_mat_t mat);

void acb_theta_g2_psi4(acb_t res, acb_srcptr th2, slong prec);
void acb_theta_g2_psi6(acb_t res, acb_srcptr th2, slong prec);
void acb_theta_g2_chi10(acb_t res, acb_srcptr th2, slong prec);
void acb_theta_g2_chi12(acb_t res, acb_srcptr th2, slong prec);
void acb_theta_g2_even_weight(acb_t psi4, acb_t psi6, acb_t chi10, acb_t chi12,
acb_srcptr th2, slong prec);
void acb_theta_g2_chi5(acb_t res, acb_srcptr th, slong prec);
void acb_theta_g2_chi35(acb_t res, acb_srcptr th, slong prec);
void acb_theta_g2_chi3_6(acb_poly_t res, acb_srcptr dth, slong prec);
Expand Down
36 changes: 0 additions & 36 deletions src/acb_theta/g2_chi10.c

This file was deleted.

57 changes: 0 additions & 57 deletions src/acb_theta/g2_chi12.c

This file was deleted.

88 changes: 85 additions & 3 deletions src/acb_theta/g2_psi6.c → src/acb_theta/g2_even_weight.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright (C) 2023 Jean Kieffer
Copyright (C) 2025 Jean Kieffer
This file is part of FLINT.
Expand Down Expand Up @@ -44,8 +44,7 @@ g2_psi6_sgn(ulong b, ulong c, ulong d)
return sgn;
}


void
static void
acb_theta_g2_psi6(acb_t res, acb_srcptr th2, slong prec)
{
slong g = 2;
Expand Down Expand Up @@ -80,3 +79,86 @@ acb_theta_g2_psi6(acb_t res, acb_srcptr th2, slong prec)
acb_clear(s);
acb_clear(t);
}

static void
acb_theta_g2_chi12(acb_t res, acb_srcptr th2, slong prec)
{
slong g = 2;
ulong ch1, ch2, ch3, ch4, ab;
ulong n = 1 << (2 * g);
acb_t s, t;

acb_init(s);
acb_init(t);

for (ch1 = 0; ch1 < n; ch1++)
{
for (ch2 = ch1 + 1; ch2 < n; ch2++)
{
for (ch3 = ch2 + 1; ch3 < n; ch3++)
{
ch4 = ch1 ^ ch2 ^ ch3;
if (acb_theta_char_is_goepel(ch1, ch2, ch3, ch4, g))
{
acb_one(t);
for (ab = 0; ab < n; ab++)
{
if (acb_theta_char_is_even(ab, g)
&& (ab != ch1)
&& (ab != ch2)
&& (ab != ch3)
&& (ab != ch4))
{
acb_mul(t, t, &th2[ab], prec);
}
}
acb_sqr(t, t, prec);
acb_add(s, s, t, prec);
}
}
}
}
acb_mul_2exp_si(res, s, -15);

acb_clear(s);
acb_clear(t);
}

void
acb_theta_g2_even_weight(acb_t psi4, acb_t psi6, acb_t chi10, acb_t chi12,
acb_srcptr th2, slong prec)
{
slong g = 2;
slong n = 1 << (2 * g);
ulong ab;
acb_t s, t;

acb_init(s);
acb_init(t);

for (ab = 0; ab < (1 << (2 * g)); ab++)
{
if (acb_theta_char_is_even(ab, g))
{
acb_pow_ui(t, &th2[ab], 4, prec);
acb_add(s, s, t, prec);
}
}
acb_mul_2exp_si(psi4, s, -2);

acb_one(t);
for (ab = 0; ab < n; ab++)
{
if (acb_theta_char_is_even(ab, g))
{
acb_mul(t, t, &th2[ab], prec);
}
}
acb_mul_2exp_si(chi10, t, -12);

acb_theta_g2_psi6(psi6, th2, prec);
acb_theta_g2_chi12(chi12, th2, prec);

acb_clear(t);
acb_clear(s);
}
37 changes: 0 additions & 37 deletions src/acb_theta/g2_psi4.c

This file was deleted.

10 changes: 2 additions & 8 deletions src/acb_theta/test/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,10 @@
#include "t-g2_character.c"
#include "t-g2_chi3_6.c"
#include "t-g2_chi5.c"
#include "t-g2_chi10.c"
#include "t-g2_chi12.c"
#include "t-g2_chi35.c"
#include "t-g2_covariants.c"
#include "t-g2_detk_symj.c"
#include "t-g2_psi4.c"
#include "t-g2_psi6.c"
#include "t-g2_even_weight.c"
#include "t-g2_sextic.c"
#include "t-g2_transvectant.c"
#include "t-jet.c"
Expand Down Expand Up @@ -91,13 +88,10 @@ test_struct tests[] =
TEST_FUNCTION(acb_theta_g2_character),
TEST_FUNCTION(acb_theta_g2_chi3_6),
TEST_FUNCTION(acb_theta_g2_chi5),
TEST_FUNCTION(acb_theta_g2_chi10),
TEST_FUNCTION(acb_theta_g2_chi12),
TEST_FUNCTION(acb_theta_g2_chi35),
TEST_FUNCTION(acb_theta_g2_covariants),
TEST_FUNCTION(acb_theta_g2_detk_symj),
TEST_FUNCTION(acb_theta_g2_psi4),
TEST_FUNCTION(acb_theta_g2_psi6),
TEST_FUNCTION(acb_theta_g2_even_weight),
TEST_FUNCTION(acb_theta_g2_sextic),
TEST_FUNCTION(acb_theta_g2_transvectant),
TEST_FUNCTION(acb_theta_jet),
Expand Down
66 changes: 0 additions & 66 deletions src/acb_theta/test/t-g2_chi12.c

This file was deleted.

14 changes: 7 additions & 7 deletions src/acb_theta/test/t-g2_chi5.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ TEST_FUNCTION_START(acb_theta_g2_chi5, state)
slong n2 = 1 << (2 * g);
slong prec = 100 + n_randint(state, 500);
slong mag_bits = n_randint(state, 10);
acb_ptr th;
acb_ptr th, mf;
slong k;
acb_t r, s;
acb_t r;

th = _acb_vec_init(n2);
mf = _acb_vec_init(4);
acb_init(r);
acb_init(s);

for (k = 0; k < n2; k++)
{
Expand All @@ -40,21 +40,21 @@ TEST_FUNCTION_START(acb_theta_g2_chi5, state)
acb_theta_g2_chi5(r, th, prec);
acb_sqr(r, r, prec);
_acb_vec_sqr(th, th, n2, prec);
acb_theta_g2_chi10(s, th, prec);
acb_theta_g2_even_weight(&mf[0], &mf[1], &mf[2], &mf[3], th, prec);

if (!acb_overlaps(r, s))
if (!acb_overlaps(r, &mf[2]))
{
flint_printf("FAIL\n");
acb_printd(r, 10);
flint_printf("\n");
acb_printd(s, 10);
acb_printd(&mf[2], 10);
flint_printf("\n");
flint_abort();
}

_acb_vec_clear(th, n2);
_acb_vec_clear(mf, 4);
acb_clear(r);
acb_clear(s);
}

TEST_FUNCTION_END(state);
Expand Down
Loading

0 comments on commit b1a62a9

Please sign in to comment.