11#ifndef ORBITER_SRC_LIB_TOP_LEVEL_ISOMORPH_ISOMORPH_H_
12#define ORBITER_SRC_LIB_TOP_LEVEL_ISOMORPH_ISOMORPH_H_
16namespace layer4_classification {
221 data_structures_groups::union_find *
UF;
300 int iso_cnt, groups::sims *Stab, groups::schreier &Orb,
317 actions::action *
A_base, actions::action *
A,
321 int f_implicit_fusion,
int verbose_level);
329 data_structures_groups::vector_ge &gens,
int verbose_level);
342 std::string &
prefix,
int verbose_level);
355 ring_theory::longinteger_object *&Ago_induced,
int verbose_level);
358 int size, std::string &prefix_classify, std::string &
prefix,
359 int level,
int verbose_level);
368 void probe(
int flag_orbit,
int subset_rk,
369 int f_implicit_fusion,
int verbose_level);
371 std::string &play_back_file_name,
372 int f_implicit_fusion,
int print_mod,
int verbose_level);
378 int f_play_back, std::ifstream *play_back_file,
379 int &f_eof,
int print_mod,
380 int f_implicit_fusion,
int verbose_level);
382 int &f_continue, groups::sims *Stab,
long int *data,
383 int f_play_back, std::ifstream *play_back_file,
int &f_eof,
386 int f_implicit_fusion,
int verbose_level);
395 int identify(
long int *set,
int f_implicit_fusion,
398 int f_implicit_fusion,
int verbose_level);
400 long int *set,
int verbose_level);
402 long int *set,
int verbose_level);
412 groups::sims *Stab,
int *Elt,
int verbose_level);
435 int nb,
int id,
int no,
436 int nb_solutions,
int h,
uint_4 &datref,
437 int print_mod,
int verbose_level);
440 int idx,
int &
id,
long int *data);
442 int case_nb,
int &idx,
int verbose_level);
449 int first,
int len,
int &idx,
450 int f_btree_idx,
int btree_idx,
451 int f_through_hash,
int verbose_level);
453 int case_nb,
int &idx,
int verbose_level);
455 int case_nb,
int &idx,
int verbose_level);
458 int f_implicit_fusion,
int verbose_level);
464 data_structures_groups::vector_ge &gens,
465 ring_theory::longinteger_object &go,
471 data_structures_groups::vector_ge &gens,
472 ring_theory::longinteger_object &go,
476 data_structures_groups::vector_ge &gens,
477 ring_theory::longinteger_object &go,
485 int f_implicit_fusion,
int &
orbit_no,
486 int &f_failure_to_find_point,
493 int f_implicit_fusion,
int &f_failure_to_find_point,
500 int f_implicit_fusion,
int &f_failure_to_find_point,
507 long int *set,
int *
transporter,
int verbose_level);
521 int f_implicit_fusion,
522 int &f_failure_to_find_point,
int verbose_level);
530 int f_implicit_fusion,
531 int &f_failure_to_find_point,
int verbose_level);
544 int f_implicit_fusion,
545 int &f_failure_to_find_point,
int verbose_level);
549 int f_implicit_fusion,
550 int &f_failure_to_find_point,
555 int f_implicit_fusion,
556 int &f_failure_to_find_point,
573 int *Nb_sol,
int verbose_level);
576 long int *list_of_cases, std::string *fname,
582 long int *list_of_cases, std::string *fname,
585 std::string *fname,
int verbose_level);
587 int the_case,
int nb_solutions,
int nb_solutions_total,
588 int print_mod,
int &no,
591 int f_has_final_test_function,
592 int (*final_test_function)(
long int *data,
int sz,
593 void *final_test_data,
int verbose_level),
594 void *final_test_data,
597 int modulus,
int level,
598 int f_collated,
int base_split,
599 int f_get_statistics,
600 int f_has_final_test_function,
601 int (*final_test_function)(
long int *data,
int sz,
602 void *final_test_data,
int verbose_level),
603 void *final_test_data,
606 int nb_Mod,
int *Mod_r,
int *Mod_split,
int *Mod_base_split,
607 int level,
int f_get_statistics,
608 int f_has_final_test_function,
609 int (*final_test_function)(
long int *data,
int sz,
610 void *final_test_data,
int verbose_level),
611 void *final_test_data,
615 int f_get_statistics,
616 int f_has_final_test_function,
617 int (*final_test_function)(
long int *data,
int sz,
618 void *final_test_data,
int verbose_level),
619 void *final_test_data,
626 int &total_days,
int &total_hours,
int &total_minutes,
627 int f_has_final_test_function,
628 int (*final_test_function)(
long int *data,
int sz,
629 void *final_test_data,
int verbose_level),
630 void *final_test_data,
658 int select_first,
int select_len,
662 actions::action *
A, groups::sims *Stab,
int size,
long int *set,
665 const char **event_file_name,
int verbose_level);
671 int case_no,
int orbit_no,
int verbose_level);
673 int &nb_completed_cases,
int *completed_cases,
676 int case_no,
int verbose_level);
678 int case_no,
int verbose_level);
680 std::ifstream *play_back_file,
681 int &f_eof,
int verbose_level);
683 std::string &prefix_classify,
int verbose_level);
755 void init(actions::action *
A, actions::action *
A2,
801 void init(actions::action *
A_base, actions::action *
A,
805 int size, std::string &prefix_classify,
806 std::string &prefix,
int level,
807 std::string *fname,
int nb_files,
810 int size, std::string &prefix_classify,
811 std::string &prefix_iso,
int level,
814 int size, std::string &prefix_classify,
815 std::string &prefix_iso,
int level,
816 std::string *fname,
int nb_files,
817 int f_has_final_test_function,
818 int (*final_test_function)(
long int *data,
int sz,
819 void *final_test_data,
int verbose_level),
820 void *final_test_data,
823 int size, std::string &prefix_classify,
824 std::string &prefix_iso,
int level,
825 int **Solutions,
int *Nb_sol,
int verbose_level);
827 int size, std::string &prefix_classify, std::string &prefix_iso,
int level,
828 std::string *fname,
long int *list_of_cases,
int nb_files,
int verbose_level);
830 int size, std::string &prefix_classify, std::string &prefix_iso,
int level,
831 std::string *fname,
int nb_files,
int verbose_level);
833 int size, std::string &prefix_classify,
834 std::string &prefix_iso,
int level,
int verbose_level);
836 int size, std::string &prefix_classify,
837 std::string &prefix_iso,
int level,
838 int f_play_back, std::string &old_event_file,
839 int print_mod,
int verbose_level);
841 int size, std::string &prefix_classify,
842 std::string &prefix_iso,
int level,
845 int size, std::string &prefix_classify,
846 std::string &prefix_iso,
int level,
847 int identify_nb_files, std::string *fname,
int *Iso_type,
848 int f_save,
int verbose_level);
850 int size, std::string &prefix_classify,
851 std::string &prefix_iso,
int level,
852 int nb_rows,
long int *Table,
int *Iso_type,
855 int size, std::string &prefix_classify, std::string &prefix_iso,
856 void (*work_callback)(
isomorph *Iso,
void *data,
int verbose_level),
858 int level,
int verbose_level);
860 int size, std::string &prefix_classify, std::string &prefix,
861 int level,
int verbose_level);
864 int &cnt_orbits,
int &cnt_special_orbits,
865 int *&special_orbit_identify,
int verbose_level);
868 char *label_of_structure_plural, std::ostream &f,
872 char *label_of_structure_plural, std::ostream &fp,
873 int selection_size,
int *selection,
944 void save(
int verbose_level);
945 void load(
int verbose_level);
DISCRETA class for a database.
command line arguments to control the lifting via exact cover
auxiliary class for class isomorph
int f_classification_graph
int read_arguments(int argc, std::string *argv, int verbose_level)
int(* final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level)
poset_classification::poset_classification_control * Control
int f_init_has_been_called
std::string fname_list_of_cases
poset_classification::poset_classification * gen
int f_read_statistics_after_split
int f_read_solutions_from_clique_finder_list_of_cases
int read_solutions_split_m
void init(actions::action *A, actions::action *A2, poset_classification::poset_classification *gen, int target_size, poset_classification::poset_classification_control *Control, exact_cover_arguments *ECA, void(*callback_report)(isomorph *Iso, void *data, int verbose_level), void(*callback_subset_orbits)(isomorph *Iso, void *data, int verbose_level), void *callback_data, int verbose_level)
int f_read_solutions_after_split
int f_read_solutions_from_clique_finder
int f_has_final_test_function
exact_cover_arguments * ECA
void(* callback_subset_orbits)(isomorph *Iso, void *data, int verbose_level)
std::string prefix_with_directory
std::string event_file_name
int f_prefix_with_directory
void(* callback_report)(isomorph *Iso, void *data, int verbose_level)
int f_eliminate_graphs_if_possible
std::string subset_orbits_fname
auxiliary class for class isomorph
void report_data_in_source_code_inside_tex(isomorph &Iso, const char *prefix, char *label_of_structure_plural, std::ostream &f, int verbose_level)
void compute_down_orbits(int size, std::string &prefix_classify, std::string &prefix, int level, int verbose_level)
void read_solution_files(int size, std::string &prefix_classify, std::string &prefix_iso, int level, std::string *fname, int nb_files, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
void init_solutions_from_memory(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int **Solutions, int *Nb_sol, int verbose_level)
void read_solution_files_from_clique_finder(int size, std::string &prefix_classify, std::string &prefix_iso, int level, std::string *fname, int nb_files, int verbose_level)
void init(actions::action *A_base, actions::action *A, poset_classification::poset_classification *gen, int verbose_level)
void identify_table(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int nb_rows, long int *Table, int *Iso_type, int verbose_level)
void report_data_in_source_code_inside_tex_with_selection(isomorph &Iso, const char *prefix, char *label_of_structure_plural, std::ostream &fp, int selection_size, int *selection, int verbose_level)
void worker(int size, std::string &prefix_classify, std::string &prefix_iso, void(*work_callback)(isomorph *Iso, void *data, int verbose_level), void *work_data, int level, int verbose_level)
void build_db(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int verbose_level)
void read_statistic_files(int size, std::string &prefix_classify, std::string &prefix, int level, std::string *fname, int nb_files, int verbose_level)
poset_classification::poset_classification * gen
void compute_down_orbits_for_isomorphism_type(isomorph *Iso, int orbit, int &cnt_orbits, int &cnt_special_orbits, int *&special_orbit_identify, int verbose_level)
void identify(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int identify_nb_files, std::string *fname, int *Iso_type, int f_save, int verbose_level)
void compute_orbits(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int verbose_level)
void read_solution_files_from_clique_finder_case_by_case(int size, std::string &prefix_classify, std::string &prefix_iso, int level, std::string *fname, long int *list_of_cases, int nb_files, int verbose_level)
void classification_graph(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int verbose_level)
void isomorph_testing(int size, std::string &prefix_classify, std::string &prefix_iso, int level, int f_play_back, std::string &old_event_file, int print_mod, int verbose_level)
classification of combinatorial objects using subobjects
long int * rearranged_set
int trace_set_recursion(int cur_level, int cur_node_global, long int *canonical_set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void evaluate_statistics(int verbose_level)
void init_cases_from_file_modulus_and_build_up_database(int modulus, int level, int f_collated, int base_split, int f_get_statistics, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
int identify(long int *set, int f_implicit_fusion, int verbose_level)
void add_solution_to_database(long int *data, int nb, int id, int no, int nb_solutions, int h, uint_4 &datref, int print_mod, int verbose_level)
void write_hash_and_datref_file(int verbose_level)
void read_orbit_data(int verbose_level)
void write_classification_matrix(int verbose_level)
data_structures_groups::union_find * UF
int * make_set_smaller_Elt2
void read_solutions_from_clique_finder(int nb_files, std::string *fname, int verbose_level)
void init_starter_number(int verbose_level)
void isomorph_testing(int t0, int f_play_back, std::string &play_back_file_name, int f_implicit_fusion, int print_mod, int verbose_level)
void write_orbit_data(int verbose_level)
void add_solutions_to_database(int *Solutions, int the_case, int nb_solutions, int nb_solutions_total, int print_mod, int &no, int verbose_level)
int handle_automorphism(long int *set, groups::sims *Stab, int *Elt, int verbose_level)
void iso_test_init2(int verbose_level)
long int * find_extension_set1
int find_extension_easy_new(long int *set, int case_nb, int &idx, int verbose_level)
void read_solution_first_and_len()
int nb_times_make_set_smaller_called
int trace_set(long int *canonical_set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void setup_and_open_solution_database(int verbose_level)
void count_solutions_from_clique_finder_case_by_case(int nb_files, long int *list_of_cases, std::string *fname, int verbose_level)
ring_theory::longinteger_object stabilizer_group_order
int identify_solution(long int *set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void build_up_database(int nb_files, std::string *fname, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
groups::sims * stabilizer_recreated
std::string event_out_fname
int find_extension_search_interval(long int *set, int first, int len, int &idx, int f_btree_idx, int btree_idx, int f_through_hash, int verbose_level)
void compute_Ago_Ago_induced(ring_theory::longinteger_object *&Ago, ring_theory::longinteger_object *&Ago_induced, int verbose_level)
int * make_set_smaller_Elt1
void write_classification_graph(int verbose_level)
int f_use_implicit_fusion
void probe(int flag_orbit, int subset_rk, int f_implicit_fusion, int verbose_level)
void test_orbit_representative(int verbose_level)
void induced_action_on_set_and_kernel(std::ostream &file, actions::action *A, groups::sims *Stab, int size, long int *set, int verbose_level)
void event_file_read_case(const char *event_file_name, int case_no, int verbose_level)
void iso_test_init(int verbose_level)
void decomposition_matrix(int verbose_level)
void skip_through_event_file(std::ifstream &f, int verbose_level)
void read_starter_nb_orbits(int verbose_level)
int identify_solution_relaxed(long int *set, int *transporter, int f_implicit_fusion, int &orbit_no, int &f_failure_to_find_point, int verbose_level)
void read_data_files_for_starter(int level, std::string &prefix, int verbose_level)
void make_set_smaller(int case_nb_local, long int *set, int *transporter, int verbose_level)
void list_solutions_by_starter()
int f_use_database_for_starter
void load_strong_generators_database(int cur_level, int cur_node_local, data_structures_groups::vector_ge &gens, ring_theory::longinteger_object &go, int verbose_level)
void stabilizer_action_exit()
int is_minimal(int verbose_level)
void read_everything_including_classification(std::string &prefix_classify, int verbose_level)
void load_solution(int id, long int *data)
int find_extension_easy(long int *set, int case_nb, int &idx, int verbose_level)
void print_node_local(int level, int node_local)
void test_edges(int verbose_level)
void init_solution(int verbose_level)
void apply_isomorphism_oracle(int cur_level, int cur_node_global, int current_extension, long int *canonical_set, int *Elt_transporter, int verbose_level)
int ** stabilizer_generators
long int * rearranged_set_save
void induced_action_on_set(groups::sims *S, long int *set, int verbose_level)
void test_identify_solution(int verbose_level)
std::string fname_db_level_ge
void compute_nb_starter(int level, int verbose_level)
int * orbit_representative_Elt2
void load_strong_generators(int cur_level, int cur_node_local, data_structures_groups::vector_ge &gens, ring_theory::longinteger_object &go, int verbose_level)
void orbits_of_stabilizer_case(int the_case, data_structures_groups::vector_ge &gens, int verbose_level)
std::string fname_staborbits
void read_event_file(const char *event_file_name, int verbose_level)
void print_statistics_iso_test(int t0, groups::sims *Stab)
void write_solution_first_and_len()
std::string fname_db_level_idx2
void orbit_representative(int i, int &i0, int &orbit, int *transporter, int verbose_level)
void read_hash_and_datref_file(int verbose_level)
std::string fname_db_level
int test_edge(int n1, long int *subset1, int *transporter, int verbose_level)
int f_tmp_data_has_been_allocated
void event_file_completed_cases(const char *event_file_name, int &nb_completed_cases, int *completed_cases, int verbose_level)
poset_classification::poset_classification * gen
int * trace_set_recursion_Elt1
void compute_down_link(int *&down_link, int verbose_level)
void print_isomorphism_types(int f_select, int select_first, int select_len, int verbose_level)
void setup_and_open_level_database(int verbose_level)
void(* print_set_function)(isomorph *Iso, int iso_cnt, groups::sims *Stab, groups::schreier &Orb, long int *data, void *print_set_data, int verbose_level)
int stabilizer_nb_generators
actions::action * AA_on_k_subsets
void prepare_database_access(int cur_level, int verbose_level)
void write_starter_nb_orbits(int verbose_level)
int f_use_table_of_solutions
void setup_and_create_solution_database(int verbose_level)
void init(std::string &prefix, actions::action *A_base, actions::action *A, poset_classification::poset_classification *gen, int size, int level, int f_use_database_for_starter, int f_implicit_fusion, int verbose_level)
actions::action * AA_perm
void init_high_level(actions::action *A, poset_classification::poset_classification *gen, int size, std::string &prefix_classify, std::string &prefix, int level, int verbose_level)
void handle_event_files(int nb_event_files, const char **event_file_name, int verbose_level)
std::string fname_hash_and_datref
void apply_isomorphism_database(int cur_level, int cur_node_global, int current_extension, long int *canonical_set, int *Elt_transporter, int ref, int verbose_level)
void test_hash(int verbose_level)
void stabilizer_action_add_generator(int *Elt, int verbose_level)
void create_level_database(int level, int verbose_level)
int * handle_automorphism_Elt1
std::string fname_orbits_of_stabilizer_csv
void test_compute_stabilizer(int verbose_level)
void stabilizer_action_init(int verbose_level)
long int * trace_set_recursion_tmp_set1
void count_solutions2(int nb_files, std::string *fname, int &total_days, int &total_hours, int &total_minutes, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
void compute_stabilizer(groups::sims *&Stab, int verbose_level)
void process_rearranged_set(groups::sims *Stab, long int *data, int f_implicit_fusion, int verbose_level)
std::ofstream * fp_event_out
void init_solutions(int **Solutions, int *Nb_sol, int verbose_level)
int trace_next_point(int cur_level, int cur_node_global, long int *canonical_set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void close_level_database(int verbose_level)
void init_DB_sol(int verbose_level)
std::string fname_case_len
std::string fname_db_level_idx1
long int * make_set_smaller_set
void load_table_of_solutions(int verbose_level)
void load_solution_by_btree(int btree_idx, int idx, int &id, long int *data)
int handle_extension_oracle(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
int next_subset(int t0, int &f_continue, groups::sims *Stab, long int *data, int f_play_back, std::ifstream *play_back_file, int &f_eof, int verbose_level)
void init_cases_from_file_mixed_modulus_and_build_up_database(int nb_Mod, int *Mod_r, int *Mod_split, int *Mod_base_split, int level, int f_get_statistics, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
void event_file_read_case1(std::ifstream &f, int case_no, int verbose_level)
long int * table_of_solutions
std::string fname_statistics
void induced_action_on_set_basic(groups::sims *S, long int *set, int verbose_level)
void get_orbit_transversal(data_structures_groups::orbit_transversal *&T, int verbose_level)
void close_solution_database(int verbose_level)
std::string prefix_invariants
long int * subset_witness
int trace_next_point_database(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int verbose_level)
void init_DB_level(layer2_discreta::database &D, int level, int verbose_level)
void orbits_of_stabilizer(int verbose_level)
int * orbit_representative_Elt1
void get_statistics(int nb_files, std::string *fname, int verbose_level)
void count_solutions_from_clique_finder(int nb_files, std::string *fname, int verbose_level)
void load_strong_generators_oracle(int cur_level, int cur_node_local, data_structures_groups::vector_ge &gens, ring_theory::longinteger_object &go, int verbose_level)
int find_extension_easy_old(long int *set, int case_nb, int &idx, int verbose_level)
void read_solutions_from_clique_finder_case_by_case(int nb_files, long int *list_of_cases, std::string *fname, int verbose_level)
int * stats_nb_backtrack_decision
int identify_database_is_open(long int *set, int f_implicit_fusion, int verbose_level)
long int * apply_fusion_tmp_set1
void skip_through_event_file1(std::ifstream &f, int case_no, int orbit_no, int verbose_level)
int handle_extension_database(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void list_solutions_by_orbit()
data_structures_groups::vector_ge * gens_perm
int handle_extension(int cur_level, int cur_node_global, long int *canonical_set, int *Elt_transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
void do_iso_test(int t0, groups::sims *&Stab, int f_play_back, std::ifstream *play_back_file, int &f_eof, int print_mod, int f_implicit_fusion, int verbose_level)
int open_database_and_identify_object(long int *set, int *transporter, int f_implicit_fusion, int verbose_level)
int next_subset_play_back(int &subset_rank, std::ifstream *play_back_file, int &f_eof, int verbose_level)
void print_node_global(int level, int node_global)
void count_solutions(int nb_files, std::string *fname, int f_get_statistics, int f_has_final_test_function, int(*final_test_function)(long int *data, int sz, void *final_test_data, int verbose_level), void *final_test_data, int verbose_level)
to control the behavior of the poset classification algorithm
the poset classification algorithm
auxiliary class for class isomorph
void print_fusion_statistics()
void write_representatives_and_stabilizers(int verbose_level)
void save(int verbose_level)
void read_representatives_and_stabilizers(int verbose_level)
std::string fname_stabgens
void read_fusion(int verbose_level)
std::string fname_fusion_ge
void init(actions::action *A, int nb_objects, std::string &prefix, int verbose_level)
void calc_fusion_statistics()
void write_fusion(int verbose_level)
void load(int verbose_level)
the orbiter library for the classification of combinatorial objects
auxiliary class to pass case specific data to the function isomorph_worker