20namespace layer4_classification {
24 int f_v = (verbose_level >= 1);
27 cout <<
"isomorph::setup_and_open_solution_database" << endl;
43 int f_v = (verbose_level >= 1);
46 cout <<
"isomorph::setup_and_create_solution_database" << endl;
71 int f_v = (verbose_level >= 1);
74 cout <<
"isomorph::setup_and_open_level_database" << endl;
108 int f_v = (verbose_level >= 1);
111 cout <<
"isomorph::close_level_database" << endl;
133 int f_v = (verbose_level >= 1);
136 cout <<
"isomorph::prepare_database_access "
137 "cur_level=" << cur_level << endl;
139 if (cur_level ==
level - 1) {
144 else if (cur_level ==
level) {
151 <<
" isomorph::prepare_database_access "
152 "cur_level = " << cur_level << endl;
161 int f_v = (verbose_level >= 1);
164 int f_compress =
TRUE;
165 int f_duplicatekeys =
TRUE;
169 cout <<
"isomorph::init_DB_sol" << endl;
188 for (i = 0; i <
level; i++) {
219 int nb,
int id,
int no,
int nb_solutions,
int h,
uint_4 &datref,
220 int print_mod,
int verbose_level)
222 int f_vvv = (verbose_level >= 3);
232 for (j = 0; j <
size; j++) {
233 v.
m_ii(4 + j, data[1 + j]);
235 if (f_vvv || ((no % print_mod) == 0)) {
236 cout <<
"Solution no " << no <<
" / " << nb_solutions
237 <<
" starter case " << data[0] <<
" nb " << nb
238 <<
" id=" <<
id <<
" : " <<
v <<
" : " << endl;
243 cout <<
"solution added" << endl;
254 for (j = 0; j <
size; j++) {
264 for (i = 0; i <
size; i++) {
265 data[i] =
v.
s_ii(4 + i);
270 int btree_idx,
int idx,
int &
id,
long int *data)
275 cout <<
"isomorph::load_solution_by_btree" << endl;
279 for (i = 0; i <
size; i++) {
280 data[i] =
v.
s_ii(4 + i);
289 long int *set,
int case_nb,
int &idx,
int verbose_level)
303 int f_v = (verbose_level >= 1);
306 cout <<
"isomorph::find_extension_easy "
307 "case_nb=" << case_nb << endl;
314 cout <<
"isomorph::find_extension_easy idx1=" << idx1 << endl;
318 cout <<
"isomorph::find_extension_easy idx2=" << idx2 << endl;
321 cout <<
"isomorph::find_extension_easy ret1 != ret2" << endl;
324 if (ret1 && (idx1 != idx2)) {
325 cout <<
"isomorph::find_extension_easy "
326 "ret1 && (idx1 != idx2)" << endl;
339 int first,
int len,
int &idx,
340 int f_btree_idx,
int btree_idx,
341 int f_through_hash,
int verbose_level)
347 for (i = 0; i < len; i++) {
352 if (f_through_hash) {
376 int case_nb,
int &idx,
int verbose_level)
378 int f_v = (verbose_level >= 1);
383 cout <<
"isomorph::find_extension_easy_old" << endl;
384 cout <<
"case_nb=" << case_nb << endl;
390 first, len, idx,
FALSE, 0,
FALSE, verbose_level);
393 cout <<
"isomorph::find_extension_easy_old "
394 "solution found at idx=" << idx << endl;
397 cout <<
"isomorph::find_extension_easy_old "
398 "solution not found" << endl;
405 int case_nb,
int &idx,
int verbose_level)
407 int f_v = (verbose_level >= 1);
410 int f_found, first, idx2, len;
414 cout <<
"isomorph::find_extension_easy_new" << endl;
423 cout <<
"isomorph::find_extension_easy_new h=" << h << endl;
428 cout <<
"isomorph::find_extension_easy_new before "
429 "int_vec_search_first_occurence(h)" << endl;
434 cout <<
"isomorph::find_extension_easy_new after "
435 "int_vec_search_first_occurence(h) f_found=" << f_found << endl;
443 cout <<
"isomorph::find_extension_easy_new before "
444 "int_vec_search_first_occurence(h + 1) h+1=" << h + 1 << endl;
449 cout <<
"isomorph::find_extension_easy_new after "
450 "int_vec_search_first_occurence(h+1) f_found=" << f_found << endl;
454 cout <<
"isomorph::find_extension_easy_new len=" << len << endl;
459 cout <<
"case_nb=" << case_nb <<
" h=" << h << endl;
466 int first, last, len;
467 int f_found1, f_found2;
478 cout <<
"f_found1=" << f_found1 <<
" first=" << first << endl;
483 cout <<
"f_found2=" << f_found2 <<
" last=" << last << endl;
485 len = last - first + 1;
493 cout <<
"isomorph::find_extension_easy_new before "
494 "find_extension_search_interval" << endl;
499 cout <<
"isomorph::find_extension_easy_new after "
500 "find_extension_search_interval ret=" << ret << endl;
509 cout <<
"isomorph::find_extension_easy_new "
510 "solution found at idx=" << idx << endl;
513 cout <<
"isomorph::find_extension_easy_new "
514 "solution not found" << endl;
523 int f_implicit_fusion,
int verbose_level)
525 int f_v = (verbose_level >= 1);
527 int f_failure_to_find_point;
530 cout <<
"isomorph::open_database_and_identify_object" << endl;
537 f_implicit_fusion, f_failure_to_find_point, verbose_level - 2);
539 if (f_failure_to_find_point) {
540 cout <<
"isomorph::open_database_and_identify_object: "
541 "f_failure_to_find_point" << endl;
547 cout <<
"isomorph::open_database_and_identify_object: "
548 "object identified as belonging to isomorphism class "
556 cout <<
"isomorph::open_database_and_identify_object done" << endl;
564 int level,
int verbose_level)
566 int f_v = (verbose_level >= 1);
568 int f_compress =
TRUE;
569 int f_duplicatekeys =
TRUE;
574 cout <<
"isomorph::init_DB_level level=" <<
level << endl;
578 sprintf(str,
"starter_lvl_%d.db",
level);
585 sprintf(str,
"starter_lvl_%d_a.idx",
level);
591 sprintf(str,
"starter_lvl_%d_b.idx",
level);
597 sprintf(str,
"starter_lvl_%d_ge.bin",
level);
611 for (i = 0; i <
level; i++) {
619 int f_v = (verbose_level >= 1);
622 int f, nb_nodes, I, J, i, j, idx, print_mod = 1;
630 cout <<
"isomorph::create_level_database "
631 "level = " <<
level << endl;
632 cout <<
"verbose_level=" << verbose_level << endl;
639 cout <<
"f=" << f << endl;
640 cout <<
"nb_nodes=" << nb_nodes << endl;
659 for (i = 0; i < nb_nodes; i++) {
663 if (f_v && ((i % print_mod) == 0)) {
664 cout <<
"isomorph::create_level_database level "
665 <<
level <<
" i=" << i <<
" / " << nb_nodes
708 len = 1 + 1 +
level + 1;
722 for (j = 0; j <
level; j++) {
723 v.
m_ii(idx++, set1[j]);
727 for (j = 0; j <
gen->
get_A()->base_len(); j++) {
762 <<
" i=" << i <<
" j=" << j << endl;
767 int len_mem, h, idx1;
769 if (idx != len - 1) {
770 cout <<
"idx != len - 1, idx=" << idx <<
" len=" << len
771 <<
" i=" << i <<
" j=" << j << endl;
774 len_mem = (O->nb_strong_generators + nb_fusion) *
775 gen->A->coded_elt_size_in_char;
778 for (j = 0; j < O->nb_strong_generators; j++) {
779 gen->A->element_retrieve(O->hdl_strong_generators[j],
782 for (h = 0; h <
gen->A->coded_elt_size_in_char; h++) {
783 mem[idx1++] = elt[h];
786 for (j = 0; j < O->nb_extensions; j++) {
787 if (O->E[j].type == 1)
789 gen->A->element_retrieve(O->E[j].data,
gen->Elt1,
FALSE);
791 for (h = 0; h <
gen->A->coded_elt_size_in_char; h++) {
792 mem[idx1++] = elt[h];
795 if (idx1 != len_mem) {
796 cout <<
"idx1 != len_mem idx=" << idx <<
" len_mem=" << len_mem
797 <<
" i=" << i <<
" j=" << j << endl;
802 M.
init(len_mem, mem);
807 std::vector<int> gen_hdl;
812 for (j = 0; j < gen_hdl.size(); j++) {
830 cout <<
"idx != len, idx=" << idx <<
" len=" << len << endl;
837 if (f_v && ((i % print_mod) == 0)) {
838 cout <<
"object " << i <<
" / " << nb_nodes <<
" added : ";
841 cout <<
"size on file = " << sz <<
", group element "
842 "counter = " << cnt << endl;
856 <<
" is " << cnt << endl;
858 cout <<
"gen->A->coded_elt_size_in_char="
873 int f_v = (verbose_level >= 1);
874 int f_vv = (verbose_level >= 2);
875 int f_v5 = (verbose_level >= 5);
878 cout <<
"isomorph::load_strong_generators "
879 "cur_level=" << cur_level <<
" cur_node_local="
880 << cur_node_local << endl;
884 cout <<
"isomorph::load_strong_generators "
885 "using database" << endl;
888 gens, go, verbose_level);
890 cout <<
"isomorph::load_strong_generators "
891 "found the following strong generators:" << endl;
897 gens, go, verbose_level);
907 int f_v = (verbose_level >= 1);
913 cout <<
"isomorph::load_strong_generators_oracle "
914 "cur_level=" << cur_level <<
" cur_node_local="
915 << cur_node_local << endl;
922 std::vector<int> gen_hdl;
929 if (O->nb_strong_generators == 0) {
931 gens.
allocate(0, verbose_level - 2);
932 go.
create(1, __FILE__, __LINE__);
937 for (i = 0; i <
gen->
get_A()->base_len(); i++) {
949 gens.
allocate(gen_hdl.size(), verbose_level - 2);
951 for (i = 0; i < gen_hdl.size(); i++) {
958 cout <<
"isomorph::load_strong_generators_oracle "
959 "cur_level=" << cur_level <<
" cur_node_local="
960 << cur_node_local <<
" done" << endl;
972 int f_v = (verbose_level >= 1);
973 int f_vv = (verbose_level >= 2);
974 int f_vvv = (verbose_level >= 3);
984 cout <<
"isomorph::load_strong_generators_database "
985 "cur_level=" << cur_level <<
" cur_node_local="
986 << cur_node_local << endl;
995 cout <<
"isomorph::load_strong_generators_database "
996 "loading object " << cur_node_local << endl;
1002 cout <<
"isomorph::load_strong_generators_database "
1005 for (i = 0; i < cur_level; i++) {
1006 set[i] =
v.
s_ii(2 + i);
1009 cout <<
"isomorph::load_strong_generators_database set: ";
1013 int nb_strong_generators;
1015 pos = 2 + cur_level;
1016 nb_strong_generators =
v.
s_ii(pos++);
1018 cout <<
"isomorph::load_strong_generators_database "
1019 "nb_strong_generators="
1020 << nb_strong_generators << endl;
1022 if (nb_strong_generators == 0) {
1024 gens.
allocate(0, verbose_level - 2);
1025 go.
create(1, __FILE__, __LINE__);
1029 for (i = 0; i <
gen->
get_A()->base_len(); i++) {
1030 tl[i] =
v.
s_ii(pos++);
1035 ref =
v.
s_ii(pos++);
1037 cout <<
"isomorph::load_strong_generators_database "
1038 "ref = " << ref << endl;
1042 gens.
allocate(nb_strong_generators, verbose_level - 2);
1046 for (i = 0; i < nb_strong_generators; i++) {
1054 cout <<
"isomorph::load_strong_generators_database "
1055 "cur_level=" << cur_level <<
" cur_node_local="
1056 << cur_node_local <<
" done" << endl;
a catch-all container class for everything related to data structures
int lint_vec_hash_after_sorting(long int *data, int len)
a collection of functions related to sorted vectors
int int_vec_search_first_occurence(int *v, int len, int a, int &idx, int verbose_level)
int lint_vec_compare(long int *p, long int *q, int len)
void lint_vec_heapsort(long int *v, int len)
a collection of functions related to file io
long int file_size(std::string &fname)
domain to compute with objects of type longinteger
void multiply_up(longinteger_object &a, int *x, int len, int verbose_level)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
DISCRETA vector class for vectors of DISCRETA objects.
Vector & append(discreta_base &x)
discreta_base & s_i(int i)
DISCRETA class for a database.
void search_interval_int4_int4(int l0, int u0, int l1, int u1, int &first, int &len, int verbose_level)
void add_key_int4(int field1, int field2)
void init(const char *file_name, int f_duplicatekeys, int btree_idx)
int search_int4_int4(int data1, int data2, int &idx, int verbose_level)
DISCRETA class for a database.
btree & btree_access_i(int i)
void close(int verbose_level)
void add_object_return_datref(Vector &the_object, uint_4 &datref, int verbose_level)
void add_object(Vector &the_object, int verbose_level)
void open(int verbose_level)
void create(int verbose_level)
void get_object(uint_4 datref, Vector &the_object, int verbose_level)
void ith_object(int i, int btree_idx, Vector &the_object, int verbose_level)
void init(const char *filename, int objectkind, int f_compress)
database & change_to_database()
void swap(discreta_base &a)
DISCRETA class to serialize data structures.
void init(int length, char *d)
int coded_elt_size_in_char
void element_retrieve(int hdl, void *elt, int verbose_level)
void map_a_set(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
void element_write_file_fp(int *Elt, std::ofstream &fp, int verbose_level)
void element_read_file_fp(int *Elt, std::ifstream &fp, int verbose_level)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void print(std::ostream &ost)
void init(actions::action *A, 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)
long int * find_extension_set1
int find_extension_easy_new(long int *set, int case_nb, int &idx, int verbose_level)
void setup_and_open_solution_database(int verbose_level)
int identify_solution(long int *set, int *transporter, int f_implicit_fusion, int &f_failure_to_find_point, int verbose_level)
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)
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 load_solution(int id, long int *data)
int find_extension_easy(long int *set, int case_nb, int &idx, int verbose_level)
std::string fname_db_level_ge
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)
std::string fname_db_level_idx2
std::string fname_db_level
poset_classification::poset_classification * gen
void setup_and_open_level_database(int verbose_level)
void prepare_database_access(int cur_level, int verbose_level)
int f_use_table_of_solutions
void setup_and_create_solution_database(int verbose_level)
void create_level_database(int level, int verbose_level)
void close_level_database(int verbose_level)
void init_DB_sol(int verbose_level)
std::string fname_db_level_idx1
void load_solution_by_btree(int btree_idx, int idx, int &id, long int *data)
long int * table_of_solutions
void close_solution_database(int verbose_level)
void init_DB_level(layer2_discreta::database &D, int level, 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)
int open_database_and_identify_object(long int *set, int *transporter, int f_implicit_fusion, int verbose_level)
actions::action * get_A2()
actions::action * get_A()
int first_node_at_level(int i)
int nb_orbits_at_level(int level)
poset_orbit_node * get_node(int node_idx)
int find_poset_orbit_node_for_set(int len, long int *set, int f_tolerant, int verbose_level)
to represent one poset orbit; related to the class poset_classification
extension * get_E(int idx)
void get_tl(std::vector< int > &tl, poset_classification *PC, int verbose_level)
void get_strong_generators_handle(std::vector< int > &gen_hdl, int verbose_level)
int get_nb_strong_generators()
void get_stabilizer_order(poset_classification *gen, ring_theory::longinteger_object &go)
void store_set_to(poset_classification *gen, int i, long int *to)
int get_nb_of_extensions()
#define Lint_vec_print(A, B, C)
#define Int_vec_print(A, B, C)
void freeobject(discreta_base *p)
discreta_base * callocobject(kind k)
the orbiter library for the classification of combinatorial objects
#define EXTENSION_TYPE_FUSION
#define EXTENSION_TYPE_EXTENSION