Orbiter 2022
Combinatorial Objects
blt_set_classify.cpp
Go to the documentation of this file.
1// blt_set_classify.cpp
2//
3// Anton Betten
4//
5// started 8/13/2006
6//
7// moved to apps/blt from blt.cpp 5/24/09
8// moved to src/top_level/geometry from apps/blt.cpp Jan 8, 2019
9//
10//
11//
12//
13
14#include "orbiter.h"
15
16using namespace std;
17
18namespace orbiter {
19namespace layer5_applications {
20namespace orthogonal_geometry_applications {
21
22
23// global functions:
24static void blt_set_classify_print(std::ostream &ost, int len, long int *S, void *data);
25#if 0
26static void blt_set_classify_lifting_prepare_function_new(exact_cover *EC, int starter_case,
27 long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens,
28 solvers::diophant *&Dio, long int *&col_labels,
29 int &f_ruled_out,
30 int verbose_level);
31#endif
32static void blt_set_classify_early_test_func_callback(long int *S, int len,
33 long int *candidates, int nb_candidates,
34 long int *good_candidates, int &nb_good_candidates,
35 void *data, int verbose_level);
36//static void blt_set_classify_callback_report(isomorph *Iso, void *data, int verbose_level);
37
39{
40 Blt_set_domain = NULL;
41 //LG = NULL;
42 A = NULL;
43 starter_size = 0;
44 Strong_gens = NULL;
46 q = 0;
47 Control = NULL;
48 Poset = NULL;
49 gen = NULL;
50 degree = 0;
51 target_size = 0;
52 //null();
53}
54
56{
57 freeself();
58}
59
61{
62}
63
65{
66 int f_v = FALSE;
67
68 if (f_v) {
69 cout << "blt_set_classify::freeself before A" << endl;
70 }
71 if (Blt_set_domain) {
73 Blt_set_domain = NULL;
74 }
75 if (A) {
77 A = NULL;
78 }
79 if (f_v) {
80 cout << "blt_set_classify::freeself before gen" << endl;
81 }
82 if (Control) {
84 Control = NULL;
85 }
86 if (Poset) {
88 Poset = NULL;
89 }
90 if (gen) {
92 gen = NULL;
93 }
94 null();
95 if (f_v) {
96 cout << "blt_set_classify::freeself done" << endl;
97 }
98}
99
100
101
103 groups::strong_generators *Strong_gens,
104 int starter_size,
105 int verbose_level)
106{
107 int f_v = (verbose_level >= 1);
108
109 if (f_v) {
110 cout << "blt_set_classify::init_basic" << endl;
111 cout << "blt_set_classify::init_basic "
112 "verbose_level = " << verbose_level << endl;
113 }
114
117 int f_semilinear;
118
119
123
124
125
127 cout << "the group must be of orthogonal type" << endl;
128 exit(1);
129 }
130 AO = A->G.AO;
131 O = AO->O;
132 q = O->F->q;
134
135 if (f_v) {
136 cout << "blt_set_classify::init_basic" << endl;
137 cout << "blt_set_classify::init_basic "
138 "f_semilinear = " << f_semilinear << endl;
139 }
140
141
142#if 0
143 if (f_v) {
144 cout << "blt_set_classify::init_basic "
145 "before lex_least_base_in_place" << endl;
146 }
147 A->lex_least_base_in_place(0 /*verbose_level - 2*/);
148 if (f_v) {
149 cout << "blt_set_classify::init_basic "
150 "after lex_least_base_in_place" << endl;
151 }
152 if (f_v) {
153 cout << "blt_set_classify::init_group "
154 "computing lex least base done" << endl;
155 cout << "blt_set::init_group base: ";
156 lint_vec_print(cout, A->get_base(), A->base_len());
157 cout << endl;
158 }
159#endif
160
161
163 Blt_set_domain->init(O, verbose_level);
164
167
168
169 if (f_v) {
170 cout << "blt_set_classify::init_basic q=" << q
171 << " target_size = " << target_size << endl;
172 }
173
174 if (f_v) {
175 cout << "blt_set_classify::init_basic finished" << endl;
176 }
177}
178
179
182 int verbose_level)
183{
184 int f_v = (verbose_level >= 1);
185
186 if (f_v) {
187 cout << "blt_set_classify::compute_starter" << endl;
188 cout << "blt_set_classify::compute_starter "
189 "verbose_level = " << verbose_level << endl;
190 }
191
192
196 verbose_level);
197
198 if (f_v) {
199 cout << "blt_set_classify::compute_starter before "
200 "Poset->add_testing_without_group" << endl;
201 }
203 blt_set_classify_early_test_func_callback,
204 this /* void *data */,
205 verbose_level);
206 if (f_v) {
207 cout << "blt_set_classify::compute_starter after "
208 "Poset->add_testing_without_group" << endl;
209 }
210
212 Poset->print_function = blt_set_classify_print;
213 Poset->print_function_data = (void *) this;
214
216
217
218 if (f_v) {
219 cout << "blt_set_classify::compute_starter before gen->compute_orbits_on_subsets" << endl;
220 }
222 starter_size/* target_depth */,
223 Control,
224 Poset,
225 verbose_level);
226
227 if (f_v) {
228 cout << "blt_set_classify::compute_starter after gen->compute_orbits_on_subsets" << endl;
229 }
230
231
232 if (f_v) {
233 cout << "blt_set_classify::compute_starter finished" << endl;
234 }
235}
236
237#if 0
238void blt_set_classify::init_group(int f_semilinear, int verbose_level)
239{
240 int f_v = (verbose_level >= 1);
241 int f_vv = (verbose_level >= 2);
242 int f_basis = TRUE;
243
244 if (f_v) {
245 cout << "blt_set_classify::init_group" << endl;
246 }
247
248 if (f_vv) {
249 cout << "blt_set_classify::init_group "
250 "before A->init_orthogonal_group" << endl;
251 }
252 A = NEW_OBJECT(action);
253
255 TRUE /* f_on_points */,
256 FALSE /* f_on_lines */,
257 FALSE /* f_on_points_and_lines */,
258 f_semilinear, f_basis, 0 /* verbose_level - 1*/);
259 degree = A->degree;
260 if (f_vv) {
261 cout << "blt_set_classify::init_group "
262 "after A->init_orthogonal_group" << endl;
263 cout << "blt_set::init_group "
264 "degree = " << degree << endl;
265 }
266
267 if (f_vv) {
268 cout << "blt_set_classify::init_group "
269 "computing lex least base" << endl;
270 }
271 A->lex_least_base_in_place(0 /*verbose_level - 2*/);
272 if (f_vv) {
273 cout << "blt_set_classify::init_group "
274 "computing lex least base done" << endl;
275 cout << "blt_set::init_group base: ";
276 lint_vec_print(cout, A->get_base(), A->base_len());
277 cout << endl;
278 }
279
280 //action_on_orthogonal *AO;
281
282 //AO = A->G.AO;
283 //O = AO->O;
284
285 if (f_v) {
286 cout << "blt_set_classify::init_group "
287 "degree = " << A->degree << endl;
288 }
289
290 //init_orthogonal_hash(verbose_level);
291
292#if 0
293 if (A->degree < 200) {
294 if (f_v) {
295 cout << "blt_set_classify::init_group "
296 "before test_Orthogonal" << endl;
297 }
298 test_Orthogonal(epsilon, n - 1, q);
299 }
300#endif
301 //A->Sims->print_all_group_elements();
302
303 if (FALSE) {
304 cout << "blt_set_classify::init_group before "
305 "A->Sims->print_all_transversal_elements" << endl;
307 cout << "blt_set_classify::init_group after "
308 "A->Sims->print_all_transversal_elements" << endl;
309 }
310
311
312 if (FALSE /*f_vv*/) {
313 Blt_set_domain->O->F->print();
314 }
315
316
317
318 if (f_v) {
319 cout << "blt_set_classify::init_group "
320 "allocating Pts and Candidates" << endl;
321 }
322
323 if (f_v) {
324 cout << "blt_set_classify::init_group finished" << endl;
325 }
326}
327
328void blt_set_classify::init_orthogonal_hash(int verbose_level)
329{
330 int f_v = (verbose_level >= 1);
331
332 if (f_v) {
333 cout << "blt_set_classify::init_orthogonal_hash" << endl;
334 }
335
336 // ToDo:
337 //Blt_set_domain->O->F->init_hash_table_parabolic(4, 0/*verbose_level*/);
338
339 if (f_v) {
340 cout << "blt_set_classify::init_orthogonal_hash finished" << endl;
341 }
342}
343#endif
344
345
346
348 int orbit_at_level_r, int orbit_at_level_m,
349 int level_of_candidates_file,
350 int f_lexorder_test, int f_eliminate_graphs_if_possible,
351 int verbose_level)
352{
353 int f_v = (verbose_level >= 1);
354 int f_vv = (verbose_level >= 2);
355 int f_v3 = (verbose_level >= 3);
357
358
359 if (f_v) {
360 cout << "blt_set_classify::create_graphs" << endl;
361 cout << "blt_set_classify::create_graphs "
362 "starter_size = " << starter_size << endl;
363 cout << "blt_set_classify::create_graphs "
364 "f_lexorder_test=" << f_lexorder_test << endl;
365 }
366
367
368 //f_memory_debug = TRUE;
369
370
371 char str1[1000];
372 char str2[1000];
373 string fname;
374 string fname_list_of_cases;
375 string fname_time;
376 int orbit;
377 int nb_orbits;
378 long int *list_of_cases;
379 int nb_of_cases;
380
381 long int *Time;
382 int time_idx;
384
385
386
387
388 sprintf(str1, "_lvl_%d", starter_size);
389 fname.assign(Blt_set_domain->prefix);
390 fname.append(str1);
391
392 fname_list_of_cases.assign(Blt_set_domain->prefix);
393 fname_list_of_cases.append("_list_of_cases");
394 sprintf(str2, "_%d_%d_%d", starter_size, orbit_at_level_r, orbit_at_level_m);
395 fname_list_of_cases.append(str2);
396 fname_list_of_cases.append(".csv");
397
398
399 fname_time.assign(Blt_set_domain->prefix);
400 fname_time.append("_time");
401 fname_time.append(str2);
402 fname_time.append(".csv");
403
404 //sprintf(fname_list_of_cases, "%slist_of_cases_%s_%d_%d_%d.txt",
405 // output_prefix, gen->get_problem_label(), starter_size,
406 // orbit_at_level_r, orbit_at_level_m);
407 //sprintf(fname_time, "%stime_%s_%d_%d_%d.csv",
408 // output_prefix, gen->get_problem_label(), starter_size,
409 // orbit_at_level_r, orbit_at_level_m);
410
411 if (f_v) {
412 cout << "blt_set_classify::create_graphs counting number of starter in file " << fname << endl;
413 }
414 nb_orbits = Fio.count_number_of_orbits_in_file(fname, 0);
415 if (f_v) {
416 cout << "blt_set_classify::create_graphs There are "
417 << nb_orbits << " starters" << endl;
418 }
419 if (nb_orbits < 0) {
420 cout << "Something is wrong, nb_orbits is negative" << endl;
421 exit(1);
422 }
423
424
425 Time = NEW_lint(nb_orbits * 2);
426 orbiter_kernel_system::Orbiter->Lint_vec->zero(Time, nb_orbits * 2);
427 time_idx = 0;
428
429 nb_of_cases = 0;
430 list_of_cases = NEW_lint(nb_orbits);
431 for (orbit = 0; orbit < nb_orbits; orbit++) {
432 if ((orbit % orbit_at_level_m) != orbit_at_level_r) {
433 continue;
434 }
435 if (f_v) {
436 cout << "blt_set_classify::create_graphs creating graph associated "
437 "with orbit " << orbit << " / " << nb_orbits
438 << ":" << endl;
439 }
440
441
443 int nb_vertices = -1;
444
445 int t0 = Os.os_ticks();
446
447 if (f_v3) {
448 cout << "blt_set_classify::create_graphs creating graph associated "
449 "with orbit " << orbit << " / " << nb_orbits
450 << ": before create_graph" << endl;
451 }
452 if (create_graph(orbit, level_of_candidates_file,
453 f_lexorder_test, f_eliminate_graphs_if_possible,
454 nb_vertices,
455 CG,
456 verbose_level - 1)) {
457 list_of_cases[nb_of_cases++] = orbit;
458
459 string fname;
460
461 fname.assign(CG->fname_base);
462 fname.append(".bin");
463 CG->save(fname, verbose_level - 2);
464
465 nb_vertices = CG->nb_points;
466 }
467 if (f_v3) {
468 cout << "blt_set_classify::create_graphs creating graph associated "
469 "with orbit " << orbit << " / " << nb_orbits
470 << ": after create_graph" << endl;
471 }
472
473 if (CG) {
474 FREE_OBJECT(CG);
475 }
476
477 int t1 = Os.os_ticks();
478
479 Time[time_idx * 2 + 0] = orbit;
480 Time[time_idx * 2 + 1] = t1 - t0;
481 time_idx++;
482
483 if (f_vv) {
484 if (nb_vertices >= 0) {
485 cout << "blt_set_classify::create_graphs creating graph "
486 "associated with orbit " << orbit << " / "
487 << nb_orbits << " with " << nb_vertices
488 << " vertices created" << endl;
489 }
490 else {
491 cout << "blt_set_classify::create_graphs creating graph "
492 "associated with orbit " << orbit << " / "
493 << nb_orbits << " is ruled out" << endl;
494 }
495 }
496 }
497
498 if (f_v) {
499 cout << "blt_set_classify::create_graphs writing file "
500 << fname_time << endl;
501 }
502 Fio.lint_matrix_write_csv(fname_time, Time, time_idx, 2);
503 if (f_v) {
504 cout << "blt_set_classify::create_graphs Written file "
505 << fname_time << " of size "
506 << Fio.file_size(fname_time) << endl;
507 }
508
509 Fio.lint_matrix_write_csv(fname_list_of_cases,
510 list_of_cases, nb_of_cases, 1);
511 if (f_v) {
512 cout << "blt_set_classify::create_graphs Written file "
513 << fname_list_of_cases << " of size "
514 << Fio.file_size(fname_list_of_cases) << endl;
515 }
516
517 FREE_lint(Time);
518 FREE_lint(list_of_cases);
519
520 //registry_dump_sorted();
521}
522
524 std::string &case_label,
525 std::string &list_of_cases_text,
526 int level_of_candidates_file,
527 int f_lexorder_test, int f_eliminate_graphs_if_possible,
528 int verbose_level)
529{
530 int f_v = (verbose_level >= 1);
531 int f_vv = (verbose_level >= 2);
532 int f_v3 = (verbose_level >= 3);
533
534
535 if (f_v) {
536 cout << "blt_set_classify::create_graphs_list_of_cases" << endl;
537 cout << "blt_set_classify::create_graphs_list_of_cases "
538 "case_label = " << case_label << endl;
539 }
540
541
542 //f_memory_debug = TRUE;
543
544 int *list_of_cases = NULL;
545 int nb_of_cases;
546
547
548 Int_vec_scan(list_of_cases_text, list_of_cases, nb_of_cases);
549 if (f_v) {
550 cout << "blt_set_classify::create_graphs_list_of_cases "
551 "nb_of_cases = " << nb_of_cases << endl;
552 cout << "blt_set_classify::create_graphs_list_of_cases "
553 "starter_size = " << starter_size << endl;
554 cout << "blt_set_classify::create_graphs_list_of_cases "
555 "f_lexorder_test=" << f_lexorder_test << endl;
556 }
557
558 char str[1000];
559 string fname;
560 string fname_list_of_cases;
561 int orbit;
562 int nb_orbits;
563 long int *list_of_cases_created;
564 int nb_of_cases_created;
565 int c;
567
568
569 sprintf(str, "_lvl_%d", starter_size);
570 fname.assign(Blt_set_domain->prefix);
571 fname.append(str);
572
573
574 sprintf(str, "_list_of_cases.txt");
575 fname_list_of_cases.assign(Blt_set_domain->prefix);
576 fname_list_of_cases.append(case_label);
577 fname_list_of_cases.append(str);
578
579
580 nb_orbits = Fio.count_number_of_orbits_in_file(fname, 0);
581 if (f_v) {
582 cout << "blt_set_classify::create_graphs_list_of_cases "
583 "There are " << nb_orbits << " starters" << endl;
584 }
585 if (nb_orbits < 0) {
586 cout << "Something is wrong, nb_orbits is negative" << endl;
587 cout << "fname = " << fname << endl;
588 exit(1);
589 }
590
591
592 nb_of_cases_created = 0;
593 list_of_cases_created = NEW_lint(nb_orbits);
594 for (c = 0; c < nb_of_cases; c++) {
595 orbit = list_of_cases[c];
596 if (f_v3) {
597 cout << "blt_set_classify::create_graphs_list_of_cases case "
598 << c << " / " << nb_of_cases << " creating graph "
599 "associated with orbit " << orbit << " / "
600 << nb_orbits << ":" << endl;
601 }
602
603
605 int nb_vertices = -1;
606
607
608 if (create_graph(orbit, level_of_candidates_file,
609 f_lexorder_test, f_eliminate_graphs_if_possible,
610 nb_vertices,
611 CG,
612 verbose_level - 2)) {
613 list_of_cases_created[nb_of_cases_created++] = orbit;
614
615 string fname;
616
617 fname.assign(Blt_set_domain->prefix);
618 fname.append(CG->fname_base);
619 fname.append(".bin");
620
621 CG->save(fname, verbose_level - 2);
622
623 nb_vertices = CG->nb_points;
624 //delete CG;
625 }
626
627 if (CG) {
628 cout << "before FREE_OBJECT(CG)" << endl;
629 FREE_OBJECT(CG);
630 cout << "after FREE_OBJECT(CG)" << endl;
631 }
632 if (f_vv) {
633 if (nb_vertices >= 0) {
634 cout << "blt_set_classify::create_graphs_list_of_cases "
635 "case " << c << " / " << nb_of_cases
636 << " creating graph associated with orbit "
637 << orbit << " / " << nb_orbits << " with "
638 << nb_vertices << " vertices created" << endl;
639 }
640 else {
641 cout << "blt_set_classify::create_graphs_list_of_cases "
642 "case " << c << " / " << nb_of_cases
643 << " creating graph associated with orbit "
644 << orbit << " / " << nb_orbits
645 << " is ruled out" << endl;
646 }
647 }
648 }
649
650 Fio.write_set_to_file(fname_list_of_cases,
651 list_of_cases_created, nb_of_cases_created,
652 0 /*verbose_level */);
653 if (f_v) {
654 cout << "blt_set_classify::create_graphs_list_of_cases "
655 "Written file " << fname_list_of_cases
656 << " of size " << Fio.file_size(fname_list_of_cases) << endl;
657 }
658 if (f_v) {
659 cout << "blt_set_classify::create_graphs_list_of_cases "
660 "we created " << nb_of_cases_created
661 << " / " << nb_of_cases << " cases" << endl;
662 }
663
664 FREE_lint(list_of_cases_created);
665
666 //registry_dump_sorted();
667}
668
669
671 int orbit_at_level, int level_of_candidates_file,
672 int f_lexorder_test, int f_eliminate_graphs_if_possible,
673 int &nb_vertices,
675 int verbose_level)
676// returns TRUE if a graph was written, FALSE otherwise
677{
678 int f_v = (verbose_level >= 1);
679 int f_vv = (verbose_level >= 2);
680 int f_v3 = (verbose_level >= 3);
681
682
683 if (f_v) {
684 cout << "blt_set_classify::create_graph" << endl;
685 cout << "blt_set_classify::create_graph "
686 "f_lexorder_test=" << f_lexorder_test << endl;
687 cout << "blt_set_classify::create_graph "
688 "orbit_at_level=" << orbit_at_level << endl;
689 cout << "blt_set_classify::create_graph "
690 "level_of_candidates_file="
691 << level_of_candidates_file << endl;
692 }
693
694 CG = NULL;
695
696 int ret;
697
699
700
701
702 int max_starter;
703 int nb;
704
705 nb_vertices = 0;
706
707
709 if (f_v) {
710 cout << "blt_set_classify::create_graph before R->init_from_file" << endl;
711 }
712
714 starter_size, orbit_at_level, level_of_candidates_file,
715 blt_set_classify_early_test_func_callback,
716 this /* early_test_func_callback_data */,
717 verbose_level);
718 if (f_v) {
719 cout << "blt_set_classify::create_graph after R->init_from_file" << endl;
720 }
721 nb = q + 1 - starter_size;
722
723
724 if (f_v) {
725 cout << "blt_set_classify::create_graph Case "
726 << orbit_at_level << " / " << R->nb_cases
727 << " Read starter : ";
729 cout << endl;
730 }
731
732 max_starter = R->rep[starter_size - 1];
733
734 if (f_vv) {
735 cout << "blt_set_classify::create_graph Case " << orbit_at_level
736 << " / " << R->nb_cases << " max_starter="
737 << max_starter << endl;
738 cout << "blt_set_classify::create_graph Case " << orbit_at_level
739 << " / " << R->nb_cases << " Group order="
740 << *R->stab_go << endl;
741 cout << "blt_set_classify::create_graph Case " << orbit_at_level
742 << " / " << R->nb_cases << " nb_candidates="
743 << R->nb_candidates << " at level "
744 << starter_size << endl;
745 }
746
747
748
749 if (f_lexorder_test) {
750 int nb_candidates2;
751
752 if (f_v3) {
753 cout << "blt_set_classify::create_graph Case " << orbit_at_level
754 << " / " << R->nb_cases
755 << " Before lexorder_test" << endl;
756 }
758 R->nb_candidates, nb_candidates2,
759 R->Strong_gens->gens, max_starter, verbose_level - 3);
760 if (f_vv) {
761 cout << "blt_set_classify::create_graph "
762 "After lexorder_test nb_candidates="
763 << nb_candidates2 << " eliminated "
764 << R->nb_candidates - nb_candidates2
765 << " candidates" << endl;
766 }
767 R->nb_candidates = nb_candidates2;
768 }
769
770
771 // we must do this.
772 // For instance, what if we have no points left,
773 // then the minimal color stuff break down.
774 //if (f_eliminate_graphs_if_possible) {
775 if (R->nb_candidates < nb) {
776 if (f_v) {
777 cout << "blt_set_classify::create_graph "
778 "Case " << orbit_at_level << " / "
779 << R->nb_cases << " nb_candidates < nb, "
780 "the case is eliminated" << endl;
781 }
782 FREE_OBJECT(R);
783 return FALSE;
784 }
785 //}
786
787
788 nb_vertices = R->nb_candidates;
789
790
791 if (f_v) {
792 cout << "blt_set_classify::create_graph before "
793 "Blt_set_domain->create_graph" << endl;
794 }
796 orbit_at_level, R->nb_cases,
797 R->rep, starter_size,
799 f_eliminate_graphs_if_possible,
800 CG,
801 verbose_level);
802 if (f_v) {
803 cout << "blt_set_classify::create_graph after "
804 "Blt_set_domain->create_graph" << endl;
805 }
806
807 FREE_OBJECT(R);
808 return ret;
809}
810
811
812
814 exact_cover *E, int starter_case,
815 long int *candidates, int nb_candidates,
816 groups::strong_generators *Strong_gens,
817 solvers::diophant *&Dio, long int *&col_labels,
818 int &f_ruled_out,
819 int verbose_level)
820{
821 int f_v = (verbose_level >= 1);
822 int f_vv = (verbose_level >= 2);
823 //int f_v3 = (verbose_level >= 3);
824 int i, j, a;
825
826 if (f_v) {
827 cout << "blt_set_classify::lifting_prepare_function_new "
828 "nb_candidates=" << nb_candidates << endl;
829 }
830
831
832
833
834 int nb_free_points, nb_needed;
835 long int *free_point_list; // [nb_free_points]
836 int *point_idx; // [nb_points_total]
837 // point_idx[i] = index of a point in free_point_list
838 // or -1 if the point is in points_covered_by_starter
839
840
841 nb_needed = q + 1 - starter_size;
842
843
844 if (f_vv) {
845 cout << "blt_set_classify::lifting_prepare_function "
846 "nb_needed=" << nb_needed << endl;
847 cout << "blt_set_classify::lifting_prepare_function "
848 "nb_candidates=" << nb_candidates << endl;
849 }
850
851 if (f_v) {
852 cout << "blt_set_classify::lifting_prepare_function "
853 "before find_free_points" << endl;
854 }
855
857 free_point_list, point_idx, nb_free_points,
858 verbose_level - 2);
859
860 if (f_v) {
861 cout << "blt_set_classify::lifting_prepare_function "
862 "There are " << nb_free_points << " free points" << endl;
863 }
864
865
866
867 col_labels = NEW_lint(nb_candidates);
868
869
870 Lint_vec_copy(candidates, col_labels, nb_candidates);
871
872
873 int nb_rows = nb_free_points;
874 int nb_cols = nb_candidates;
875
876
877 if (f_vv) {
878 cout << "blt_set_classify::lifting_prepare_function_new candidates: ";
879 Lint_vec_print(cout, candidates, nb_candidates);
880 cout << " (nb_candidates=" << nb_candidates << ")" << endl;
881 }
882
883
884
885
886 if (E->f_lex) {
887 int nb_cols_before;
888
889 nb_cols_before = nb_cols;
890 E->lexorder_test(col_labels, nb_cols, Strong_gens->gens,
891 verbose_level - 2);
892 if (f_v) {
893 cout << "blt_set_classify::lifting_prepare_function_new "
894 "after lexorder test nb_candidates before: "
895 << nb_cols_before << " reduced to " << nb_cols
896 << " (deleted " << nb_cols_before - nb_cols
897 << ")" << endl;
898 }
899 }
900
901 if (f_vv) {
902 cout << "blt_set_classify::lifting_prepare_function_new "
903 "after lexorder test" << endl;
904 cout << "blt_set_classify::lifting_prepare_function_new "
905 "nb_cols=" << nb_cols << endl;
906 }
907
908 int *Pts1, *Pts2;
909
910 Pts1 = NEW_int(nb_free_points * 5);
911 Pts2 = NEW_int(nb_cols * 5);
912 for (i = 0; i < nb_free_points; i++) {
913 Blt_set_domain->O->unrank_point(Pts1 + i * 5, 1,
914 free_point_list[i],
915 0 /*verbose_level - 1*/);
916 }
917 for (i = 0; i < nb_cols; i++) {
918 Blt_set_domain->O->unrank_point(Pts2 + i * 5, 1,
919 col_labels[i],
920 0 /*verbose_level - 1*/);
921 }
922
923
924
926 Dio->open(nb_rows, nb_cols);
927 Dio->sum = nb_needed;
928
929 for (i = 0; i < nb_rows; i++) {
930 Dio->type[i] = t_EQ;
931 Dio->RHS[i] = 1;
932 }
933
935 if (f_vv) {
936 cout << "blt_set_classify::lifting_prepare_function_new "
937 "initializing Inc" << endl;
938 }
939
940
941 for (i = 0; i < nb_free_points; i++) {
942 for (j = 0; j < nb_cols; j++) {
944 Pts1 + i * 5,
945 Pts2 + j * 5, 1);
946 if (a == 0) {
947 Dio->Aij(i, j) = 1;
948 }
949 }
950 }
951
952
953 FREE_lint(free_point_list);
954 FREE_int(point_idx);
955 FREE_int(Pts1);
956 FREE_int(Pts2);
957 if (f_v) {
958 cout << "blt_set_classify::lifting_prepare_function_new "
959 "nb_free_points=" << nb_free_points
960 << " nb_candidates=" << nb_candidates << endl;
961 }
962
963 if (f_v) {
964 cout << "blt_set_classify::lifting_prepare_function_new "
965 "done" << endl;
966 }
967}
968
969
970void blt_set_classify::report_from_iso(isomorph &Iso, int verbose_level)
971{
972 int f_v = (verbose_level >= 1);
973
974 if (f_v) {
975 cout << "blt_set_classify::report_from_iso" << endl;
976 }
977
979
980 if (f_v) {
981 cout << "blt_set_classify::report_from_iso "
982 "before Iso.get_orbit_transversal" << endl;
983 }
984
985 Iso.get_orbit_transversal(T, verbose_level);
986
987 if (f_v) {
988 cout << "blt_set_classify::report_from_iso "
989 "after Iso.get_orbit_transversal" << endl;
990 }
991
992 report(T, verbose_level);
993
994 FREE_OBJECT(T);
995
996 if (f_v) {
997 cout << "blt_set_classify::report_from_iso done" << endl;
998 }
999}
1000
1001
1003 int verbose_level)
1004{
1005 int f_v = (verbose_level >= 1);
1006 string fname;
1007
1008 if (f_v) {
1009 cout << "blt_set_classify::report" << endl;
1010 }
1011
1012 fname.assign(Blt_set_domain->prefix);
1013 fname.append("_report.tex");
1014
1015 {
1016 ofstream ost(fname);
1017
1018 report2(ost, T, verbose_level);
1019 }
1020
1022
1023 if (f_v) {
1024 cout << "Written file " << fname << " of size "
1025 << Fio.file_size(fname) << endl;
1026 }
1027
1028
1029
1030 if (f_v) {
1031 cout << "blt_set_classify::report done" << endl;
1032 }
1033
1034}
1035
1036#if 0
1037void blt_set_classify::subset_orbits(isomorph &Iso, int verbose_level)
1038{
1039 int f_v = (verbose_level >= 1);
1040 char fname[1000];
1041
1042 if (f_v) {
1043 cout << "blt_set_classify::subset_orbits" << endl;
1044 cout << "A->elt_size_in_int=" << A->elt_size_in_int << endl;
1045 }
1046 sprintf(fname, "report_BLT_%d_subset_orbits.tex", q);
1047
1048
1049 Iso.load_table_of_solutions(verbose_level);
1050
1051 Iso.depth_completed = Iso.level /*- 2*/;
1052
1054 Iso.level - 1,
1055 verbose_level);
1056
1057 int i;
1058
1059 if (f_v) {
1060 for (i = 0; i <= Iso.level + 1; i++) {
1061 cout << "gen->first_poset_orbit_node_at_level[" << i
1062 << "]=" << Iso.gen->first_poset_orbit_node_at_level[i]
1063 << endl;
1064 }
1065 cout << "Iso.depth_completed=" << Iso.depth_completed << endl;
1066 }
1067 Iso.iso_test_init2(verbose_level);
1068
1069
1070 {
1071 ofstream f(fname);
1072 int f_book = FALSE;
1073 int f_title = TRUE;
1074 char title[1000];
1075 const char *author = "Orbiter";
1076 int f_toc = TRUE;
1077 int f_landscape = FALSE;
1078 int f_12pt = FALSE;
1079 int f_enlarged_page = TRUE;
1080 int f_pagenumbers = TRUE;
1081
1082 sprintf(title, "BLT-sets of Q$(4,%d)$", q);
1083 cout << "Writing file " << fname << " with "
1084 << Iso.Reps->count << " BLT-sets:" << endl;
1085 latex_head(f, f_book, f_title,
1086 title, author,
1087 f_toc,
1088 f_landscape,
1089 f_12pt,
1090 f_enlarged_page,
1091 f_pagenumbers,
1092 NULL /* extra_praeamble */);
1093
1094 f << "\\section{Summary}" << endl << endl;
1095 f << "There are " << Iso.Reps->count << " BLT-sets." << endl << endl;
1096
1097
1098 Iso.setup_and_open_solution_database(verbose_level - 1);
1099
1100
1101
1102 int h, rep, first, id;
1103 longinteger_object go;
1104 int data[1000];
1105 //int data2[1000];
1106
1107 for (h = 0; h < Iso.Reps->count; h++) {
1108 rep = Iso.Reps->rep[h];
1109 first = Iso.orbit_fst[rep];
1110 //c = Iso.starter_number[first];
1111 id = Iso.orbit_perm[first];
1112 Iso.load_solution(id, data);
1113
1114
1115
1116 f << "\\section{Isomorphism Type " << h << "}" << endl;
1117 f << "\\bigskip" << endl;
1118
1119 int_vec_print(cout, data, Iso.size);
1120 cout << endl;
1121
1122 sims *Stab;
1123
1124 Stab = Iso.Reps->stab[h];
1125
1126 if (f_v) {
1127 cout << "blt_set_classify::subset_orbits computing induced "
1128 "action on the set (in data)" << endl;
1129 }
1130 Iso.induced_action_on_set(Stab, data, 0 /*verbose_level*/);
1131
1132 cout << "data after induced_action_on_set:" << endl;
1133 int_vec_print(cout, data, Iso.size);
1134 cout << endl;
1135
1136 longinteger_object go1;
1137
1138 Iso.AA->group_order(go1);
1139 cout << "action " << Iso.AA->label << " computed, group "
1140 "order is " << go1 << endl;
1141
1142 f << "Order of the group that is induced on the object is ";
1143 f << "$";
1144 go1.print_not_scientific(f);
1145 f << "$\\\\" << endl;
1146
1147 {
1148 int *orbit_reps;
1149 int nb_orbits;
1150 //vector_ge SG;
1151 //int *tl;
1152 strong_generators *Strong_gens;
1153
1154 Strong_gens = NEW_OBJECT(strong_generators);
1156 //tl = NEW_int(Iso.AA->base_len);
1157 //Iso.AA->Sims->extract_strong_generators_in_order(
1158 // SG, tl, verbose_level);
1159
1160
1161 poset *Poset;
1162
1163 Poset = NEW_OBJECT(poset);
1165 verbose_level);
1166
1168 Iso.level, orbit_reps, nb_orbits, verbose_level);
1169
1171
1172 cout << "Orbit reps: nb_orbits=" << nb_orbits << endl;
1173 int_matrix_print(orbit_reps, nb_orbits, Iso.level);
1174
1175 f << "Number of orbits on $" << Iso.level
1176 << "$-sets is " << nb_orbits << ".\\\\" << endl;
1177
1178 int *rearranged_set;
1179 int *transporter;
1180 int u;
1181 int case_nb;
1182 int f_implicit_fusion = FALSE;
1183 int cnt_special_orbits;
1184 int f_vv = FALSE;
1185 int idx;
1186
1187 rearranged_set = NEW_int(Iso.size);
1188 transporter = NEW_int(A->elt_size_in_int);
1189
1190 cnt_special_orbits = 0;
1191 for (u = 0; u < nb_orbits; u++) {
1192 cout << "orbit " << u << ":" << endl;
1193 int_vec_print(cout,
1194 orbit_reps + u * Iso.level, Iso.level);
1195 cout << endl;
1196
1197
1198
1199 rearrange_subset(Iso.size, Iso.level, data,
1200 orbit_reps + u * Iso.level, rearranged_set,
1201 0/*verbose_level - 3*/);
1202
1203
1204 //int_vec_print(cout, rearranged_set, Iso.size);
1205 //cout << endl;
1206 int f_failure_to_find_point, f_found;
1207
1208 A->element_one(transporter, 0);
1209 case_nb = Iso.trace_set(rearranged_set, transporter,
1210 f_implicit_fusion, f_failure_to_find_point,
1211 0 /*verbose_level - 2*/);
1212
1213
1214 f_found = Iso.find_extension_easy_new(
1215 rearranged_set, case_nb, idx,
1216 0 /* verbose_level */);
1217#if 0
1218 f_found = Iso.identify_solution_relaxed(prefix, transporter,
1219 f_implicit_fusion, orbit_no0,
1220 f_failure_to_find_point, 3 /*verbose_level*/);
1221#endif
1222
1223 cout << "case_nb=" << case_nb << endl;
1224 if (f_failure_to_find_point) {
1225 cout << "blt_set_classify::subset_orbits "
1226 "f_failure_to_find_point" << endl;
1227 exit(1);
1228 }
1229 if (!f_found) {
1230 if (f_vv) {
1231 cout << "blt_set_classify::subset_orbits not found" << endl;
1232 }
1233 continue;
1234 }
1235 cnt_special_orbits++;
1236 } // next u
1237
1238 f << "Number of special orbits on $" << Iso.level
1239 << "$-sets is " << cnt_special_orbits << ".\\\\" << endl;
1240
1241 FREE_int(rearranged_set);
1242 FREE_int(transporter);
1243 FREE_int(orbit_reps);
1244 //FREE_int(tl);
1246 }
1247
1248 }
1249
1250 Iso.close_solution_database(verbose_level - 1);
1251
1252
1253
1254 latex_foot(f);
1255 //FREE_int(Rk_of_span);
1256 }
1257
1258 cout << "Written file " << fname << " of size "
1259 << file_size(fname) << endl;
1260 if (f_v) {
1261 cout << "blt_set::subset_orbits done" << endl;
1262 }
1263}
1264#endif
1265
1266void blt_set_classify::report2(std::ostream &ost,
1267 data_structures_groups::orbit_transversal *T, int verbose_level)
1268{
1269 int f_v = (verbose_level >= 1);
1270
1271 if (f_v) {
1272 cout << "blt_set_classify::report2" << endl;
1273 }
1274
1275 int f_book = FALSE;
1276 int f_title = TRUE;
1277 char title[1000];
1278 const char *author = "Orbiter";
1279 int f_toc = FALSE;
1280 int f_landscape = FALSE;
1281 int f_12pt = FALSE;
1282 int f_enlarged_page = TRUE;
1283 int f_pagenumbers = TRUE;
1285
1286 sprintf(title, "BLT-sets of ${\\cal Q}(4,%d)$", q);
1287 cout << "number of BLT-sets is " << T->nb_orbits << endl;
1288
1289 L.head(ost, f_book, f_title,
1290 title,
1291 author,
1292 f_toc,
1293 f_landscape,
1294 f_12pt,
1295 f_enlarged_page,
1296 f_pagenumbers,
1297 NULL /* extra_praeamble */);
1298
1299
1300 int h;
1302
1303
1305
1307
1308
1309
1310 ost << "\\section{Summary}" << endl << endl;
1311 ost << "There are " << T->nb_orbits
1312 << " isomorphism types of BLT-sets." << endl << endl;
1313
1314
1315 for (h = 0; h < T->nb_orbits; h++) {
1316 T->Reps[h].group_order(Ago[h]);
1317 }
1318
1319
1320
1321
1322
1323 cout << "Computing intersection and plane invariants" << endl;
1324
1325
1327
1329
1330 for (h = 0; h < T->nb_orbits; h++) {
1331
1332
1333 if (f_v) {
1334 cout << "blt_set_classify::report2 looking at "
1335 "representative h=" << h << endl;
1336 }
1337
1338 Inv[h].init(Blt_set_domain, T->Reps[h].data,
1339 verbose_level);
1340
1341
1342
1343 Inv[h].compute(verbose_level);
1344
1345 }
1346
1347
1348 cout << "Computing intersection and plane invariants done" << endl;
1349
1350 //f << "\\section{Invariants}" << endl << endl;
1351
1352 ost << "\\section{The BLT-Sets}" << endl << endl;
1353
1354
1355
1356 for (h = 0; h < T->nb_orbits; h++) {
1357
1358
1359 ost << "\\subsection{Isomorphism Type " << h << "}" << endl;
1360 ost << "\\bigskip" << endl;
1361
1362
1363 if (T->Reps[h].Stab/*Iso.Reps->stab[h]*/) {
1364 T->Reps[h].Stab->group_order(go);
1365 ost << "Stabilizer has order $";
1366 go.print_not_scientific(ost);
1367 ost << "$\\\\" << endl;
1368 }
1369 else {
1370 //cout << endl;
1371 }
1372
1373 Inv[h].latex(ost, verbose_level);
1374
1375
1376
1377
1378#if 0
1379 sims *Stab;
1380
1381 Stab = T->Reps[h].Stab;
1382
1383 if (f_v) {
1384 cout << "blt_set_classify::report computing induced action "
1385 "on the set (in data)" << endl;
1386 }
1387 Iso.induced_action_on_set(Stab, T->Reps[h].data, 0 /*verbose_level*/);
1388
1389 longinteger_object go1;
1390
1391 Iso.AA->group_order(go1);
1392 cout << "action " << Iso.AA->label << " computed, "
1393 "group order is " << go1 << endl;
1394
1395 f << "Order of the group that is induced on the object is ";
1396 f << "$";
1397 go1.print_not_scientific(f);
1398 f << "$\\\\" << endl;
1399
1400 {
1401 int nb_ancestors;
1402 nb_ancestors = Iso.UF->count_ancestors();
1403
1404 f << "Number of ancestors on $" << Iso.level << "$-sets is "
1405 << nb_ancestors << ".\\\\" << endl;
1406
1407 int *orbit_reps;
1408 int nb_orbits;
1409 strong_generators *Strong_gens;
1410
1411 Strong_gens = NEW_OBJECT(strong_generators);
1413
1414
1415 poset *Poset;
1416
1417 Poset = NEW_OBJECT(poset);
1419 verbose_level);
1420
1421
1423 Iso.level, orbit_reps, nb_orbits, verbose_level);
1424
1426 f << "Number of orbits on $" << Iso.level << "$-sets is "
1427 << nb_orbits << ".\\\\" << endl;
1428 FREE_int(orbit_reps);
1430 }
1431
1432 schreier Orb;
1433 //longinteger_object go2;
1434
1435 Iso.AA->compute_all_point_orbits(Orb, Stab->gens,
1436 verbose_level - 2);
1437 f << "With " << Orb.nb_orbits
1438 << " orbits on the object\\\\" << endl;
1439
1440 classify C_ol;
1441
1442 C_ol.init(Orb.orbit_len, Orb.nb_orbits, FALSE, 0);
1443
1444 f << "Orbit lengths: $";
1445 //int_vec_print(f, Orb.orbit_len, Orb.nb_orbits);
1446 C_ol.print_naked_tex(f, FALSE /* f_reverse */);
1447 f << "$ \\\\" << endl;
1448#endif
1449
1450
1451
1452
1455
1456#if 0
1457 longinteger_object so;
1458 int i;
1459
1460 T->Reps[h].Stab->group_order(so);
1461 f << "Stabilizer of order ";
1462 so.print_not_scientific(f);
1463 f << " is generated by:\\\\" << endl;
1464 for (i = 0; i < T->Reps[h].Stab->gens.len; i++) {
1465
1466 int *fp, n;
1467
1468 fp = NEW_int(A->degree);
1469 n = A->find_fixed_points(T->Reps[h].Stab->gens.ith(i), fp, 0);
1470 //cout << "with " << n << " fixed points" << endl;
1471 FREE_int(fp);
1472
1473 f << "$$ g_{" << i + 1 << "}=" << endl;
1474 A->element_print_latex(T->Reps[h].Stab->gens.ith(i), f);
1475 f << "$$" << endl << "with " << n
1476 << " fixed points" << endl;
1477 }
1478#endif
1479
1480
1482
1484 BA->init_set(
1485 A, Blt_set_domain, T->Reps[h].data,
1486 T->Reps[h].Strong_gens, verbose_level);
1487 BA->print_automorphism_group(ost);
1488
1489 FREE_OBJECT(BA);
1490 }
1491
1492
1493 string label_of_structure_plural;
1494
1495 label_of_structure_plural.assign("BLT-Sets");
1496
1499 label_of_structure_plural, ost,
1500 verbose_level);
1501
1502
1503 L.foot(ost);
1504 FREE_OBJECTS(Ago);
1505 FREE_OBJECTS(Inv);
1506
1507}
1508
1509// #############################################################################
1510// global functions:
1511// #############################################################################
1512
1513
1514
1515static void blt_set_classify_print(ostream &ost, int len, long int *S, void *data)
1516{
1517 blt_set_classify *Gen = (blt_set_classify *) data;
1518
1519 //print_vector(ost, S, len);
1520 Gen->Blt_set_domain->print(ost, S, len);
1521}
1522
1523#if 0
1524static void blt_set_classify_lifting_prepare_function_new(
1525 exact_cover *EC, int starter_case,
1526 long int *candidates, int nb_candidates,
1527 groups::strong_generators *Strong_gens,
1528 solvers::diophant *&Dio, long int *&col_labels,
1529 int &f_ruled_out,
1530 int verbose_level)
1531{
1532 int f_v = (verbose_level >= 1);
1533 blt_set_classify *B = (blt_set_classify *) EC->user_data;
1534
1535 if (f_v) {
1536 cout << "blt_set_classify_lifting_prepare_function_new "
1537 "nb_candidates=" << nb_candidates << endl;
1538 }
1539
1540 B->lifting_prepare_function_new(EC, starter_case,
1541 candidates, nb_candidates, Strong_gens,
1542 Dio, col_labels, f_ruled_out,
1543 verbose_level);
1544
1545
1546 if (f_v) {
1547 cout << "blt_set_classify_lifting_prepare_function_new "
1548 "after lifting_prepare_function_new" << endl;
1549 }
1550
1551 if (f_v) {
1552 cout << "blt_set_classify_lifting_prepare_function_new "
1553 "nb_rows=" << Dio->m << " nb_cols=" << Dio->n << endl;
1554 }
1555
1556 if (f_v) {
1557 cout << "blt_set_classify_lifting_prepare_function_new "
1558 "done" << endl;
1559 }
1560}
1561#endif
1562
1563
1564static void blt_set_classify_early_test_func_callback(long int *S, int len,
1565 long int *candidates, int nb_candidates,
1566 long int *good_candidates, int &nb_good_candidates,
1567 void *data, int verbose_level)
1568{
1569 blt_set_classify *BLT = (blt_set_classify *) data;
1570 int f_v = (verbose_level >= 1);
1571
1572 if (f_v) {
1573 cout << "blt_set_early_test_func for set ";
1574 Lint_vec_print(cout, S, len);
1575 cout << endl;
1576 }
1577 BLT->Blt_set_domain->early_test_func(S, len,
1578 candidates, nb_candidates,
1579 good_candidates, nb_good_candidates,
1580 verbose_level - 2);
1581 if (f_v) {
1582 cout << "blt_set_early_test_func done" << endl;
1583 }
1584}
1585
1586#if 0
1587static void blt_set_classify_callback_report(isomorph *Iso, void *data, int verbose_level)
1588{
1589 blt_set_classify *Gen = (blt_set_classify *) data;
1590
1591 Gen->report_from_iso(*Iso, verbose_level);
1592}
1593#endif
1594
1595
1596}}}
1597
1598
1599
1600
1601
1602
1603
void save(std::string &fname, int verbose_level)
int count_number_of_orbits_in_file(std::string &fname, int verbose_level)
Definition: file_io.cpp:1918
void lint_matrix_write_csv(std::string &fname, long int *M, int m, int n)
Definition: file_io.cpp:1323
void write_set_to_file(std::string &fname, long int *the_set, int set_size, int verbose_level)
Definition: file_io.cpp:2434
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
void find_free_points(long int *S, int S_sz, long int *&free_pts, int *&free_pt_idx, int &nb_free_pts, int verbose_level)
void print(std::ostream &ost, long int *S, int len)
int create_graph(int case_number, int nb_cases_total, long int *Starter_set, int starter_size, long int *candidates, int nb_candidates, int f_eliminate_graphs_if_possible, graph_theory::colored_graph *&CG, int verbose_level)
void init(blt_set_domain *D, long int *the_set, int verbose_level)
void unrank_point(int *v, int stride, long int rk, int verbose_level)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
diophantine systems of equations (i.e., linear systems over the integers)
Definition: solvers.h:209
a permutation group in a fixed action.
Definition: actions.h:99
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
void compute_all_point_orbits(groups::schreier &S, data_structures_groups::vector_ge &gens, int verbose_level)
Definition: action.cpp:995
void init_orthogonal_group_with_O(orthogonal_geometry::orthogonal *O, int f_on_points, int f_on_lines, int f_on_points_and_lines, int f_semilinear, int f_basis, int verbose_level)
void element_one(void *elt, int verbose_level)
Definition: action_cb.cpp:224
void lexorder_test(long int *set, int set_sz, int &set_sz_after_test, data_structures_groups::vector_ge *gens, int max_starter, int verbose_level)
Definition: action.cpp:2438
void group_order(ring_theory::longinteger_object &go)
Definition: action.cpp:2223
int find_fixed_points(void *elt, int *fixed_points, int verbose_level)
Definition: action.cpp:579
to hold one orbit after reading files from Orbiters poset classification
void init_from_file(actions::action *A, std::string &prefix, int level, int orbit_at_level, int level_of_candidates_file, void(*early_test_func_callback)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level), void *early_test_func_callback_data, int verbose_level)
Definition: orbit_rep.cpp:67
a set of orbits using a vector of orbit representatives and stabilizers
void export_data_in_source_code_inside_tex(std::string &prefix, std::string &label_of_structure, std::ostream &ost, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
Definition: sims.cpp:951
data_structures_groups::vector_ge gens
Definition: groups.h:1280
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
void init_from_sims(groups::sims *S, int verbose_level)
data_structures_groups::vector_ge * gens
Definition: groups.h:1708
exact cover problems arising with the lifting of combinatorial objects
Definition: solver.h:27
void lexorder_test(long int *live_blocks2, int &nb_live_blocks2, data_structures_groups::vector_ge *stab_gens, int verbose_level)
classification of combinatorial objects using subobjects
Definition: isomorph.h:30
data_structures_groups::union_find * UF
Definition: isomorph.h:221
int find_extension_easy_new(long int *set, int case_nb, int &idx, int verbose_level)
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)
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 load_solution(int id, long int *data)
void induced_action_on_set(groups::sims *S, long int *set, int verbose_level)
poset_classification::poset_classification * gen
Definition: isomorph.h:122
void load_table_of_solutions(int verbose_level)
Definition: isomorph.cpp:433
void get_orbit_transversal(data_structures_groups::orbit_transversal *&T, int verbose_level)
Definition: isomorph.cpp:1798
to control the behavior of the poset classification algorithm
void compute_orbits_on_subsets(int target_depth, poset_classification_control *PC_control, poset_with_group_action *Poset, int verbose_level)
void init_subset_lattice(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int verbose_level)
void add_testing_without_group(void(*func)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level), void *data, int verbose_level)
void orbits_on_k_sets(poset_classification_control *Control, int k, long int *&orbit_reps, int &nb_orbits, int verbose_level)
void(* print_function)(std::ostream &ost, int len, long int *S, void *data)
void create_graphs(int orbit_at_level_r, int orbit_at_level_m, int level_of_candidates_file, int f_lexorder_test, int f_eliminate_graphs_if_possible, int verbose_level)
void compute_starter(poset_classification::poset_classification_control *Control, int verbose_level)
void report(data_structures_groups::orbit_transversal *T, int verbose_level)
void create_graphs_list_of_cases(std::string &case_label, std::string &list_of_cases_text, int level_of_candidates_file, int f_lexorder_test, int f_eliminate_graphs_if_possible, int verbose_level)
poset_classification::poset_classification_control * Control
Definition: tl_orthogonal.h:45
void report2(std::ostream &ost, data_structures_groups::orbit_transversal *T, int verbose_level)
void init_basic(actions::action *A, groups::strong_generators *Strong_gens, int starter_size, int verbose_level)
void lifting_prepare_function_new(exact_cover *E, int starter_case, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens, solvers::diophant *&Dio, long int *&col_labels, int &f_ruled_out, int verbose_level)
layer1_foundations::orthogonal_geometry::blt_set_domain * Blt_set_domain
Definition: tl_orthogonal.h:30
int create_graph(int orbit_at_level, int level_of_candidates_file, int f_lexorder_test, int f_eliminate_graphs_if_possible, int &nb_vertices, graph_theory::colored_graph *&CG, int verbose_level)
void init_set(actions::action *A, orthogonal_geometry::blt_set_domain *Blt_set_domain, long int *set, groups::strong_generators *Aut_gens, int verbose_level)
#define Lint_vec_copy(A, B, C)
Definition: foundations.h:694
#define FREE_OBJECTS(p)
Definition: foundations.h:652
#define Int_vec_scan(A, B, C)
Definition: foundations.h:716
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#define NEW_OBJECTS(type, n)
Definition: foundations.h:639
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define FREE_lint(p)
Definition: foundations.h:642
#define NEW_lint(n)
Definition: foundations.h:628
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
induced_actions::action_on_orthogonal * AO