CREATE TABLE gps_groups (
	Agroup	boolean,	-- Whether all Sylow subgroups are abelian
	Zgroup	boolean,	-- Whether all Sylow subgroups are cyclic
	abelian	boolean,	-- Whether this group is {{KNOWL('group.abelian', 'abelian')}}
	abelian_quotient	text,	-- The {{KNOWL('group.label', 'label')}} of the {{KNOWL('group.abelianization', 'maximal abelian quotient')}}
	all_subgroups_known	boolean,	-- Whether all subgroups (up to conjugacy or automorphism) are included in the gps_subgroups table
	almost_simple	boolean,	-- Whether this group is {{KNOWL('group.almost_simple', 'almost simple')}}
	aut_abelian	boolean,	-- whether the automorphism group is abelian
	aut_cyclic	boolean,	-- whether the automorphism group is cyclic
	aut_derived_length	smallint,	-- the derived length of the automorphism group
	aut_exponent	numeric,	-- the exponent of the automorphism group
	aut_gen_orders	_numeric,	-- the orders of the generators of the automorphism group
	aut_gens	_numeric,	-- generators of the automorphism groups, stored as m+1 lists of n encoded elements of the group, where m is the number of generators of the automorphism group, the first list picks out generators of the group and the next n lists give the images of these generators under automorphisms
	aut_group	text,	-- The {{KNOWL('group.label', 'label')}} of the automorphism group
	aut_hash	bigint,	-- the hash of the automorphism group
	aut_nilpotency_class	smallint,	-- the nilpotency class of the automorphism group
	aut_nilpotent	boolean,	-- whether the automorphism group is nilpotent
	aut_order	numeric,	-- The order of the automorphism group
	aut_permdeg	integer,	-- the degree of the stored permutation representation of the automorphism group
	aut_perms	_numeric,	-- the generators of the stored permutation representations of the automorphism group
	aut_phi_ratio	double precision,	-- the ratio of the size of the automorphism group by the Euler phi function applied to the size of the group
	aut_solvable	boolean,	-- whether the automorphism group is solvable
	aut_stats	_numeric,	-- the list of pairs (o,m) where m is the number of autjugacy classes with order o
	aut_supersolvable	boolean,	-- whether the automorphism group is supersolvable
	aut_tex	text,	-- latex for the automorphism group
	autcent_abelian	boolean,	-- whether the centralizer of the inner automorphisms within the automorphism group is abelian
	autcent_cyclic	boolean,	-- whether the centralizer of the inner automorphisms within the automorphism group is cyclic
	autcent_exponent	numeric,	-- the exponent of the centralizer of the inner automorphisms within the automorphism group
	autcent_group	text,	-- abstract group label for the centralizer of the inner automorphisms within the automorphism group
	autcent_hash	bigint,	-- the hash of the centralizer of the inner automorphisms within the automorphism group
	autcent_nilpotent	boolean,	-- whether the centralizer of the inner automorphisms within the automorphism group is nilpotent
	autcent_order	numeric,	-- the order of the centralizer of the inner automorphisms within the automorphism group
	autcent_solvable	boolean,	-- whether the centralizer of the inner automorphisms within the automorphism group is solvable
	autcent_split	boolean,	-- whether the centralizer of the inner automorphisms within the automorphism group is split
	autcent_supersolvable	boolean,	-- whether the centralizer of the inner automorphisms within the automorphism group is supersolvable
	autcent_tex	text,	-- latex for the centralizer of the inner automorphisms within the automorphism group
	autcentquo_abelian	boolean,	-- whether the quotient of the automorphism group by the centralizer of the inner automorphisms is abelian
	autcentquo_cyclic	boolean,	-- whether the quotient of the automorphism group by the centralizer of the inner automorphisms is cyclic
	autcentquo_exponent	numeric,	-- the exponent of the quotient of the automorphism group by the centralizer of the inner automorphisms
	autcentquo_group	text,	-- abstract group label for the quotient of the automorphism group by the centralizer of the inner automorphisms
	autcentquo_hash	bigint,	-- the hash of the quotient of the automorphism group by the centralizer of the inner automorphisms
	autcentquo_nilpotent	boolean,	-- whether the quotient of the automorphism group by the centralizer of the inner automorphisms is nilpotent
	autcentquo_order	numeric,	-- the order of the quotient of the automorphism group by the centralizer of the inner automorphisms
	autcentquo_solvable	boolean,	-- whether the quotient of the automorphism group by the centralizer of the inner automorphisms is solvable
	autcentquo_supersolvable	boolean,	-- whether the quotient of the automorphism group by the centralizer of the inner automorphisms is supersolvable
	autcentquo_tex	text,	-- latex for the quotient of the automorphism group by the centralizer of the inner automorphisms
	cc_stats	_numeric,	-- the list of pairs (o,m) where m is the number of conjugacy classes with order o
	center_label	text,	-- The {{KNOWL('group.label', 'label')}} of the center
	center_order	numeric,	-- Cardinality of the center
	central_product	boolean,	-- Whether this group is a central product
	central_quotient	text,	-- The {{KNOWL('group.label', 'label')}} of the {{KNOWL('group.central_quotient')}}
	commutator_count	integer,	-- The minimal integer $l$ so that every element of the {{KNOWL('group.commutator_subgroup', 'commutator subgroup')}} can be written as a product of at most $l$ commutators
	commutator_label	text,	-- The {{KNOWL('group.label', 'label')}} of the {{KNOWL('group.commutator_subgroup', 'commutator subgroup')}}
	complements_known	boolean,	-- whether the complements are computed for all subgroups
	complete	boolean,	-- Whether this group is {{KNOWL('group.complete', 'complete')}}
	complex_characters_known	boolean,	-- whether the complex character table is stored for this group
	composition_factors	_text,	-- {{KNOWL('group.label', 'Labels')}} for the composition factors, sorted by order then id
	composition_length	smallint,	-- The number of composition factors
	conjugacy_classes_known	boolean,	-- whether we store conjugacy classes for this group in gps_conj_classes
	counter	integer,	-- The second part of the {{KNOWL('group.label', 'label')}} as an integer
	cyclic	boolean,	-- Whether this group is cyclic
	derived_length	smallint,	-- The derived length of this group: the number terms in the derived series
	dihedral	boolean,	-- Whether this group is a dihedral group
	direct_factorization	jsonb,	-- A list of pairs, each giving a {{KNOWL('group.label', 'label')}} and multiplicity so that this group is the direct product of the entries with the given multiplicities
	direct_product	boolean,	-- Whether this group is a nontrivial direct product
	div_stats	_numeric,	-- the list of pairs (o,m) where m is the number of divisions with order o
	element_repr_type	text,	-- the top level key in the representations dictionary describing how elements are represented as integers
	elementary	integer,	-- The product of the primes for which this group is {{KNOWL('group.elementary', '$p$-elementary')}}
	eulerian_function	numeric,	-- the ratio of the number of generating tuples with cardinality equal to the {{KNOWL('group.rank', 'rank')}} by the size of the {{KNOWL('group.automorphism', 'automorphism group')}}
	exponent	numeric,	-- The {{KNOWL('group.exponent', 'exponent')}} of the group
	exponents_of_order	_int2,	-- the exponents of the factorization of the {{KNOWL('group.order', 'order')}}, sorted in descending order (not necessarily in the same order as factors_of_order)
	factors_of_aut_order	_int4,	-- List of primes dividing the {{KNOWL('group.order', 'order')}} of the {{KNOWL('group.automorphism', 'automorphism group')}}
	factors_of_order	_int2,	-- List of primes dividing the {{KNOWL('group.order', 'order')}}
	faithful_reps	_numeric,	-- The list of triples (d, s, m), where d is the dimension, s the Schur indicator and m the number of faithful irreducible representations with dimension d and Schur indicator s
	familial	boolean,	-- Whether this group is part of any special family
	frattini_label	text,	-- Label for the isomorphism class of the {{KNOWL('group.frattini_subgroup', 'Frattini subgroup')}}
	frattini_quotient	text,	-- Label for the isomorphism class of the quotient by the {{KNOWL('group.frattini_subgroup', 'Frattini subgroup')}}
	hash	bigint,	-- A 63 bit integer derived from the group structure.  There are more hash collisions than ideal, since it needs to be both fast to compute and an isomorphism-invariant
	hyperelementary	integer,	-- The product of the primes for which this group is {{KNOWL('group.hyperelementary', '$p$-hyperelementary')}}
	id	bigint,	-- 
	inner_abelian	boolean,	-- whether the inner automorphism group is abelian
	inner_cyclic	boolean,	-- whether the inner automorphism group is cyclic
	inner_exponent	numeric,	-- the exponent of the inner automorphism group
	inner_gen_orders	_numeric,	-- the orders of the generators of the inner automorphism group
	inner_gens	_numeric,	-- the generators of the inner automorphism group, stored as m lists of n encoded elements of the group, where m is the number of generators of the inner automorphism group and n is the number of generators of the group
	inner_hash	bigint,	-- the hash of the inner automorphism group
	inner_nilpotent	boolean,	-- whether the inner automorphism group is nilpotent
	inner_order	numeric,	-- the order of the inner automorphism group
	inner_split	boolean,	-- whether the inner automorphism group is split
	inner_tex	text,	-- latex for the inner automorphism group
	inner_used	_int2,	-- a list of indexes of generators of the group so that the corresponding inner automorphisms generate the inner automorphism group
	irrC_degree	integer,	-- the minimum degree of a faithful irreducible complex representation of this group
	irrQ_degree	integer,	-- the minimum degree of a faithful irreducible rational representation of this group
	irrQ_dim	integer,	-- The smallest dimension (product of degree and Schur index) of an irreducible rational representation
	irrR_degree	integer,	-- The smallest degree of an irreducible real representation (may be the sum of two conjugate complex irreducible reps)
	irrep_stats	_numeric,	-- the list of pairs (d,m) where m is the number of complex irreducible characters of degree d
	label	text,	-- The {{KNOWL('group.label', 'label')}} of this group
	linC_count	numeric,	-- The number of complex representations with minimal dimension
	linC_degree	integer,	-- the minimum degree of a faithful complex representaiton of this group (not necessarily irreducible)
	linFp_degree	integer,	-- The minimum size matrix group over a finite prime field where this group arises as a subgroup
	linFq_degree	integer,	-- the minimum degree of a faithful representation of this group over some finite field (not necessarily irreducible)
	linQ_degree	integer,	-- the minimum degree of a faithful rational representation of this group (not necessarily irreducible)
	linQ_degree_count	numeric,	-- The number of rational characters with minimal degree (may not be irreducible, and the underlying representation may not be rational if a Schur index is not 1
	linQ_dim	integer,	-- The smallest dimension (product of degree and Schur index) of a rational representation
	linQ_dim_count	numeric,	-- The number of rational representations with minimal dimension (product of degree and Schur index)
	linR_count	numeric,	-- The number of real representations with minimal dimension
	linR_degree	integer,	-- The smallest degree of a real representation
	maximal_subgroups_known	boolean,	-- Whether we store all {{KNOWL('group.maximal_subgroup', 'maximal subgroups')}} of this group
	metabelian	boolean,	-- Whether this group is {{KNOWL('group.metabelian', 'metabelian')}}
	metacyclic	boolean,	-- Whether this group is {{KNOWL('group.metacyclic', 'metacyclic')}}
	monomial	boolean,	-- Whether this group is {{KNOWL('group.monomial', 'monomial')}}
	name	text,	-- A string describing the group, as produced by Magma's GroupName function
	ngens	smallint,	-- Number of generators in the presentation (pcgroup) or list of generators (permutation group)
	nilpotency_class	smallint,	-- The {{KNOWL('group.nilpotent', 'nilpotency class')}}: the smallest $n$ such that G has a central series of length $n$ ($-1$ if not nilpotent)
	nilpotent	boolean,	-- Whether this group is {{KNOWL('group.nilpotent')}}
	normal_counts	_int4,	-- the list of counts C(d) of normal subgroups of size d as d ranges over the divisors of the size of the group, in order
	normal_index_bound	numeric,	-- if nonzero, stores normal subgroups of index at most this value
	normal_order_bound	numeric,	-- if nonzero, stores normal subgroups of order at most this value
	normal_subgroups_known	boolean,	-- Whether we store all {{KNOWL('group.subgroup.normal', 'normal subgroups')}} of this group
	number_autjugacy_classes	integer,	-- The number of {{KNOWL('group.autjugacy_class', 'autjugacy classes')}}
	number_characteristic_subgroups	integer,	-- The number of {{KNOWL('group.characteristic_subgroup', 'characteristic subgroups')}} of this group
	number_conjugacy_classes	integer,	-- The number of {{KNOWL('group.conjugacy_class', 'conjugacy classes')}} in this group
	number_divisions	integer,	-- The number of {{KNOWL('group.division', 'divisions')}} in this group
	number_normal_subgroups	integer,	-- The number of {{KNOWL('group.subgroup.normal', 'normal subgroups')}} of this group
	number_subgroup_autclasses	integer,	-- The number of {{KNOWL('group.subgroup', 'subgroups')}} up to {{KNOWL('group.autjugate_subgroup', 'automorphism')}}
	number_subgroup_classes	integer,	-- The number of conjugacy classes of {{KNOWL('group.subgroup', 'subgroups')}} of this group
	number_subgroups	numeric,	-- The number of {{KNOWL('group.subgroup', 'subgroups')}} of this group
	old_label	text,	-- If the label has been switched from temp to permanent, store temp here
	order	numeric,	-- The {{KNOWL('group.order', 'order')}} of the group
	order_factorization_type	integer,	-- based on the factorization of the size of the group: "0" if 1; "1","2","3","7" if p^1, p^2, p^(3-6), p^(7+); "11" if squarefree otherwise, "22" if p^2q^2, "31" if pq^(2-4), "51" if pq^(5+), "32" if p^2q^(3+), "33" if p^(3+)q^(3+), "222" if max valuation is 2, "311" otherwise if only one prime has valuation larger than 1, "321" if no other condition holds
	order_stats	_numeric,	-- The {{KNOWL('group.order_stats', 'order statistics')}}: the list of pairs $(o, m)$ where $m$ is the number of elements of order $o$.
	outer_abelian	boolean,	-- whether the outer automorphism group is abelian
	outer_cyclic	boolean,	-- whether the outer automorphism group is cyclic
	outer_equivalence	boolean,	-- Whether subgroups have been computed up to automorphism (rather than up to conjugacy)
	outer_exponent	numeric,	-- the exponent of the outer automorphism group
	outer_gen_orders	_numeric,	-- the orders of the generators of the outer automorphism group
	outer_gen_pows	_numeric,	-- a list of encoded elements of the group of length equal to the length of outer_gens, so that when each outer generator is raised to its order in the outer autmorphism group, the result is conjugation by the stored elements
	outer_gens	_numeric,	-- the generators of the outer automorphism group, stored as m lists of n encoded elements of the group, where m is the number of generators of the outer automorphism group and n is the number of generators of the group
	outer_group	text,	-- The label of the {{KNOWL('group.outer_aut', 'outer automorphism group')}} of this group
	outer_hash	bigint,	-- the hash of the outer automorphism group
	outer_nilpotent	boolean,	-- whether the outer automorphism group is nilpotent
	outer_order	numeric,	-- The {{KNOWL('group.order', 'order')}} of the {{KNOWL('group.outer_aut', 'outer automorphism group')}} of this group
	outer_permdeg	integer,	-- the degree of the stored permutation representation of the outer automorphism group
	outer_perms	_numeric,	-- the generators of the stored permutation representations of the outer automorphism group
	outer_solvable	boolean,	-- whether the outer automorphism group is solvable
	outer_supersolvable	boolean,	-- whether the outer automorphism group is supersolvable
	outer_tex	text,	-- latex for the outer automorphism group
	pc_rank	smallint,	-- the minimum number of generators in a polyclic presentation of this group (null if not solvable)
	perfect	boolean,	-- Whether this group is {{KNOWL('group.perfect', 'perfect')}}
	permutation_degree	integer,	-- the minimum degree of a faithful permutation representation of this group (not necessarily transitive)
	pgroup	smallint,	-- $1$ if trivial group, $p$ if {{KNOWL('group.order', 'order')}} a power of a prime $p$, otherwise $0$
	primary_abelian_invariants	_int4,	-- Invariants of the {{KNOWL('group.abelianization', 'maximal abelian quotient')}}, as a sorted list of prime powers
	quasisimple	boolean,	-- Whether this group is {{KNOWL('group.quasisimple', 'quasisimple')}}
	rank	smallint,	-- The {{KNOWL('group.rank', 'rank')}}: the minimal size of a generating system of $G$
	rational	boolean,	-- Whether this group is {{KNOWL('group.rational_group', 'rational')}}
	rational_characters_known	boolean,	-- whether the rational character table is stored for this group
	ratrep_stats	_numeric,	-- the list of pairs (d,m) where m is the number of irreducible rational characters of degree d
	representations	jsonb,	-- a dictionary giving constructions of the group; the keys are a subset of "PC", "Perm", "GLZ", "GLFp", "GLFq", "GLZN", and "Lie"; each value is another dictionary with keys that depend on the construction type.  For "PC", the small group integer encoding is in "code", the generators used are stored in "gens", the output of Magma's CompactPresentation is stored in "pres".  For "Perm", the degree is stored in "d" and encoded generators are stored in "gens".  For "GLZ", the dimension is stored in "d", a bound on the absolute value of the entries of the generators is stored in "b", and encoded generators are stored in "gens".  For "GLFp", the dimension is stored in "d", the cardinality of the coefficient field is stored in "p" and encoded generators are stored in "gens".  For "GLFq", the dimension is stored in "d", the cardinality of the coefficient field is stored in "q" and encoded generators are stored in "gens".  For "GLZN", the dimension is stored in "d", the cardinality of the coefficient ring is stored in "p" and the encoded generators are stored in "gens".  For "Lie", the family (like "PGU" or "SO") is stored in "family", the dimension in "d", the cardinality of the coefficient field in "q", and the encoded generators in "gens".
	schur_multiplier	_int4,	-- The Smith invariants for the {{KNOWL('group.schur_multiplier', 'Schur multiplier')}}
	semidirect_product	boolean,	-- Whether this group is a {{KNOWL('group.semidirect_product', 'semidirect product')}}
	simple	boolean,	-- Whether this group is {{KNOWL('group.simple', 'simple')}}
	smith_abelian_invariants	_int4,	-- Invariants of the {{KNOWL('group.abelianization', 'maximal abelian quotient')}}, as a sorted list of integers, each dividing the next
	solvability_type	smallint,	-- An integer encoding where along the spectrum from cyclic to nonsolvable this group is.  0=cyclic, 1=abelian and metacylic, 2=abelian, 3=nilpotent and metacyclic, 4=nilpotent and metabelian, 5=nilpotent, 6=metacyclic, 7=metabelian and supersolvable, 8=metabelian and monomial, 9=metabelian, 10=supersolvable, 11=monomial, 12=solvable, 13=nonsolvable
	solvable	boolean,	-- Whether this group is {{KNOWL('group.solvable', 'solvable')}}
	subgroup_inclusions_known	boolean,	-- Whether we store the inclusion relations between subgroup classes
	subgroup_index_bound	numeric,	-- We store all (equivalence classes of) subgroups of index up to this bound. Additional subgroups may also be stored (for example, normal subgroups, maximal subgroups, or subgroups of small order).  If 0, then we store a representative for every subgroup class.
	supersolvable	boolean,	-- Whether this group is {{KNOWL('group.supersolvable', 'supersolvable')}}
	sylow_subgroups_known	boolean,	-- Whether we store all of the {{KNOWL('group.sylow_subgroup', 'Sylow subgroups')}} of this group
	tex_name	text,	-- A latex description of this group, as output by Magma's GroupName function
	transitive_degree	integer,	-- The smallest degree in which there is a transitive permutation representation of this group; alternately, the minimal {{KNOWL('group.subgroup.index', 'index')}} of a subgroup with trivial {{KNOWL('group.core', 'core')}}.
	wreath_data	_text,	-- If this group is a wreath product, either a quadruple $(A, B, C, T)$ or a triple $(A, B, T)$.  In the first case, $A, B, and C$ are labels of subgroups with $C < B$, so that $G$ is the wreath product $A \wr B$ using the permutation action of $B$ on cosets of $C$ in $B$.  In the second case, we just give latex names for $A$ and $B$.  In either case, $T$ is a transitive group label for the relevant transitive permutation representation of $B$, such as 8T44.
	wreath_product	boolean 	-- Whether this subgroup is a nontrivial {{KNOWL('group.wreath_product', 'wreath product')}}
);