Orbiter 2022
Combinatorial Objects
foundations.h
Go to the documentation of this file.
1// foundations.h
2//
3// Anton Betten
4//
5// renamed from galois.h: August 16, 2018
6// started as orbiter: October 23, 2002
7// 2nd version started: December 7, 2003
8// galois started: August 12, 2005
9
10
11#ifndef ORBITER_SRC_LIB_FOUNDATIONS_FOUNDATIONS_H_
12#define ORBITER_SRC_LIB_FOUNDATIONS_FOUNDATIONS_H_
13
14
15
16// History:
17//
18// added class unipoly_domain: November 16, 2002
19// added class finite_field: October 23, 2002
20// added class longinteger: October 26, 2002
21// added class mp: March 6, 2003
22// added partitionstack: July 3 2007
23// added class orthogonal: July 9 2007
24// added class vector_hashing: October 14, 2008
25// added file tensor: Dec 25 2008
26// added class grassmann: June 5, 2009
27// added class unusual: June 10 2009
28// added file memory: June 25, 2009
29// added file geometry: July 9, 2009
30// added class classify: Oct 31, 2009
31// added class grassmann_embedded: Jan 24, 2010
32// added class hermitian: March 19, 2010
33// added class incidence_structure: June 20, 2010
34// added class finite_ring: June 21, 2010
35// added class hjelmslev: June 22, 2010
36// added class fancy_set: June 29, 2010
37// added class norm_tables: Sept 23, 2010 (started 11/28/2008)
38// added struct grid_frame: Sept 8, 2011
39// added class data_file: Oct 13, 2011
40// added class subfield_structure: November 14, 2011
41// added class clique_finder: December 13, 2011
42// added class colored_graph: October 28, 2012
43// added class rainbow_cliques: October 28, 2012
44// added class set_of_sets: November 30, 2012
45// added class decomposition: December 1, 2012
46// added file dlx.cpp: April 7, 2013
47// added class spreadsheet: March 15, 2013
48// added class andre_construction andre_construction: June 2, 2013
49// added class andre_construction_point_element: June 2, 2013
50// added class andre_construction_line_element: June 2, 2013
51// added class int_matrix: October 23, 2013
52// added class gl_classes: October 23, 2013
53// added class layered_graph: January 6, 2014
54// added class graph_layer: January 6, 2014
55// added class graph_node: January 6, 2014
56// added class int_vector: August 12, 2014
57// added class projective_space (moved here from ACTION): December 31, 2014
58// added class buekenhout_metz (moved here from TOP_LEVEL): December 31, 2014
59// added class a_domain March 14, 2015
60// added class diophant (moved here from INCIDENCE) April 16, 2015
61// added class null_polarity_generator December 11, 2015
62// added class layered_graph_draw_options December 15, 2015
63// added class klein_correspondence January 1, 2016
64// added class file_output January 8, 2016
65// added class generators_symplectic_group March 29, 2016
66// added class flag May 20, 2016
67// moved class knarr from TOP_LEVEL: Jul 29, 2016
68// moved class w3q from TOP_LEVEL: Jul 29, 2016
69// moved class surface from TOP_LEVEL: Aug 1, 2016
70// added class homogeneous_polynomial_domain: Sept 9, 2016
71// added class eckardt_point: January 12, 2017
72// added class surface_object: March 18, 2017
73// added class vector_space: December 2, 2018
74
75#include <iostream>
76#include <fstream>
77#include <iomanip>
78
79#include <cstring>
80#include <math.h>
81#include <limits.h>
82#include <sstream>
83
84#include <map>
85#include <vector>
86#include <deque>
87#include <string>
88
89
90
91
92
93/*--------------------------------------------------------------------*/
95/*--------------------------------------------------------------------*/
96#if __cplusplus >= 201103L
97#define COLOR_UNICODE "\u001b"
98#else
99#define COLOR_UNICODE "\x1b"
100#endif
101
102#define RESET_COLOR_SCHEME COLOR_UNICODE "[0m"
103#define BLACK COLOR_UNICODE "[30m"
104#define RED COLOR_UNICODE "[31m"
105#define GREEN COLOR_UNICODE "[32m"
106#define YELLOW COLOR_UNICODE "[33m"
107#define BLUE COLOR_UNICODE "[34m"
108#define MAGENTA COLOR_UNICODE "[35m"
109#define CYAN COLOR_UNICODE "[36m"
110#define WHITE COLOR_UNICODE "[37m"
111
112#define BRIGHT_BLACK COLOR_UNICODE "[30;1m"
113#define BRIGHT_RED COLOR_UNICODE "[31;1m"
114#define BRIGHT_GREEN COLOR_UNICODE "[32;1m"
115#define BRIGHT_YELLOW COLOR_UNICODE "[33;1m"
116#define BRIGHT_BLUE COLOR_UNICODE "[34;1m"
117#define BRIGHT_MAGENTA COLOR_UNICODE "[35;1m"
118#define BRIGHT_CYAN COLOR_UNICODE "[36;1m"
119#define BRIGHT_WHITE COLOR_UNICODE "[37;1m"
120/*--------------------------------------------------------------------*/
121
122
123/*--------------------------------------------------------------------*/
127/*--------------------------------------------------------------------*/
128#if defined(unix) || defined(__unix) || defined(__unix__)
129#define SYSTEMUNIX
130#endif
131
132#if defined(_WIN32) || defined(_WIN64)
133#define SYSTEMWINDOWS
134#endif
135
136#if defined(__APPLE__) || defined(__MACH__)
137#define SYSTEMUNIX
138#define SYSTEM_IS_MACINTOSH
139 // use Mac specific stuff like asking how much memory the process uses.
140#endif
141
142#if defined(__linux__) || defined(linux) || defined(__linux)
143#define SYSTEM_LINUX
144#endif
145/*--------------------------------------------------------------------*/
146
147#define SYSTEMUNIX
148
149
150#define HAS_NAUTY 1
151
152// need to be defined in nauty_interface.cpp also.
153
154
155#ifdef SYSTEMWINDOWS
156//#pragma warning(disable : 4996)
157#include <string>
158#endif
159
160#define MEMORY_DEBUG
161
162#define MAGIC_SYNC 762873656L
163
164
165
166// define exactly one of the following to match your system:
167#undef int_HAS_2_charS
168#define int_HAS_4_charS
169#undef int_HAS_8_charS
170
171#ifdef int_HAS_2_charS
172typedef short int_2;
173typedef long int_4;
174typedef long int_8;
175typedef unsigned short uint_2;
176typedef unsigned long uint_4;
177typedef unsigned long uint_8;
178#endif
179#ifdef int_HAS_4_charS
180typedef short int_2;
181typedef int int_4;
182typedef long int_8;
183typedef unsigned short uint_2;
184typedef unsigned int uint_4;
185typedef unsigned long uint_8;
186#endif
187#ifdef int_HAS_8_charS
188typedef short int_2;
189typedef short int int_4;
190typedef int int_8;
191typedef unsigned short uint_2;
192typedef unsigned short int uint_4;
193typedef unsigned int uint_8;
194#endif
195
196
197typedef int *pint;
198typedef long int *plint;
199typedef int **ppint;
200typedef long int **pplint;
201typedef short SHORT;
202typedef SHORT *PSHORT;
203typedef char *pchar;
204typedef unsigned char uchar;
205typedef uchar *puchar;
206typedef void *pvoid;
207
208
209
210#define PAGE_LENGTH_LOG 20
211#define MAX_PAGE_SIZE_IN_charS (5 * 1L << 20)
212#define BUFSIZE 100000
213#undef DEBUG_PAGE_STORAGE
214
215
216#define MINIMUM(x, y) ( ((x) < (y)) ? (x) : (y) )
217#define MAXIMUM(x, y) ( ((x) > (y)) ? (x) : (y) )
218#define MIN(x, y) ( ((x) < (y)) ? (x) : (y) )
219#define MAX(x, y) ( ((x) > (y)) ? (x) : (y) )
220#define ABS(x) ( ((x) < 0 ) ? (-(x)) : (x) )
221#define EVEN(x) ( ((x) % 2) == 0 )
222#define ODD(x) ( ((x) % 2) == 1 )
223#define DOUBLYEVEN(x) ( ((x) % 4) == 0 )
224#define SINGLYEVEN(x) ( ((x) % 4) == 2 )
225#define ONE_char_int(a) (((a) > -126) && ((a) < 127))
226#define ONE_MILLION 1000000
227#define ONE_HUNDRED_THOUSAND 100000
228
229
230#ifndef TRUE
231#define TRUE 1
232#endif
233#ifndef FALSE
234#define FALSE 0
235#endif
236#ifndef M_PI
237#define M_PI 3.14159265358979323846264
238#endif
239
240
242
243namespace orbiter {
244
245
246
248
249namespace layer1_foundations {
250
251
252
254
255namespace algebra {
256
257 // algebra:
258 class a_domain;
259 class algebra_global;
260 class generators_symplectic_group;
261 class gl_class_rep;
262 class gl_classes;
263 class group_generators_domain;
264 class heisenberg;
265 class matrix_block_data;
266 class null_polarity_generator;
267 class rank_checker;
268 class vector_space;
269
270}
271
272
274
275namespace algebraic_geometry {
276
277 // surfaces:
278 class arc_lifting_with_two_lines;
279 class clebsch_map;
280 class cubic_curve;
281 class del_pezzo_surface_of_degree_two_domain;
282 class del_pezzo_surface_of_degree_two_object;
283 class eckardt_point_info;
284 class eckardt_point;
285 class quartic_curve_domain;
286 class quartic_curve_object_properties;
287 class quartic_curve_object;
288 class schlaefli_labels;
289 class schlaefli;
290 class seventytwo_cases;
291 class surface_domain;
292 class surface_object_properties;
293 class surface_object;
294 class web_of_cubic_curves;
295
296}
297
299
300namespace coding_theory {
301
302 // coding_theory:
303 class coding_theory_domain;
304 class create_BCH_code;
305
306}
307
309
310namespace combinatorics {
311
312 // combinatorics:
313 class boolean_function_domain;
314 class brick_domain;
315 class classification_of_objects_description;
316 class classification_of_objects_report_options;
317 class classification_of_objects;
318 class combinatorics_domain;
319 class encoded_combinatorial_object;
320 class geo_parameter;
321 class pentomino_puzzle;
322 class tdo_data;
323 class tdo_refinement_description;
324 class tdo_refinement;
325 class tdo_scheme_compute;
326 class tdo_scheme_synthetic;
327 struct solution_file_data;
328
329}
330
331
333
334namespace cryptography {
335
336 // cryptography
337 class cryptography_domain;
338
339}
340
342
343namespace data_structures {
344
345 // data_structures:
346 class algorithms;
347 class bitmatrix;
348 class bitvector;
349 class classify_bitvectors;
350 class classify_using_canonical_forms;
351 class data_file;
352 class data_input_stream_description;
353 class data_input_stream;
354 class data_structures_global;
355 class fancy_set;
356 class int_matrix;
357 class int_vec;
358 class int_vector;
359 class lint_vec;
360 class nauty_output;
361 class page_storage;
362 class partitionstack;
363 class set_builder_description;
364 class set_builder;
365 class set_of_sets_lint;
366 class set_of_sets;
367 class sorting;
368 class spreadsheet;
369 class string_tools;
370 class tally_vector_data;
371 class tally;
372 class vector_hashing;
373
374}
375
376
378
379namespace expression_parser {
380
381 // expression_parser:
382 class expression_parser_domain;
383 class expression_parser;
384 class formula;
385 class lexer;
386 class syntax_tree_node_terminal;
387 class syntax_tree_node;
388 class syntax_tree;
389
390}
391
392
394
395namespace field_theory {
396
397 // finite_fields:
398 class finite_field_activity_description;
399 class finite_field_activity;
400 class finite_field_description;
401 class finite_field;
402 class finite_field_implementation_by_tables;
403 class finite_field_implementation_wo_tables;
404 class norm_tables;
405 class nth_roots;
406 class subfield_structure;
407}
408
409
411
412namespace geometry {
413
414
415 // geometry:
418 class andre_construction;
419 class arc_basic;
421 class buekenhout_metz;
422 class decomposition;
424 class flag;
427 class geometry_global;
428 class grassmann_embedded;
429 class grassmann;
430 class hermitian;
431 class hjelmslev;
434 class knarr;
436 class point_line;
437 class points_and_lines;
438 class polarity;
440 class projective_space;
441 class spread_tables;
442 class W3q;
443
444}
445
447
449
450 // geometry_builder:
451 class cperm;
453 class gen_geo_conf;
454 class gen_geo;
457 class geometry_builder;
458 class girth_test;
459 class inc_encoding;
460 class incidence;
461 class iso_type;
462 class test_semicanonical;
463
464}
465
466// globals:
467class function_command;
469class function_polish;
470class numerics;
471
472
474
475namespace graph_theory {
476
477 // graph_theory
479 class clique_finder;
480 class colored_graph;
481 class graph_layer;
482 class graph_node;
484 class layered_graph;
485 class rainbow_cliques;
486
487}
488
489// graph_theory_nauty
490class nauty_interface;
491
493
494namespace graphics {
495
496 // graphics:
497 class animate;
503 class graphical_output;
505 class mp_graphics;
507 class parametric_curve;
508 class plot_tools;
509 class povray_interface;
511 class scene;
512 class tree_draw_options;
513 class tree;
514 class tree_node;
515 class video_draw_options;
516 // pointer types
518
519
520}
521
522
523// knowledge_base:
524class knowledge_base;
525
526
528
529namespace linear_algebra {
530
531 // linear_algebra:
532 class linear_algebra;
534
535}
536
538
539namespace number_theory {
540
541 // number_theory:
542 class cyclotomic_sets;
543 class elliptic_curve;
546
547}
548
550
551namespace orbiter_kernel_system {
552
554 class file_io;
555 class file_output;
556 class latex_interface;
557 class magma_interface;
560 class memory_object;
561 class orbiter_data_file;
562 class orbiter_session;
565 class os_interface;
566 class override_double;
567 class prepare_frames;
568
569}
570
571
573
574namespace orthogonal_geometry {
575
576 // orthogonal:
577 class blt_set_domain;
578 class blt_set_invariants;
580 class orthogonal;
581 class unusual_model;
582
583}
584
586
587namespace ring_theory {
588 // ring_theory:
589 class finite_ring;
591 class longinteger_domain;
592 class longinteger_object;
593 class partial_derivative;
595 class polynomial_double;
596 class ring_theory_global;
598 class unipoly_domain;
599
601 typedef void *unipoly_object;
602
603}
604
606
607namespace solvers {
608 // solvers
610 class diophant_activity;
611 class diophant_create;
613 class diophant;
615 class dlx_solver;
616 struct dlx_node;
617 typedef struct dlx_node *pdlx_node;
618}
619
620
621
622
623
624#ifdef MEMORY_DEBUG
625#define NEW_int(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_int(n, __FILE__, __LINE__)
626#define NEW_int_with_tracking(n, file, line) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_int(n, file, line)
627#define NEW_pint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pint(n, __FILE__, __LINE__)
628#define NEW_lint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_lint(n, __FILE__, __LINE__)
629#define NEW_plint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_plint(n, __FILE__, __LINE__)
630#define NEW_ppint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_ppint(n, __FILE__, __LINE__)
631#define NEW_pplint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pplint(n, __FILE__, __LINE__)
632#define NEW_char(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_char(n, __FILE__, __LINE__)
633#define NEW_char_with_tracking(n, file, line) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_char(n, file, line)
634#define NEW_uchar(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_uchar(n, __FILE__, __LINE__)
635#define NEW_pchar(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pchar(n, __FILE__, __LINE__)
636#define NEW_puchar(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_puchar(n, __FILE__, __LINE__)
637#define NEW_pvoid(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pvoid(n, __FILE__, __LINE__)
638#define NEW_OBJECT(type) (type *)orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_OBJECT(new type, (std::size_t) sizeof(type), #type, __FILE__, __LINE__)
639#define NEW_OBJECTS(type, n) (type *)orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_OBJECTS(new type[n], n, (std::size_t) sizeof(type), #type, __FILE__, __LINE__)
640#define FREE_int(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_int(p, __FILE__, __LINE__)
641#define FREE_pint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pint(p, __FILE__, __LINE__)
642#define FREE_lint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_lint(p, __FILE__, __LINE__)
643#define FREE_plint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_plint(p, __FILE__, __LINE__)
644#define FREE_ppint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_ppint(p, __FILE__, __LINE__)
645#define FREE_pplint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pplint(p, __FILE__, __LINE__)
646#define FREE_char(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_char(p, __FILE__, __LINE__)
647#define FREE_uchar(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_uchar(p, __FILE__, __LINE__)
648#define FREE_pchar(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pchar(p, __FILE__, __LINE__)
649#define FREE_puchar(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_puchar(p, __FILE__, __LINE__)
650#define FREE_pvoid(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pvoid(p, __FILE__, __LINE__)
651#define FREE_OBJECT(p) {orbiter_kernel_system::Orbiter->global_mem_object_registry->free_OBJECT(p, __FILE__, __LINE__); delete p;}
652#define FREE_OBJECTS(p) {orbiter_kernel_system::Orbiter->global_mem_object_registry->free_OBJECTS(p, __FILE__, __LINE__); delete [] p;}
653#else
654#define NEW_int(n) new int[n]
655#define NEW_int_with_tracking(n, file, line) new int[n]
656#define NEW_pint(n) new pint[n]
657#define NEW_lint(n) new long int[n]
658#define NEW_lint(n) new (long int *)[n]
659#define NEW_ppint(n) new ppint[n]
660#define NEW_pplint(n) new pplint[n]
661#define NEW_char(n) new char[n]
662#define NEW_char_with_tracking(n, file, line) new char[n]
663#define NEW_uchar(n) new uchar[n]
664#define NEW_pchar(n) new pchar[n]
665#define NEW_puchar(n) new puchar[n]
666#define NEW_pvoid(n) new pvoid[n]
667#define NEW_OBJECT(type) new type
668#define NEW_OBJECTS(type, n) new type[n]
669#define FREE_int(p) delete [] p
670#define FREE_pint(p) delete [] p
671#define FREE_lint(p) delete [] p
672#define FREE_plint(p) delete [] p
673#define FREE_ppint(p) delete [] p
674#define FREE_pplint(p) delete [] p
675#define FREE_char(p) delete [] p
676#define FREE_uchar(p) delete [] p
677#define FREE_pchar(p) delete [] p
678#define FREE_puchar(p) delete [] p
679#define FREE_pvoid(p) delete [] p
680#define FREE_OBJECT(p) delete p
681#define FREE_OBJECTS(p) delete [] p
682#endif
683
684
685#define Int_vec_print(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print(A, B, C)
686#define Lint_vec_print(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print(A, B, C)
687#define Int_vec_print_fully(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_fully(A, B, C)
688#define Lint_vec_print_fully(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print_fully(A, B, C)
689
690#define Int_vec_print_integer_matrix(A,B,C,D) orbiter_kernel_system::Orbiter->Int_vec->print_integer_matrix(A, B, C, D)
691#define Int_vec_print_integer_matrix_width(A,B,C,D,E,F) orbiter_kernel_system::Orbiter->Int_vec->print_integer_matrix_width(A, B, C, D, E, F)
692
693#define Int_vec_copy(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->copy(A, B, C)
694#define Lint_vec_copy(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->copy(A, B, C)
695
696#define Int_vec_print_to_str(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_to_str(A, B, C)
697#define Lint_vec_print_to_str(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print_to_str(A, B, C)
698
699
700#define Int_vec_print_str_naked(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_str_naked(A, B, C)
701
702
703#define Int_vec_print_GAP(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_GAP(A, B, C)
704#define Lint_vec_print_GAP(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print_GAP(A, B, C)
705
706
707#define Int_matrix_print(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->matrix_print(A, B, C)
708#define Lint_matrix_print(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->matrix_print(A, B, C)
709
710#define Int_matrix_print_bitwise(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->matrix_print_bitwise(A, B, C)
711
712
713#define Int_vec_zero(A, B) orbiter_kernel_system::Orbiter->Int_vec->zero(A, B);
714#define Lint_vec_zero(A, B) orbiter_kernel_system::Orbiter->Lint_vec->zero(A, B);
715
716#define Int_vec_scan(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->scan(A, B, C)
717#define Lint_vec_scan(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->scan(A, B, C)
718
719#define Get_int_vector_from_label(A, B, C, D) orbiter_kernel_system::Orbiter->get_int_vector_from_label(A, B, C, D)
720#define Get_lint_vector_from_label(A, B, C, D) orbiter_kernel_system::Orbiter->get_lint_vector_from_label(A, B, C, D)
721
722#define Int_vec_copy_to_lint(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->copy_to_lint(A, B, C)
723#define Lint_vec_copy_to_int(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->copy_to_int(A, B, C)
724
725
726#define Int_vec_print_integer_matrix_in_C_source(A, B, C, D) orbiter_kernel_system::Orbiter->Int_vec->print_integer_matrix_in_C_source(A, B, C, D)
727
729 t_LEX, // lexicographical
730 t_PART, // by partition type
731};
732
733
735 t_PTS, // points
736 t_LNS, // lines
737 t_PNL, // points and lines
738 t_PAC, // packing
739 t_INC, // incidence geometry
740 t_LS // large set
742
744 t_EQ, // equal to the given value
745 t_LE, // less than or equal to the given value
746 t_INT, // must be within the given interval
747 t_ZOR // zero or equal to the given value
748};
749
782};
783
784
785
789
790
792{
797 PLUS='+',
798 MINUS='-',
804 COMMA=',',
805 NOT='!',
806
807 // comparisons
808 LT='<',
809 GT='>',
810 LE, // <=
811 GE, // >=
812 EQ, // ==
813 NE, // !=
814 AND, // &&
815 OR, // ||
816
817 // special assignments
818
822 ASSIGN_DIV // +/
823
825
827{
832
833
851
852};
853
854
855
856
857}}
858
859
860#include "algebra/algebra.h"
865#include "data_structures/data_structures.h"
868#include "geometry/geometry.h"
870#include "globals/globals.h"
871#include "graph_theory/graph_theory.h"
872#include "graph_theory_nauty/graph_theory_nauty.h"
873#include "graphics/graphics.h"
880#include "solvers/solvers.h"
881
882
883// Eigen_interface:
884void orbiter_eigenvalues(int *Mtx, int nb_points, double *E, int verbose_level);
885
886
887
888#endif /* ORBITER_SRC_LIB_FOUNDATIONS_FOUNDATIONS_H_ */
889
890
891
an individual command which is part of a function expressed in reverse polish notation
Definition: globals.h:27
description of a function in reverse polish notation from the command line
Definition: globals.h:61
a set of functions in reverse polish notation
Definition: globals.h:87
isomorphism between the W(3,q) and the Q(4,q) generalized quadrangles
Definition: geometry.h:2445
a line in the projective plane created using the Andre construction
Definition: geometry.h:104
a point in the projective plane created using the Andre construction
Definition: geometry.h:75
Andre / Bruck / Bose construction of a translation plane from a spread.
Definition: geometry.h:28
arcs, ovals, hyperovals etc. in projective planes
Definition: geometry.h:138
arcs, ovals, hyperovals etc. in projective planes
Definition: geometry.h:182
decomposition of an incidence matrix
Definition: geometry.h:400
a maximal chain of subspaces
Definition: geometry.h:522
to create a geometric object from a description using class geometric_object_description
Definition: geometry.h:568
to create a geometric object encoded as a set using a description from the command line
Definition: geometry.h:598
various functions related to geometries
Definition: geometry.h:721
to rank and unrank subspaces of a fixed dimension in F_q^n
Definition: geometry.h:892
interface for various incidence geometries
Definition: geometry.h:1099
the Klein correspondence between lines in PG(3,q) and points on the Klein quadric
Definition: geometry.h:1353
the Knarr construction of a GQ from a BLT-set
Definition: geometry.h:1439
a combinatorial object for which a canonical form can be computed using Nauty
Definition: geometry.h:1487
a data structure for general projective planes, including non-desarguesian ones
Definition: geometry.h:1696
points and lines in projective space, for instance on a surface
Definition: geometry.h:1822
a polarity between points and hyperplanes in PG(n,q)
Definition: geometry.h:1857
internal representation of a projective space PG(n,q)
Definition: geometry.h:1885
projective space PG(n,q) of dimension n over Fq
Definition: geometry.h:1916
tables with line-spreads in PG(3,q)
Definition: geometry.h:2335
a permutation for use in class gen_geo
a row-tactical decomposition with fuse, to be used by the geometry_builder
description of a configuration which is part of class decomposition_with_fuse
classification of geometries with a given row-tactical decomposition
classification of geometries with a given row-tactical decomposition
row-by-row encoding of an incidence geometry
encoding of an incidence geometry during classification
classification of geometries based on canonical forms
parameters that control the clique finding process
Definition: graph_theory.h:32
finds all cliques of a certain size in a graph
Definition: graph_theory.h:115
part of the data structure layered_graph
Definition: graph_theory.h:455
part of the data structure layered_graph
Definition: graph_theory.h:482
a data structure to store layered graphs or Hasse diagrams
Definition: graph_theory.h:654
to search for rainbow cliques in graphs
Definition: graph_theory.h:736
creates 3D animations using Povray
Definition: graphics.h:29
a set of objects that should be drawn with certain povray properties
Definition: graphics.h:349
a catch-all class for things related to 2D graphics
Definition: graphics.h:411
options for drawing an object of type layered_graph
Definition: graphics.h:457
a general 2D graphical output interface (metapost, tikz, postscript)
Definition: graphics.h:545
an individual point on a continuous curve, sampled through parametric_curve
Definition: graphics.h:920
a continuous curve sampled by individual points
Definition: graphics.h:939
utility functions for plotting (graphing)
Definition: graphics.h:972
a collection of 3D geometry objects
Definition: graphics.h:1152
part of the data structure tree
Definition: graphics.h:1547
provides access to pre-computed combinatorial data in encoded form
a fixed elliptic curve in Weierstrass form
Definition: number_theory.h:58
numerical functions, mostly concerned with double
Definition: globals.h:129
a wrapper class for an ofstream which allows to store extra data
a class related to mem_object_registry
The orbiter session is responsible for the command line interface and the program execution.
symbol table to store data entries for the orbiter run-time system
symbol table to store data entries for the orbiter run-time system
to temporarily override a double variable with a new value
to prepare files using a unified file naming scheme
indexing of points in an orthogonal geometry O^epsilon(n,q)
Definition: orthogonal.h:135
Penttila's unusual model to create BLT-sets.
Definition: orthogonal.h:676
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
Definition: ring_theory.h:88
domain to compute with objects of type longinteger
Definition: ring_theory.h:240
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
partial derivative connects two homogeneous polynomial domains
Definition: ring_theory.h:432
domain for polynomials with double coefficients
Definition: ring_theory.h:465
polynomials with double coefficients, related to class polynomial_double_domain
Definition: ring_theory.h:500
a table of all irreducible polynomials over GF(q) of degree less than a certain value
Definition: ring_theory.h:659
domain of polynomials in one variable over a finite field
Definition: ring_theory.h:691
to describe an activity for a diophantine system from command line arguments
Definition: solvers.h:27
to perform an activity for a diophantine system using diophant_activity_description
Definition: solvers.h:77
to create a diophantine system from diophant_description
Definition: solvers.h:101
to describe a diophantine system from command line arguments
Definition: solvers.h:125
diophantine systems of equations (i.e., linear systems over the integers)
Definition: solvers.h:209
description of a problem instance for dancing links solver
Definition: solvers.h:406
An implementation of Donald Knuth's dancing links algorithm to solve exact cover problems.
Definition: solvers.h:449
long int * plint
Definition: foundations.h:198
void orbiter_eigenvalues(int *Mtx, int nb_points, double *E, int verbose_level)
int ** ppint
Definition: foundations.h:199
unsigned long uint_8
Definition: foundations.h:185
unsigned char uchar
Definition: foundations.h:204
char * pchar
Definition: foundations.h:203
int * pint
Definition: foundations.h:197
SHORT * PSHORT
Definition: foundations.h:202
short SHORT
Definition: foundations.h:201
unsigned short uint_2
Definition: foundations.h:183
int int_4
Definition: foundations.h:181
uchar * puchar
Definition: foundations.h:205
long int ** pplint
Definition: foundations.h:200
void * pvoid
Definition: foundations.h:206
unsigned int uint_4
Definition: foundations.h:184
short int_2
Definition: foundations.h:180
long int_8
Definition: foundations.h:182
ring_theory::longinteger_object * plonginteger_object
Definition: foundations.h:598
@ t_classification_of_cubic_surfaces_with_double_sixes
Definition: foundations.h:762
@ t_data_input_stream_incidence_geometry_by_row_ranks
Definition: foundations.h:849
@ t_data_input_stream_file_of_packings_through_spread_table
Definition: foundations.h:843
@ t_data_input_stream_file_of_incidence_geometries_by_row_ranks
Definition: foundations.h:847
the orbiter library for the classification of combinatorial objects
internal class for the dancing links exact cover algorithm
Definition: solvers.h:567