[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