12#ifndef ORBITER_SRC_LIB_FOUNDATIONS_COMBINATORICS_COMBINATORICS_H_
13#define ORBITER_SRC_LIB_FOUNDATIONS_COMBINATORICS_COMBINATORICS_H_
18namespace layer1_foundations {
19namespace combinatorics {
71 void init(
int n,
int verbose_level);
76 void raise(
int *in,
int *out);
103 void unrank(
int rk,
int &f_vertical,
104 int &x0,
int &y0,
int verbose_level);
105 int rank(
int f_vertical,
int x0,
int y0,
int verbose_level);
107 int &x1,
int &y1,
int &x2,
int &y2,
153 int argc, std::string *argv,
193 int argc, std::string *argv,
265 int &iso_idx_if_found,
270 std::ostream &fp,
int verbose_level);
272 std::ostream &fp,
int max_TDO_depth,
276 std::ostream &fp,
int i,
int max_TDO_depth,
308 void partition_dual(
int *part,
int *dual_part,
int n,
int verbose_level);
324 int set_find(
int *elts,
int size,
int a);
325 void set_complement(
int *subset,
int subset_size,
int *complement,
326 int &size_complement,
int universal_set_size);
328 int &size_complement,
int universal_set_size);
330 int &size_complement,
int universal_set_size);
333 int *elts_to_add,
int nb_elts_to_add);
336 int *elts_to_delete,
int nb_elts_to_delete);
343 int f_is_subset_of(
int v,
int t,
int k,
int rk_t_subset,
int rk_k_subset);
362 int &l,
int &m,
int &n);
363 long int ij2k_lint(
long int i,
long int j,
long int n);
364 void k2ij_lint(
long int k,
long int & i,
long int & j,
long int n);
365 int ij2k(
int i,
int j,
int n);
366 void k2ij(
int k,
int & i,
int & j,
int n);
367 int ijk2h(
int i,
int j,
int k,
int n);
368 void h2ijk(
int h,
int &i,
int &j,
int &k,
int n);
370 void perm_move(
int *from,
int *to,
long int n);
374 void perm_mult(
int *a,
int *b,
int *c,
long int n);
379 void perm_raise(
int *a,
int *b,
int e,
long int n);
385 int offset,
int f_cycle_length);
386 void perm_print(std::ostream &ost,
int *a,
int n);
390 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
391 void *point_label_data);
397 int f_print_cycles_of_length_one,
399 int f_max_cycle_length,
400 int max_cycle_length,
401 int f_orbit_structure,
402 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
403 void *point_label_data);
404 void perm_cycle_type(
int *perm,
long int degree,
int *cycles,
int &nb_cycles);
413 int hall_test(
int *A,
int n,
int kmax,
int *memo,
int verbose_level);
421 int *row_parts,
int *col_parts);
422 int ijk_rank(
int i,
int j,
int k,
int n);
423 void ijk_unrank(
int &i,
int &j,
int &k,
int n,
int rk);
437 int n,
int k,
int q,
int verbose_level);
440 int n,
int k,
int q,
int verbose_level);
443 int n,
int k,
int q,
int verbose_level);
445 int n,
int q,
int k,
int x);
448 void do_tdo_print(std::string &fname,
int verbose_level);
450 void Dedekind_numbers(
int n_min,
int n_max,
int q_min,
int q_max,
int verbose_level);
455 int f_grouping,
double x_stretch,
int verbose_level);
460 std::string &fname_csv,
int verbose_level);
462 int *&M,
int verbose_level);
464 int *&Blocks,
int verbose_level);
466 int v,
int k,
int b,
long int *Blocks_coded,
470 int *&M,
int &nb_rows,
int &nb_cols,
518 int *&Incma_out,
int verbose_level);
520 int *canonical_labeling,
int verbose_level);
532 void latex_incma(std::ostream &ost,
int verbose_level);
534 int nb_orbits,
int *orbit_first,
int *orbit_len,
int *orbit,
537 int nb_orbits,
int *orbit_first,
int *orbit_len,
int *orbit,
545 int *&Flags,
int &nb_flags_counted,
549 std::string *row_labels,
550 std::string *col_labels,
565#define MODE_UNDEFINED 0
570#define POINTTACTICAL 1
571#define BLOCKTACTICAL 2
572#define POINTANDBLOCKTACTICAL 3
574#define FUSE_TYPE_NONE 0
575#define FUSE_TYPE_SIMPLE 1
576#define FUSE_TYPE_DOUBLE 2
616 void write(std::ofstream &aStream, std::string &
label);
622 int input(std::ifstream &aStream);
634 int *&part_relabel,
int *&part_length,
637 int *&part_relabel,
int *&part_length,
642 int h,
int class_first,
int class_len);
644 int h,
int class_first,
int class_len);
678 void main(
int verbose_level);
696 void draw_it(std::ostream &ost,
long int *sol);
699 int gen_idx,
int &idx_of_image,
int verbose_level);
700 void turn_piece(
int &h,
int &r,
int &t,
int verbose_level);
701 void flip_piece(
int &h,
int &r,
int &t,
int verbose_level);
737 int *&line_types,
int &nb_line_types,
738 int &line_types_allocated);
741 int *&line_types,
int &nb_line_types,
742 int *&distributions,
int &nb_distributions,
745 int f_use_mckay_solver,
int f_once,
746 int *classes_len,
int f_scale,
int scaling,
747 int *&line_types,
int &nb_line_types,
748 int *&distributions,
int &nb_distributions,
751 int *classes_len,
int f_scale,
int scaling,
752 int *&line_types,
int &nb_line_types,
753 int *&distributions,
int &nb_distributions,
754 std::string &solution_file_name);
756 int f_use_mckay_solver,
int f_once,
757 int *classes_len,
int f_scale,
int scaling,
758 int *&line_types,
int &nb_line_types,
759 int *&distributions,
int &nb_distributions);
801 int read_arguments(
int argc, std::string *argv,
int verbose_level);
842 void do_it(std::ofstream &g,
int verbose_level);
851 int *point_types,
int nb_point_types,
int point_type_len,
852 int *distributions,
int nb_distributions,
int &
nb_tactical,
856 int *line_types,
int nb_line_types,
int line_type_len,
857 int *distributions,
int nb_distributions,
int &
nb_tactical,
861 int *point_types,
int nb_point_types,
int point_type_len,
862 int *distributions,
int nb_distributions,
868 int *line_types,
int nb_line_types,
int line_type_len,
869 int *distributions,
int nb_distributions,
908#define NUMBER_OF_SCHEMES 5
911#define LAMBDA_SCHEME 2
912#define EXTRA_ROW_SCHEME 3
913#define EXTRA_COL_SCHEME 4
983 void init_TDO(
int *Part,
int *Entries,
984 int Row_level,
int Col_level,
985 int Extra_row_level,
int Extra_col_level,
986 int Lambda_level,
int verbose_level);
1000 int h,
int f_label, std::string &label);
1002 int *f_first_inc_must_be_moved,
int verbose_level);
1008 int *point_types,
int nb_point_types,
int point_type_len,
1009 int *distributions,
int nb_distributions,
1010 int f_omit1,
int omit1,
int verbose_level);
1013 int *point_types,
int nb_point_types,
int point_type_len,
1015 int *non_zero_blocks,
int nb_non_zero_blocks,
1016 int f_omit1,
int omit1,
1021 int f_use_mckay,
int f_once,
1023 int *&point_types,
int &nb_point_types,
int &point_type_len,
1024 int *&distributions,
int &nb_distributions,
1026 int f_omit1,
int omit1,
int f_omit2,
int omit2,
1027 int f_use_packing_numbers,
1028 int f_dual_is_linear_space,
1029 int f_do_the_geometric_test);
1031 int *&point_types,
int &nb_point_types,
int &point_type_len,
1032 int *&distributions,
int &nb_distributions,
1033 int &cnt_second_system);
1035 int f_use_mckay,
int f_once,
1036 int *&point_types,
int &nb_point_types,
int &point_type_len,
1037 int *&distributions,
int &nb_distributions,
1038 int &cnt_second_system,
1039 int f_omit1,
int omit1,
int f_omit,
int omit,
1040 int f_use_packing_numbers,
int f_dual_is_linear_space);
1042 int &L1,
int &L2,
int verbose_level);
1045 int f_omit,
int omit,
1046 int *&point_types,
int &nb_point_types);
1049 int f_omit,
int omit,
1050 int f_use_packing_numbers,
1051 int f_dual_is_linear_space,
1052 int *&point_types,
int &nb_point_types);
1055 int f_omit,
int omit,
int f_dual_is_linear_space,
1056 int *point_types,
int nb_point_types,
1060 int f_omit,
int omit,
1061 int *point_types,
int nb_point_types,
1065 int f_omit,
int omit,
1066 int *point_types,
int nb_point_types,
1067 int eqn_start,
int &nb_eqns_used);
1071 int *&line_types,
int &nb_line_types,
int &line_type_len,
1072 int *&distributions,
int &nb_distributions,
1074 int f_omit1,
int omit1,
int f_omit,
int omit,
1075 int f_D1_upper_bound_x0,
int D1_upper_bound_x0,
1076 int f_use_mckay_solver,
1077 int f_use_packing_numbers);
1080 int verbose_level,
int f_once,
1081 int *&line_types,
int &nb_line_types,
int &line_type_len,
1082 int *&distributions,
int &nb_distributions,
1084 int f_omit1,
int omit1,
int f_omit,
int omit,
1085 int f_D1_upper_bound_x0,
int D1_upper_bound_x0,
1086 int f_use_mckay_solver,
1087 int f_use_packing_numbers);
1089 int f_omit,
int omit,
1090 int &L1,
int &L2,
int verbose_level);
1094 int f_omit,
int omit,
1095 int *&line_types,
int &nb_line_types);
1099 int f_omit,
int omit,
1100 int f_use_packing_numbers,
1101 int *&line_types,
int &nb_line_types);
1105 int f_omit,
int omit,
1106 int *line_types,
int nb_line_types,
1111 int f_omit,
int omit,
1112 int *line_types,
int nb_line_types,
1117 int f_omit,
int omit,
1118 int *line_types,
int nb_line_types,
1119 int eqn_start,
int &nb_eqns_used);
1123 int lambda3,
int block_size,
1124 int *&point_types,
int &nb_point_types,
int &point_type_len,
1125 int *&distributions,
int &nb_distributions);
1127 int lambda3,
int block_size,
int lambda2,
1130 int &nb_vars,
int &nb_eqns,
1131 int *&point_types,
int &nb_point_types);
1133 int lambda3,
int block_size,
int lambda2,
1135 int nb_vars,
int &Nb_vars,
int &Nb_eqns,
1136 int *&point_types,
int &nb_point_types);
1138 int lambda3,
int block_size,
int lambda2,
int &S,
1140 int nb_vars,
int Nb_vars,
1141 int *&point_types,
int &nb_point_types,
int eqn_offset);
1143 int lambda3,
int block_size,
1144 int f_scale,
int scaling,
1145 int *&line_types,
int &nb_line_types,
int &line_type_len,
1146 int *&distributions,
int &nb_distributions);
1148 int lambda3,
int block_size,
int lambda2,
1151 int &nb_vars,
int &nb_eqns,
1152 int *&line_types,
int &nb_line_types);
1154 int lambda3,
int block_size,
int lambda2,
int f_scale,
int scaling,
1156 int nb_vars,
int &Nb_vars,
int &Nb_eqns,
1157 int *&line_types,
int &nb_line_types);
1159 int lambda3,
int block_size,
1161 int nb_vars,
int Nb_vars,
1162 int *&line_types,
int &nb_line_types,
int eqn_offset);
1164 int lambda3,
int block_size,
int lambda2,
1166 int nb_vars,
int Nb_vars,
1167 int *&line_types,
int &nb_line_types,
int eqn_offset);
1169 int lambda3,
int block_size,
int lambda2,
int &S,
1171 int nb_vars,
int Nb_vars,
1172 int *&line_types,
int &nb_line_types,
int eqn_offset);
1175 int lambda3,
int block_size,
int lambda2,
1177 int nb_vars,
int Nb_vars,
1178 int *&line_types,
int &nb_line_types,
int eqn_offset);
1180 int lambda3,
int block_size,
int lambda2,
1182 int nb_vars,
int Nb_vars,
1183 int *&line_types,
int &nb_line_types,
int eqn_offset);
1185 int lambda3,
int block_size,
int lambda2,
1187 int nb_vars,
int Nb_vars,
1188 int *&line_types,
int &nb_line_types,
int eqn_offset);
void setup_polynomial_rings(int verbose_level)
field_theory::finite_field * Fq
void raise(int *in, int *out)
void evaluate(int *coeff, int *f)
void evaluate_projectively(int *coeff, int *f)
void init(int n, int verbose_level)
void apply_Walsh_transform(int *in, int *out)
~boolean_function_domain()
ring_theory::longinteger_object * NN
boolean_function_domain()
ring_theory::homogeneous_polynomial_domain * Poly
void compute_polynomial_representation(int *func, int *coeff, int verbose_level)
int rank(int f_vertical, int x0, int y0, int verbose_level)
void unrank_coordinates(int rk, int &x1, int &y1, int &x2, int &y2, int verbose_level)
field_theory::finite_field * F
void unrank(int rk, int &f_vertical, int &x0, int &y0, int verbose_level)
int rank_coordinates(int x1, int y1, int x2, int y2, int verbose_level)
void init(field_theory::finite_field *F, int verbose_level)
description of a classification of objects using class classification_of_objects
int f_save_classification
int read_arguments(int argc, std::string *argv, int verbose_level)
int f_save_canonical_labeling
int f_classification_prefix
std::string classification_prefix
~classification_of_objects_description()
classification_of_objects_description()
options for the report for a classification of combinatorial objects
int f_show_incidence_matrices
classification_of_objects_report_options()
int read_arguments(int argc, std::string *argv, int verbose_level)
~classification_of_objects_report_options()
std::string lex_least_geometry_builder
classification of combinatorial objects using a graph-theoretic approach
classification_of_objects()
~classification_of_objects()
data_structures::data_input_stream * IS
classification_of_objects_description * Descr
data_structures::classify_bitvectors * CB
geometry::object_with_canonical_form ** OWCF_transversal
void report_all_isomorphism_types(std::ostream &fp, int max_TDO_depth, int f_show_incma, int verbose_level)
data_structures::nauty_output ** NO_transversal
void report_object(std::ostream &fp, geometry::object_with_canonical_form *OwCF, int object_idx, int max_TDO_depth, int f_show_incma, int verbose_level)
long int * Ago_transversal
int process_object(geometry::object_with_canonical_form *OwCF, long int &ago, int &iso_idx_if_found, data_structures::nauty_output *&NO, int verbose_level)
void report_isomorphism_type(std::ostream &fp, int i, int max_TDO_depth, int f_show_incma, int verbose_level)
void process_any_object(geometry::object_with_canonical_form *OwCF, int input_idx, long int &ago, int &f_reject, data_structures::nauty_output *&NO, int verbose_level)
void perform_classification(classification_of_objects_description *Descr, int f_projective_space, geometry::projective_space *P, data_structures::data_input_stream *IS, int verbose_level)
void save_automorphism_group_order(int verbose_level)
void classify_objects_using_nauty(int verbose_level)
data_structures::tally * T_Ago
geometry::projective_space * P
void report_summary_of_orbits(std::ostream &fp, int verbose_level)
void save_transversal(int verbose_level)
a collection of combinatorial functions
void size_of_conjugacy_class_in_sym_n(ring_theory::longinteger_object &a, int n, int *part)
int philip_hall_test(int *A, int n, int k, int *memo, int verbose_level)
void set_delete_element(int *elts, int &size, int a)
void subset_permute_up_front(int n, int k, int *set, int *k_subset_idx, int *permuted_set)
void q_binomial_with_table(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
void unrank_subset(int *set, int &sz, int n, int r)
int disjoint_binary_representation(int u, int v)
void create_incidence_matrix_of_graph(int *Adj, int n, int *&M, int &nb_rows, int &nb_cols, int verbose_level)
long int ij2k_lint(long int i, long int j, long int n)
void binomial(ring_theory::longinteger_object &a, int n, int k, int verbose_level)
int is_permutation(int *perm, long int n)
void perm_print_with_print_point_function(std::ostream &ost, int *a, int n, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
int unordered_triple_pair_rank(int i, int j, int k, int l, int m, int n)
int compare_lexicographically(int a_len, long int *a, int b_len, long int *b)
void ordered_pair_unrank(int rk, int &i, int &j, int n)
void perm_print_offset(std::ostream &ost, int *a, int n, int offset, int f_print_cycles_of_length_one, int f_cycle_length, int f_max_cycle_length, int max_cycle_length, int f_orbit_structure, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
int next_lehmercode(int n, int *v)
int first_k_subset(int *set, int n, int k)
void do_parameters_arc(int q, int s, int r, int verbose_level)
void perm_inverse(int *a, int *b, long int n)
int is_subset_of(int *A, int sz_A, int *B, int sz_B)
void binomial_with_table(ring_theory::longinteger_object &a, int n, int k)
void unrank_subset_recursion(int *set, int &sz, int n, int a0, int &r)
void make_partitions(int n, int *Part, int cnt)
void set_complement_lint(long int *subset, int subset_size, long int *complement, int &size_complement, int universal_set_size)
int minus_one_if_positive(int i)
int partition_first(int *v, int n)
void unrank_k_subset(int rk, int *set, int n, int k)
long int binomial3(int a)
int rank_subset(int *set, int sz, int n)
void do_tdo_print(std::string &fname, int verbose_level)
int rank_k_subset(int *set, int n, int k)
void make_elementary_symmetric_functions(int n, int k_max, int verbose_level)
void q_binomial_no_table(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
int create_roots_H4(field_theory::finite_field *F, int *roots)
void k2ij(int k, int &i, int &j, int n)
long int generalized_binomial(int n, int k, int q)
int ordered_pair_rank(int i, int j, int n)
int f_is_subset_of(int v, int t, int k, int rk_t_subset, int rk_k_subset)
int set_find(int *elts, int size, int a)
void set_complement_safe(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
int next_k_subset_at_level(int *set, int n, int k, int backtrack_level)
void perm_raise(int *a, int *b, int e, long int n)
void print_tableau(int *Tableau, int l1, int l2, int *row_parts, int *col_parts)
void do_tdo_refinement(tdo_refinement_description *Descr, int verbose_level)
void do_read_poset_file(std::string &fname, int f_grouping, double x_stretch, int verbose_level)
int int_vec_first_regular_word(int *v, int len, int q)
void set_add_element(int *elts, int &size, int a)
void perm_print_product_action(std::ostream &ost, int *a, int m_plus_n, int m, int offset, int f_cycle_length)
int partition_next(int *v, int n)
void partition_print(std::ostream &ost, int *v, int n)
void perm_conjugate(int *a, int *b, int *c, long int n)
void perm_print_counting_from_one(std::ostream &ost, int *a, int n)
void print_01_matrix_with_stars(std::ostream &ost, int *A, int m, int n)
int count_all_partitions_of_n(int n)
int perm_is_identity(int *a, long int n)
void random_permutation(int *random_permutation, long int n)
void unordered_triple_pair_unrank(int rk, int &i, int &j, int &k, int &l, int &m, int &n)
void krawtchouk_with_table(ring_theory::longinteger_object &a, int n, int q, int k, int x)
void perm_cycle_type(int *perm, long int degree, int *cycles, int &nb_cycles)
int set_partition_4_into_2_rank(int *v)
int philip_hall_test_dual(int *A, int n, int k, int *memo, int verbose_level)
void first_lehmercode(int n, int *v)
long int int_n_choose_k(int n, int k)
void perm_print_list_offset(std::ostream &ost, int *a, int n, int offset)
void convert_stack_to_tdo(std::string &stack_fname, int verbose_level)
void do_make_tree_of_all_k_subsets(int n, int k, int verbose_level)
void Dedekind_numbers(int n_min, int n_max, int q_min, int q_max, int verbose_level)
void set_delete_elements(int *elts, int &size, int *elts_to_delete, int nb_elts_to_delete)
void create_random_permutation(int deg, std::string &fname_csv, int verbose_level)
int is_permutation_lint(long int *perm, long int n)
void perm_direct_product(long int n1, long int n2, int *perm1, int *perm2, int *perm3)
void ijk_unrank(int &i, int &j, int &k, int n, int rk)
int int_vec_is_regular_word(int *v, int len, int q)
void int_vec_splice(int *v, int *w, int len, int p)
void perm_move(int *from, int *to, long int n)
int int_vec_next_regular_word(int *v, int len, int q)
void partition_dual(int *part, int *dual_part, int n, int verbose_level)
void perm_print_with_cycle_length(std::ostream &ost, int *a, int n)
void do_parameters_maximal_arc(int q, int r, int verbose_level)
void krawtchouk(ring_theory::longinteger_object &a, int n, int q, int k, int x)
void perm_print_list(std::ostream &ost, int *a, int n)
void compute_blocks(int v, int b, int k, long int *Blocks_coded, int *&Blocks, int verbose_level)
void set_complement(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
void free_tab_q_binomials()
int hall_test(int *A, int n, int kmax, int *memo, int verbose_level)
void make_t_k_incidence_matrix(int v, int t, int k, int &m, int &n, int *&M, int verbose_level)
long int largest_binomial2_below(int a2)
void perm_mult(int *a, int *b, int *c, long int n)
int perm_signum(int *perm, long int n)
int ijk_rank(int i, int j, int k, int n)
int perm_order(int *a, long int n)
int ijk2h(int i, int j, int k, int n)
void unrank_k_subset_and_complement(int rk, int *set, int n, int k)
void perm_print(std::ostream &ost, int *a, int n)
int ij2k(int i, int j, int n)
void set_add_elements(int *elts, int &size, int *elts_to_add, int nb_elts_to_add)
void h2ijk(int h, int &i, int &j, int &k, int n)
void make_all_partitions_of_n(int n, int *&Table, int &nb, int verbose_level)
void refine_the_partition(int v, int k, int b, long int *Blocks_coded, int &b_reduced, int verbose_level)
void rank_subset_recursion(int *set, int sz, int n, int a0, int &r)
void q_binomial(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
long int largest_binomial3_below(int a3)
long int binomial2(int a)
int count_partitions(int n)
int next_k_subset(int *set, int n, int k)
void print_int_matrix(std::ostream &ost, int *A, int m, int n)
int Kung_mue_i(int *part, int i, int m)
void perm_identity(int *a, long int n)
void k2ij_lint(long int k, long int &i, long int &j, long int n)
int next_partition(int n, int *part)
void set_partition_4_into_2_unrank(int rk, int *v)
void compute_incidence_matrix(int v, int b, int k, long int *Blocks_coded, int *&M, int verbose_level)
long int binomial_lint(int n, int k)
void perm_elementary_transposition(int *a, long int n, int f)
void print_k_subsets_by_rank(std::ostream &ost, int v, int k)
void lehmercode_to_permutation(int n, int *code, int *perm)
encoding of combinatorial object for use with nauty
~encoded_combinatorial_object()
void set_incidence(int a)
void latex_TDA(std::ostream &ost, int nb_orbits, int *orbit_first, int *orbit_len, int *orbit, int verbose_level)
void compute_canonical_form(data_structures::bitvector *&Canonical_form, int *canonical_labeling, int verbose_level)
void latex_canonical_form(std::ostream &ost, data_structures::nauty_output *NO, int verbose_level)
void apply_canonical_labeling_and_get_flags(int *&Inc2, int *&Flags, int &nb_flags_counted, data_structures::nauty_output *NO)
int get_incidence_ij(int i, int j)
void init_canonical_form(encoded_combinatorial_object *Enc, data_structures::nauty_output *NO, int verbose_level)
void set_incidence_ij(int i, int j)
int canonical_labeling_len
void compute_canonical_incma(int *canonical_labeling, int *&Incma_out, int verbose_level)
void latex_set_system_by_columns(std::ostream &ost, int verbose_level)
void latex_incma(std::ostream &ost, int verbose_level)
void latex_canonical_form_with_labels(std::ostream &ost, data_structures::nauty_output *NO, std::string *row_labels, std::string *col_labels, int verbose_level)
void latex_set_system_by_rows(std::ostream &ost, int verbose_level)
encoded_combinatorial_object()
void init(int nb_rows, int nb_cols, int verbose_level)
void latex_TDA_with_labels(std::ostream &ost, int nb_orbits, int *orbit_first, int *orbit_len, int *orbit, int verbose_level)
void canonical_form_given_canonical_labeling(int *canonical_labeling, data_structures::bitvector *&B, int verbose_level)
void incidence_matrix_projective_space_top_left(geometry::projective_space *P, int verbose_level)
void apply_canonical_labeling(int *&Inc2, data_structures::nauty_output *NO)
void extended_incidence_matrix_projective_space_top_left(geometry::projective_space *P, int verbose_level)
void init_everything(int nb_rows, int nb_cols, int *Incma, int *partition, int verbose_level)
decomposition stack of a linear space or incidence geometry
int input_mode_single(std::ifstream &aStream)
void write(std::ofstream &aStream, std::string &label)
void convert_single_to_stack(int verbose_level)
void write_mode_stack(std::ofstream &aStream, std::string &label)
int partition_number_row(int row_idx)
void append_to_part(int a)
int input(std::ifstream &aStream)
int partition_number_col(int col_idx)
void cut_off(geo_parameter &GP2, int w, int *&part_relabel, int *&part_length, int verbose_level)
int input_mode_stack(std::ifstream &aStream, int verbose_level)
void print_scheme_tex(std::ostream &ost, tdo_scheme_synthetic &G, int h)
void convert_single_to_stack_fuse_simple_pt(int verbose_level)
int tdo_scheme_get_row_class_length_fused(tdo_scheme_synthetic &G, int h, int class_first, int class_len)
void copy(geo_parameter &GP2)
void append_to_entries(int a1, int a2, int a3, int a4)
void convert_single_to_stack_fuse_double_pt(int verbose_level)
void print_schemes_tex(tdo_scheme_synthetic &G)
int tdo_scheme_get_col_class_length_fused(tdo_scheme_synthetic &G, int h, int class_first, int class_len)
void init_tdo_scheme(tdo_scheme_synthetic &G, int verbose_level)
void convert_single_to_stack_fuse_simple_bt(int verbose_level)
void write_mode_single(std::ofstream &aStream, std::string &label)
void cut_off_two_lines(geo_parameter &GP2, int *&part_relabel, int *&part_length, int verbose_level)
generate all solutions of the pentomino puzzle
int code_piece(int h, int r, int t)
int has_interlocking_Lprime(long int *set)
void decode_assembly(long int *set)
void main(int verbose_level)
int var_start[NB_PIECES+1]
int has_interlocking_Pprime(long int *set)
int test_if_interlocking_Ls(int a1, int a2)
void compute_image_function(data_structures::set_of_sets *S, int elt_idx, int gen_idx, int &idx_of_image, int verbose_level)
void turn_piece(int &h, int &r, int &t, int verbose_level)
int var_length[NB_PIECES+1]
int has_interlocking_Ls(long int *set)
void decode_piece(int j, int &h, int &r, int &t)
void draw_it(std::ostream &ost, long int *sol)
void flip_piece(int &h, int &r, int &t, int verbose_level)
void make_coefficient_matrix(solvers::diophant *D)
int has_interlocking_Ps(long int *set)
int number_of_pieces_of_type(int t, long int *set)
int test_if_interlocking_Ps(int a1, int a2)
int does_it_contain_an_I(long int *set)
a class related to the class tdo_scheme
void solve_second_system_with_help(int verbose_level, int f_use_mckay_solver, int f_once, int *classes_len, int f_scale, int scaling, int *&line_types, int &nb_line_types, int *&distributions, int &nb_distributions, int cnt_second_system, solution_file_data *Sol)
void solve_second_system(int verbose_level, int f_use_mckay_solver, int f_once, int *classes_len, int f_scale, int scaling, int *&line_types, int &nb_line_types, int *&distributions, int &nb_distributions)
int solve_first_system(int verbose_level, int *&line_types, int &nb_line_types, int &line_types_allocated)
void solve_second_system_from_file(int verbose_level, int *classes_len, int f_scale, int scaling, int *&line_types, int &nb_line_types, int *&distributions, int &nb_distributions, std::string &solution_file_name)
void solve_second_system_omit(int verbose_level, int *classes_len, int *&line_types, int &nb_line_types, int *&distributions, int &nb_distributions, int omit)
refinement of the parameters of a linear space
int f_do_the_geometric_test
int read_arguments(int argc, std::string *argv, int verbose_level)
int f_dual_is_linear_space
tdo_refinement_description()
~tdo_refinement_description()
int f_use_packing_numbers
refinement of the parameters of a linear space
void init(tdo_refinement_description *Descr, int verbose_level)
void do_all_column_refinements(std::string &label_in, std::ofstream &g, tdo_scheme_synthetic &G, int *line_types, int nb_line_types, int line_type_len, int *distributions, int nb_distributions, int &nb_tactical, int verbose_level)
void do_all_row_refinements(std::string &label_in, std::ofstream &g, tdo_scheme_synthetic &G, int *point_types, int nb_point_types, int point_type_len, int *distributions, int nb_distributions, int &nb_tactical, int verbose_level)
int do_column_refinement(int t, std::string &label_in, std::ofstream &g, tdo_scheme_synthetic &G, int *line_types, int nb_line_types, int line_type_len, int *distributions, int nb_distributions, int verbose_level)
void do_col_refinement(std::ofstream &g, tdo_scheme_synthetic &G, data_structures::partitionstack &P, int verbose_level)
void do_row_refinement(std::ofstream &g, tdo_scheme_synthetic &G, data_structures::partitionstack &P, int verbose_level)
void main_loop(int verbose_level)
tdo_refinement_description * Descr
void do_it(std::ofstream &g, int verbose_level)
int do_row_refinement(int t, std::string &label_in, std::ofstream &g, tdo_scheme_synthetic &G, int *point_types, int nb_point_types, int point_type_len, int *distributions, int nb_distributions, int verbose_level)
tactical decomposition of an incidence structure obtained by refinement
void init(encoded_combinatorial_object *Enc, int max_depth, int verbose_level)
geometry::decomposition * Decomp
encoded_combinatorial_object * Enc
void print_schemes(std::ostream &ost)
canonical tactical decomposition of an incidence structure
int * row_class_index[NUMBER_OF_SCHEMES]
int * col_class_no[NUMBER_OF_SCHEMES]
int geometric_test_for_row_scheme(data_structures::partitionstack &P, int *point_types, int nb_point_types, int point_type_len, int *distributions, int nb_distributions, int f_omit1, int omit1, int verbose_level)
int td3_columns_setup_first_system(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int r, data_structures::partitionstack &P, int &nb_vars, int &nb_eqns, int *&line_types, int &nb_line_types)
int * row_classes[NUMBER_OF_SCHEMES]
int td3_refine_rows(int verbose_level, int f_once, int lambda3, int block_size, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions)
void get_row_or_col_scheme(int h, int l, int verbose_level)
int tdo_rows_setup_second_system_eqns_joining(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int f_dual_is_linear_space, int *point_types, int nb_point_types, int eqn_offset)
int td3_rows_counting_flags(int verbose_level, int lambda3, int block_size, int lambda2, int &S, tdo_data &T, int nb_vars, int Nb_vars, int *&point_types, int &nb_point_types, int eqn_offset)
int td3_refine_columns(int verbose_level, int f_once, int lambda3, int block_size, int f_scale, int scaling, int *&line_types, int &nb_line_types, int &line_type_len, int *&distributions, int &nb_distributions)
int count_nb_inc_from_extra_row_scheme(int verbose_level)
int td3_columns_counting_flags(int verbose_level, int lambda3, int block_size, int lambda2, int &S, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int * the_extra_row_scheme
int refine_columns(int verbose_level, int f_once, data_structures::partitionstack &P, int *&line_types, int &nb_line_types, int &line_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, solution_file_data *Sol, int f_omit1, int omit1, int f_omit, int omit, int f_D1_upper_bound_x0, int D1_upper_bound_x0, int f_use_mckay_solver, int f_use_packing_numbers)
int tdo_columns_setup_second_system_eqns_upper_bound(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *line_types, int nb_line_types, int eqn_start, int &nb_eqns_used)
void tdo_columns_setup_second_system_eqns_counting(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *line_types, int nb_line_types, int eqn_start)
int refine_cols_hard(data_structures::partitionstack &P, int verbose_level, int f_once, int *&line_types, int &nb_line_types, int &line_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, solution_file_data *Sol, int f_omit1, int omit1, int f_omit, int omit, int f_D1_upper_bound_x0, int D1_upper_bound_x0, int f_use_mckay_solver, int f_use_packing_numbers)
int nb_col_classes[NUMBER_OF_SCHEMES]
void row_refinement_L1_L2(data_structures::partitionstack &P, int f_omit, int omit, int &L1, int &L2, int verbose_level)
void get_column_split_partition(int verbose_level, data_structures::partitionstack &P)
int tdo_columns_setup_second_system_eqns_joining(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *line_types, int nb_line_types, int eqn_start)
int * col_classes_len[NUMBER_OF_SCHEMES]
int td3_rows_setup_second_system(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int &Nb_vars, int &Nb_eqns, int *&point_types, int &nb_point_types)
void get_partition(int h, int l, int verbose_level)
void column_refinement_L1_L2(data_structures::partitionstack &P, int f_omit, int omit, int &L1, int &L2, int verbose_level)
void exit_partition_stack()
int * the_extra_col_scheme
void print_scheme_tex_fancy(std::ostream &ost, int h, int f_label, std::string &label)
int td3_columns_setup_second_system(int verbose_level, int lambda3, int block_size, int lambda2, int f_scale, int scaling, tdo_data &T, int nb_vars, int &Nb_vars, int &Nb_eqns, int *&line_types, int &nb_line_types)
int * the_extra_col_scheme_cur
int * row_classes_first[NUMBER_OF_SCHEMES]
void print_scheme_tex(std::ostream &ost, int h)
void get_row_split_partition(int verbose_level, data_structures::partitionstack &P)
void print_scheme(int h, int verbose_level)
int count_nb_inc_from_row_scheme(int verbose_level)
int * col_classes_first[NUMBER_OF_SCHEMES]
int geometric_test_for_row_scheme_level_s(data_structures::partitionstack &P, int s, int *point_types, int nb_point_types, int point_type_len, int *distribution, int *non_zero_blocks, int nb_non_zero_blocks, int f_omit1, int omit1, int verbose_level)
int * the_extra_row_scheme_cur
int td3_rows_setup_first_system(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int r, data_structures::partitionstack &P, int &nb_vars, int &nb_eqns, int *&point_types, int &nb_point_types)
int refine_rows_hard(data_structures::partitionstack &P, int verbose_level, int f_use_mckay, int f_once, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, int f_omit1, int omit1, int f_omit, int omit, int f_use_packing_numbers, int f_dual_is_linear_space)
data_structures::partitionstack * P
void init_TDO(int *Part, int *Entries, int Row_level, int Col_level, int Extra_row_level, int Extra_col_level, int Lambda_level, int verbose_level)
int td3_columns_triples_same_class(int verbose_level, int lambda3, int block_size, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int tdo_rows_setup_first_system(int verbose_level, tdo_data &T, int r, data_structures::partitionstack &P, int f_omit, int omit, int *&point_types, int &nb_point_types)
int tdo_rows_setup_second_system(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int f_use_packing_numbers, int f_dual_is_linear_space, int *&point_types, int &nb_point_types)
int td3_columns_lambda3_joining_triples_2_1(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int td3_columns_lambda3_joining_triples_1_1_1(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int refine_rows_easy(int verbose_level, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system)
int * col_classes[NUMBER_OF_SCHEMES]
int nb_row_classes[NUMBER_OF_SCHEMES]
void init_part_and_entries_int(int *part, int *entries, int verbose_level)
int level[NUMBER_OF_SCHEMES]
int tdo_columns_setup_first_system(int verbose_level, tdo_data &T, int r, data_structures::partitionstack &P, int f_omit, int omit, int *&line_types, int &nb_line_types)
int * row_class_no[NUMBER_OF_SCHEMES]
int * row_classes_len[NUMBER_OF_SCHEMES]
void free_partition(int h)
int tdo_rows_setup_second_system_eqns_packing(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *point_types, int nb_point_types, int eqn_start, int &nb_eqns_used)
int * col_class_index[NUMBER_OF_SCHEMES]
void init_partition_stack(int verbose_level)
void complete_partition_info(int h, int verbose_level)
int refine_rows(int verbose_level, int f_use_mckay, int f_once, data_structures::partitionstack &P, int *&point_types, int &nb_point_types, int &point_type_len, int *&distributions, int &nb_distributions, int &cnt_second_system, solution_file_data *Sol, int f_omit1, int omit1, int f_omit2, int omit2, int f_use_packing_numbers, int f_dual_is_linear_space, int f_do_the_geometric_test)
int tdo_columns_setup_second_system(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int f_use_packing_numbers, int *&line_types, int &nb_line_types)
void init_part_and_entries(int *part, int *entries, int verbose_level)
int tdo_rows_setup_second_system_eqns_counting(int verbose_level, tdo_data &T, data_structures::partitionstack &P, int f_omit, int omit, int *point_types, int nb_point_types, int eqn_offset)
void compute_whether_first_inc_must_be_moved(int *f_first_inc_must_be_moved, int verbose_level)
int td3_columns_lambda2_joining_pairs_from_different_classes(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
int td3_columns_pairs_same_class(int verbose_level, int lambda3, int block_size, int lambda2, tdo_data &T, int nb_vars, int Nb_vars, int *&line_types, int &nb_line_types, int eqn_offset)
compact storage of 0/1-data as bitvectors
classification of 0/1 matrices using canonical forms
output data created by a run of nauty
data structure for set partitions following Jeffrey Leon
a statistical analysis of data consisting of single integers
decomposition of an incidence matrix
projective space PG(n,q) of dimension n over Fq
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
a class to represent arbitrary precision integers
diophantine systems of equations (i.e., linear systems over the integers)
#define NUMBER_OF_SCHEMES
the orbiter library for the classification of combinatorial objects
internal class related to tdo_data
std::vector< int > system_no
std::vector< std::string > solution_file