// -*- C++ -*-
// automatically generated by autodoc

// ========== HEADER FILE src/ntt/ntt.h: ==========

// ----- SRCFILE=src/ntt/nttdit4.cc: -----
void ntt_dit4_core(mod *f, ulong ldn, int is);
// Auxiliary routine for ntt_dit4()
// Decimation in time (DIT) radix-4 NTT
// Input data must be in revbin_permuted order
// ldn := base-2 logarithm of the array length
// is := sign of the transform

void ntt_dit4(mod *f, ulong ldn, int is);
// Radix-4 decimation in time (DIT) NTT

// ----- SRCFILE=src/ntt/nttdif4.cc: -----
void ntt_dif4_core(mod *f, ulong ldn, int is);
// Auxiliary routine for ntt_dif4().
// Decimation in frequency (DIF) radix-4 NTT.
// Output data is in revbin_permuted order.
// ldn := base-2 logarithm of the array length.
// is := sign of the transform

void ntt_dif4(mod *f, ulong ldn, int is);
// Radix-4 decimation in frequency (DIF) NTT

// ----- SRCFILE=src/ntt/nttdit2.cc: -----
void ntt_dit2_core(mod *f, ulong ldn, int is);
// Auxiliary routine for ntt_dit2()
// Decimation in time (DIT) radix-2 FFT
// Input data must be in revbin_permuted order
// ldn := base-2 logarithm of the array length
// is := sign of the transform

void ntt_dit2(mod *f, ulong ldn, int is);
// Radix-2 decimation in time (DIT) NTT

// ----- SRCFILE=src/ntt/nttdif2.cc: -----
void ntt_dif2_core(mod *f, ulong ldn, int is);
// Auxiliary routine for ntt_dif2().
// Decimation in frequency (DIF) radix-2 NTT.
// Output data is in revbin_permuted order.
// ldn := base-2 logarithm of the array length.
// is := sign of the transform

void ntt_dif2(mod *f, ulong ldn, int is);
// Radix-2 decimation in frequency (DIF) NTT

// ----- SRCFILE=src/ntt/nttcnvl.cc: -----
inline static void assert_two_invertible();

void ntt_auto_convolution(mod *f, ulong ldn);
// Cyclic self-convolution.
// Use zero padded data for linear convolution.

void ntt_convolution(mod * restrict f, mod * restrict g, ulong ldn);
// Cyclic convolution.
// Use zero padded data for linear convolution.
// Result in g[].

void ntt_convolution(double *f, double *g, ulong ldn);

void ntt_auto_convolution(double *f, ulong ldn);

// ----- SRCFILE=src/ntt/slownttcnvl.cc: -----
void slow_mod_convolution(mod *f, mod *g, ulong n);
// (cyclic) convolution:  g[] :=  f[] (*) g[]
// n := array length
// (use zero padded data for linear convolution)

void slow_mod_convolution(mod *f, mod *g, ulong n);
// (cyclic) convolution:  g[] :=  f[] (*) g[]
// n := array length
// (use zero padded data for linear convolution)

// ----- SRCFILE=src/ntt/nttlearn.cc: -----
void ntt_dit2l(mod *f, ulong ldn, int is);
// decimation in time
// revbin_permutes data at entry

void ntt_dif2l(mod *f, ulong ldn, int is);
// decimation in frequency
// revbin_permutes data before exit

// ----- SRCFILE=src/ntt/slowntt.cc: -----
void slow_ntt(mod *f, ulong n, int is);
// Number theoretic transform by definition (slow!)

