11#ifndef ORBITER_SRC_LIB_FOUNDATIONS_CODING_THEORY_CODING_THEORY_H_
12#define ORBITER_SRC_LIB_FOUNDATIONS_CODING_THEORY_CODING_THEORY_H_
16namespace layer1_foundations {
17namespace coding_theory {
36 int n,
int k,
int q,
int verbose_level);
38 int n_max,
int q,
int verbose_level);
40 int n,
int k,
int d,
int q,
44 long int *set,
int *f_forbidden,
int level,
int verbose_level);
55 int f_projective,
int verbose_level);
59 int *code,
int verbose_level);
67 int *weight_enumerator,
71 int *weight_enumerator,
75 int *weight_enumerator,
87 int f_normalize_from_the_left,
int f_normalize_from_the_right,
92 long int *basis_set,
int k,
97 int n,
int k,
long int *columns_set_of_size_n,
102 long int *columns_set,
int k,
106 long int *columns_set,
int k,
110 int polynomial_degree,
111 int polynomial_nb_vars,
112 std::string &polynomial_text,
120 std::vector<std::string> &long_code_generators_text,
121 int f_nearest_codeword,
122 std::string &nearest_codeword_text,
127 int nb_words,
int n,
int f_metric_balls,
int radius_of_metric_ball,
128 int f_enhance,
int radius,
131 int nb_words,
int n,
int f_embellish,
int verbose_level);
132 void embellish(
int *M,
int nb_rows,
int nb_cols,
int i0,
int j0,
int a,
int rad);
133 void place_entry(
int *M,
int nb_rows,
int nb_cols,
int i,
int j,
int a);
134 void do_it(
int n,
int r,
int a,
int c,
int seed,
int verbose_level);
135 void dimensions(
int n,
int &nb_rows,
int &nb_cols);
144 int m,
int n, std::string &genma_text,
147 std::string &text, std::string &fname,
150 std::string &fname,
int verbose_level);
152 std::string &fname_out,
int nb_bits,
int verbose_level);
157 std::string &poly_coeffs,
166 int *roots,
int nb_roots,
int f_poly, std::string &poly,
167 int f_dual, std::string &fname_txt, std::string &fname_csv,
170 int degree,
int *generator_polynomial,
int *&M);
178 int f_poly, std::string &poly,
183 int designed_distance,
int &bose_distance,
184 int &transversal_length,
int *&transversal,
188 int n,
int &k,
int verbose_level);
189 void make_BCH_codes(
int n,
int q,
int t,
int b,
int f_dual,
int verbose_level);
194 int mindist(
int n,
int k,
int q,
int *G,
195 int f_verbose_level,
int idx_zero,
int idx_one,
196 int *add_table,
int *mult_table);
205 int *&H_subfield,
int &m,
int &n,
207 int f_construction_A,
int f_hyperoval,
208 int f_construction_B,
int verbose_level);
212 int &m,
int &n,
int &beta,
int &r,
int *exponents,
213 int f_construction_A,
int f_hyperoval,
int f_construction_B,
214 int f_elements_exponential, std::string &symbol_for_print,
218 int *H_subfield,
int *C,
int *C_inv,
int *M,
int m,
int n,
219 int beta,
int beta_q,
220 int f_elements_exponential, std::string &symbol_for_print,
221 std::string &symbol_for_print_subfield,
222 int f_construction_A,
int f_hyperoval,
int f_construction_B,
225 int m,
int n,
int *M,
int *MM,
int verbose_level);
229 int *&the_set,
int &length,
232 std::string &override_poly_Q, std::string &override_poly,
234 int *&code,
int &length,
240 int t,
int da,
int dc,
244 long int &nb_sol, std::vector<std::vector<int> > &Solutions,
247 int da,
int *A,
int dc,
int *C,
int i,
248 long int &nb_sol, std::vector<std::vector<int> > &Solutions,
297 void report(std::ostream &ost,
int verbose_level);
various functions related to coding theory
void print_polynomial(ring_theory::unipoly_domain &Fq, int degree, ring_theory::unipoly_object *coeffs)
int Hamming_distance(int *v1, int *v2, int n)
void do_long_code(int n, std::vector< std::string > &long_code_generators_text, int f_nearest_codeword, std::string &nearest_codeword_text, int verbose_level)
void field_reduction(field_theory::finite_field *FQ, field_theory::finite_field *Fq, std::string &label, int m, int n, std::string &genma_text, int verbose_level)
int plotkin_bound_for_d(int n, int k, int q, int verbose_level)
int gilbert_varshamov_lower_bound_for_d(int n, int k, int q, int verbose_level)
void codewords_affine(field_theory::finite_field *F, int n, int k, int *code, int *codewords, int verbose_level)
void place_binary(long int h, int &i, int &j)
void make_tensor_code_9_dimensional(int q, std::string &override_poly_Q, std::string &override_poly, int f_hyperoval, int *&code, int &length, int verbose_level)
void search_for_CRC_polynomials(int t, int da, int *A, int dc, int *C, int i, field_theory::finite_field *F, long int &nb_sol, std::vector< std::vector< int > > &Solutions, int verbose_level)
void tt_field_reduction(field_theory::finite_field &F, field_theory::finite_field &f, int m, int n, int *M, int *MM, int verbose_level)
void encode_text_5bits(std::string &text, std::string &fname, int verbose_level)
int code_minimum_distance(field_theory::finite_field *F, int n, int k, int *code, int verbose_level)
void CRC_encode_text(field_theory::nth_roots *Nth, ring_theory::unipoly_object &CRC_poly, std::string &text, std::string &fname, int verbose_level)
void BCH_generator_polynomial(field_theory::finite_field *F, ring_theory::unipoly_object &g, int n, int designed_distance, int &bose_distance, int &transversal_length, int *&transversal, ring_theory::longinteger_object *&rank_of_irreducibles, int verbose_level)
void print_binary(int n, int *v)
int Hamming_distance_binary(int a, int b, int n)
void create_matrix_M(int *&M, field_theory::finite_field *F, field_theory::finite_field *f, int &m, int &n, int &beta, int &r, int *exponents, int f_construction_A, int f_hyperoval, int f_construction_B, int f_elements_exponential, std::string &symbol_for_print, int verbose_level)
void do_make_macwilliams_system(int q, int n, int k, int verbose_level)
int test_all_two_bit_patterns_binary(int da, int *A, int dc, int *C, int verbose_level)
int distance(int n, int a, int b)
void matrix_from_projective_set(field_theory::finite_field *F, int n, int k, long int *columns_set_of_size_n, int *genma, int verbose_level)
void embellish(int *M, int nb_rows, int nb_cols, int i0, int j0, int a, int rad)
void twisted_tensor_product_codes(int *&H_subfield, int &m, int &n, field_theory::finite_field *F, field_theory::finite_field *f, int f_construction_A, int f_hyperoval, int f_construction_B, int verbose_level)
void search_for_CRC_polynomials_binary(int t, int da, int *A, int dc, int *C, int i, long int &nb_sol, std::vector< std::vector< int > > &Solutions, int verbose_level)
void make_BCH_codes(int n, int q, int t, int b, int f_dual, int verbose_level)
int singleton_bound_for_d(int n, int k, int q, int verbose_level)
void code_projective_weight_enumerator(field_theory::finite_field *F, int n, int k, int *code, int *weight_enumerator, int verbose_level)
void make_tensor_code_9dimensional_as_point_set(field_theory::finite_field *F, int *&the_set, int &length, int verbose_level)
void do_linear_code_through_columns_of_parity_check(int n, long int *columns_set, int k, int verbose_level)
void dimensions_N(int N, int &nb_rows, int &nb_cols)
int remainder_is_nonzero_binary(int da, int *A, int db, int *B)
void print_polynomial_tight(std::ostream &ost, ring_theory::unipoly_domain &Fq, int degree, ring_theory::unipoly_object *coeffs)
void make_gilbert_varshamov_code_recursion(geometry::projective_space *P, int n, int d, long int *set, int *f_forbidden, int level, int verbose_level)
void compute_and_print_projective_weights(std::ostream &ost, field_theory::finite_field *F, int *M, int n, int k)
int test_all_three_bit_patterns_binary(int da, int *A, int dc, int *C, int verbose_level)
void code_weight_enumerator_fast(field_theory::finite_field *F, int n, int k, int *code, int *weight_enumerator, int verbose_level)
void make_Hamming_graph_and_write_file(int n, int q, int f_projective, int verbose_level)
void do_linear_code_through_basis(int n, long int *basis_set, int k, int f_embellish, int verbose_level)
int griesmer_bound_for_d(int n, int k, int q, int verbose_level)
void convert_to_binary(int n, long int h, int *v)
void do_it(int n, int r, int a, int c, int seed, int verbose_level)
int remainder_is_nonzero(int da, int *A, int db, int *B, field_theory::finite_field *F)
int test_all_two_bit_patterns(int da, int *A, int dc, int *C, field_theory::finite_field *F, int verbose_level)
void make_mac_williams_equations(ring_theory::longinteger_object *&M, int n, int k, int q, int verbose_level)
void investigate_code(long int *Words, int nb_words, int n, int f_embellish, int verbose_level)
void do_polynomial(int n, int polynomial_degree, int polynomial_nb_vars, std::string &polynomial_text, int f_embellish, int verbose_level)
void find_CRC_polynomials(field_theory::finite_field *F, int t, int da, int dc, int verbose_level)
void do_linear_code_through_columns_of_parity_check_projectively(int n, long int *columns_set, int k, int verbose_level)
void do_sylvester_hadamard(int n, int f_embellish, int verbose_level)
int test_all_three_bit_patterns(int da, int *A, int dc, int *C, field_theory::finite_field *F, int verbose_level)
void code_weight_enumerator(field_theory::finite_field *F, int n, int k, int *code, int *weight_enumerator, int verbose_level)
void make_gilbert_varshamov_code(int n, int k, int d, int q, geometry::projective_space *P, int verbose_level)
void generator_matrix_cyclic_code(field_theory::finite_field *F, int n, std::string &poly_coeffs, int verbose_level)
void code_diagram(std::string &label, long int *Words, int nb_words, int n, int f_metric_balls, int radius_of_metric_ball, int f_enhance, int radius, int verbose_level)
void code_projective_weights(field_theory::finite_field *F, int n, int k, int *code, int *&weights, int verbose_level)
int mindist(int n, int k, int q, int *G, int f_verbose_level, int idx_zero, int idx_one, int *add_table, int *mult_table)
void create_matrix_H_subfield(field_theory::finite_field *F, field_theory::finite_field *f, int *H_subfield, int *C, int *C_inv, int *M, int m, int n, int beta, int beta_q, int f_elements_exponential, std::string &symbol_for_print, std::string &symbol_for_print_subfield, int f_construction_A, int f_hyperoval, int f_construction_B, int verbose_level)
void dimensions(int n, int &nb_rows, int &nb_cols)
void make_cyclic_code(int n, int q, int t, int *roots, int nb_roots, int f_poly, std::string &poly, int f_dual, std::string &fname_txt, std::string &fname_csv, int verbose_level)
void field_induction(std::string &fname_in, std::string &fname_out, int nb_bits, int verbose_level)
void compute_generator_matrix(ring_theory::unipoly_object a, int *&genma, int n, int &k, int verbose_level)
void determine_weight_enumerator()
void do_weight_enumerator(field_theory::finite_field *F, int *M, int m, int n, int f_normalize_from_the_left, int f_normalize_from_the_right, int verbose_level)
void place_entry(int *M, int nb_rows, int nb_cols, int i, int j, int a)
int griesmer_bound_for_n(int k, int d, int q, int verbose_level)
void make_table_of_bounds(int n_max, int q, int verbose_level)
int hamming_bound_for_d(int n, int k, int q, int verbose_level)
void mac_williams_equations(ring_theory::longinteger_object *&M, int n, int k, int q)
void make_BCH_code(int n, field_theory::finite_field *F, int d, field_theory::nth_roots *&Nth, ring_theory::unipoly_object &P, int verbose_level)
void report(std::ostream &ost, int verbose_level)
field_theory::finite_field * F
int * generator_polynomial
ring_theory::unipoly_object * P
field_theory::nth_roots * Nth
void init(field_theory::finite_field *F, int n, int d, int verbose_level)
the nth roots over Fq using an extension field
projective space PG(n,q) of dimension n over Fq
a class to represent arbitrary precision integers
domain of polynomials in one variable over a finite field
the orbiter library for the classification of combinatorial objects