diff --git a/src/acb_theta.h b/src/acb_theta.h index 91840b6759..f3b677b1f7 100644 --- a/src/acb_theta.h +++ b/src/acb_theta.h @@ -199,8 +199,6 @@ void acb_theta_ql_jet(acb_ptr th, acb_srcptr zs, slong nb, void acb_theta_jet_notransform(acb_ptr th, acb_srcptr zs, slong nb, const acb_mat_t tau, slong ord, ulong ab, int all, int sqr, slong prec); -void acb_theta_all_notransform(acb_ptr th, acb_srcptr zs, slong nb, - const acb_mat_t tau, int sqr, slong prec); int acb_theta_reduce_tau(acb_ptr new_zs, acb_mat_t new_tau, fmpz_mat_t mat, acb_mat_t N, acb_mat_t ct, acb_ptr exps, acb_srcptr zs, slong nb, const acb_mat_t tau, slong prec); diff --git a/src/acb_theta/all.c b/src/acb_theta/all.c index 14d40d7a1f..54a5f38e5a 100644 --- a/src/acb_theta/all.c +++ b/src/acb_theta/all.c @@ -72,7 +72,7 @@ acb_theta_all(acb_ptr th, acb_srcptr zs, slong nb, const acb_mat_t tau, kappa = acb_siegel_kappa(s, mat, new_tau, prec); } - acb_theta_all_notransform(aux, new_zs, nb, new_tau, sqr, prec); + acb_theta_jet_notransform(aux, new_zs, nb, new_tau, 0, 0, 1, sqr, prec); /* Account for reduce_z */ for (j = 0; j < nb; j++) diff --git a/src/acb_theta/all_notransform.c b/src/acb_theta/all_notransform.c deleted file mode 100644 index 99e000edf8..0000000000 --- a/src/acb_theta/all_notransform.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (C) 2024 Jean Kieffer - - This file is part of FLINT. - - FLINT 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 3 of the License, or - (at your option) any later version. See . -*/ - -#include "acb.h" -#include "arb_mat.h" -#include "acb_mat.h" -#include "acb_theta.h" - -/* Use duplication formula in case of squared theta values */ - -void -acb_theta_all_notransform(acb_ptr th, acb_srcptr zs, slong nb, const acb_mat_t tau, - int sqr, slong prec) -{ - slong g = acb_mat_nrows(tau); - slong n = 1 << g; - - if (nb <= 0) - { - return; - } - - if (sqr) - { - acb_ptr new_zs, new_th; - acb_mat_t new_tau; - slong j; - int add_zero; - - add_zero = !_acb_vec_is_zero(zs, g); - new_zs = _acb_vec_init((nb + add_zero) * g); - new_th = _acb_vec_init((nb + add_zero) * n); - acb_mat_init(new_tau, g, g); - - _acb_vec_scalar_mul_2exp_si(new_zs + add_zero * g, zs, nb * g, 1); - acb_mat_scalar_mul_2exp_si(new_tau, tau, 1); - acb_theta_ql_jet(new_th, new_zs, nb + add_zero, new_tau, - 0, 0, prec); - - for (j = 0; j < nb; j++) - { - acb_theta_agm_mul_all(th + j * n * n, new_th, - new_th + (j + add_zero) * n, g, prec); - } - } - else - { - acb_theta_jet_notransform(th, zs, nb, tau, 0, 0, 1, 0, prec); - } -} diff --git a/src/acb_theta/test/main.c b/src/acb_theta/test/main.c index 925fe4299f..d8ee598320 100644 --- a/src/acb_theta/test/main.c +++ b/src/acb_theta/test/main.c @@ -16,7 +16,6 @@ #include "t-agm_mul_tight.c" #include "t-agm_sqrt.c" #include "t-all.c" -#include "t-all_notransform.c" #include "t-char_dot.c" #include "t-char_is_even.c" #include "t-char_is_goepel.c" @@ -81,7 +80,6 @@ test_struct tests[] = TEST_FUNCTION(acb_theta_agm_mul_tight), TEST_FUNCTION(acb_theta_agm_sqrt), TEST_FUNCTION(acb_theta_all), - TEST_FUNCTION(acb_theta_all_notransform), TEST_FUNCTION(acb_theta_char_dot), TEST_FUNCTION(acb_theta_char_is_even), TEST_FUNCTION(acb_theta_char_is_goepel), diff --git a/src/acb_theta/test/t-all.c b/src/acb_theta/test/t-all.c index 57fcf84287..089377382d 100644 --- a/src/acb_theta/test/t-all.c +++ b/src/acb_theta/test/t-all.c @@ -17,7 +17,7 @@ TEST_FUNCTION_START(acb_theta_all, state) { slong iter; - /* Test: agrees with all_notransform */ + /* Test: agrees with jet_notransform */ for (iter = 0; iter < 20 * flint_test_multiplier(); iter++) { slong g = 1 + n_randint(state, 2); @@ -41,9 +41,9 @@ TEST_FUNCTION_START(acb_theta_all, state) acb_mat_scalar_mul_2exp_si(tau, tau, -1); acb_siegel_randtest_vec_reduced(z, state, nb, tau, 0, prec); - /* Call theta_all at precision mprec, test against all_notransform */ + /* Call theta_all at precision mprec, test against jet_notransform */ acb_theta_all(th, z, nb, tau, sqr, mprec); - acb_theta_all_notransform(test, z, nb, tau, sqr, prec); + acb_theta_jet_notransform(test, z, nb, tau, 0, 0, 1, sqr, prec); if (!_acb_vec_overlaps(th, test, nb * n2)) { diff --git a/src/acb_theta/test/t-all_notransform.c b/src/acb_theta/test/t-all_notransform.c deleted file mode 100644 index eb325e2d88..0000000000 --- a/src/acb_theta/test/t-all_notransform.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright (C) 2024 Jean Kieffer - - This file is part of FLINT. - - FLINT 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 3 of the License, or - (at your option) any later version. See . -*/ - -#include "test_helpers.h" -#include "acb_mat.h" -#include "acb_theta.h" - -TEST_FUNCTION_START(acb_theta_all_notransform, state) -{ - slong iter; - - /* Test: agrees with sum */ - for (iter = 0; iter < 50 * flint_test_multiplier(); iter++) - { - slong g = 1 + n_randint(state, 2); - slong n = 1 << g; - slong prec = 100 + n_randint(state, 500); - slong nb = 1 + n_randint(state, 4); - int sqr = n_randint(state, 2); - acb_mat_t tau; - acb_ptr zs, th, test; - arb_ptr distances; - acb_theta_ctx_tau_t ctx_tau; - acb_theta_ctx_z_struct * vec; - slong j; - - acb_mat_init(tau, g, g); - zs = _acb_vec_init(nb * g); - th = _acb_vec_init(nb * n * n); - test = _acb_vec_init(nb * n * n); - acb_theta_ctx_tau_init(ctx_tau, 1, g); - vec = acb_theta_ctx_z_vec_init(nb, g); - distances = _arb_vec_init(n); - - /* Sample tau with reasonable imaginary part */ - acb_siegel_randtest_compact(tau, state, 0, prec); - acb_siegel_randtest_vec_reduced(zs + g, state, nb - 1, tau, 0, prec); - - acb_theta_ctx_tau_set(ctx_tau, tau, prec); - for (j = 0; j < nb; j++) - { - acb_theta_ctx_z_set(&vec[j], zs + j * g, ctx_tau, prec); - } - acb_theta_sum(test, vec, nb, ctx_tau, distances, 1, 1, 0, prec); - if (sqr) - { - for (j = 0; j < n * n * nb; j++) - { - acb_sqr(&test[j], &test[j], prec); - } - } - - /*flint_printf("\n\ng = %wd, prec = %wd, nb = %wd, sqr = %wd\n", - g, prec, nb, sqr); - acb_mat_printd(tau, 5); - _acb_vec_printd(zs, nb * g, 5); - flint_printf("result of sum:\n"); - _acb_vec_printd(test, n * n * nb, 5); */ - - acb_theta_all_notransform(th, zs, nb, tau, sqr, prec); - - /* flint_printf("\nall_notransform: got theta:\n", res); - _acb_vec_printd(th, n * n * nb, 5); */ - - if (!_acb_vec_overlaps(th, test, nb * n * n) - || (_acb_vec_is_finite(test, nb * n * n) && !_acb_vec_is_finite(th, nb * n * n))) - { - flint_printf("FAIL\n"); - flint_printf("difference:\n"); - _acb_vec_sub(th, th, test, nb * n * n, prec); - _acb_vec_printd(th, nb * n * n, 5); - flint_abort(); - } - - acb_mat_clear(tau); - _acb_vec_clear(zs, nb * g); - _acb_vec_clear(th, n * n * nb); - _acb_vec_clear(test, n * n * nb); - acb_theta_ctx_tau_clear(ctx_tau); - acb_theta_ctx_z_vec_clear(vec, nb); - _arb_vec_clear(distances, n); - } - - TEST_FUNCTION_END(state); -}