[GAP Forum] Stop GAP from storing group properties

Hulpke,Alexander Alexander.Hulpke at colostate.edu
Sat May 8 21:49:17 BST 2021


Dear Forum, Dear Marc Keilberg,

> I've been looking to sift through a particular family of a few ten-thousand
> groups, which are not in any of the current libraries, to see if they have
> certain properties.  While it's relatively easy to construct the entire
> family of groups via the anupq package, and the test I run on them is
> relatively quick (a second or two per group on my computer), I run into
> serious memory consumption issues when I go to start testing them all (with
> a function specifically written to perform the test in question).  While
> the list of groups I want only takes up a few gigabytes, and each iteration
> of the testing function should be consuming a small fraction of that before
> it completes, my total memory consumption constantly ticks up as I run
> through the list, ultimately consuming well more memory than the list of
> groups itself.

There are tools (such as `AttributeValueNotSet` that aim to do this, but it is still possible that attributes that get called in the course of the calculation still get stored.

What I have therefore done in such situations is to simply delete the whole group after having used it. This can happen in one of two ways (assuming L is your list of groups):

a) You do not need the groups, only data obtained from them, or one counterexample:

for i in [1..Length(L)] do
  G:=L[i];
  # now do the test
  ...
  Unbind(L[i]);  # so the group is gone as soon as the next iteration assignes G.
od;

A more subtle way (with keeping the list) is work on a new group G that is defined the same way (but is a different object. 
If you have permutation groups, you can do this as:

G:=Group(GeneratorsOfGroup(L[i]));
SetSize(G,Size(L[i])); # speeds things up if large

but I suspect you have PcGroups. For these, it is probably best to make a *new* pc group with the same generators, so that there is nothing stored through attributes of the pcgs. That is, you use:

G:=GroupByPcgs(Pcgs(L[i]));

You will get a formally different group with same multiplication rules, and you can discard it once you are done.

All the best,

 Alexander Hulpke




More information about the Forum mailing list