Open kiryph opened 2 years ago
This issue is also related to the gap package Memoisation which cannot be used for AffineCrystGroups
, e.g.:
gap> LoadPackage("Memoisation");
gap> MSpaceGroupIT := MemoisedFunction(SpaceGroupIT);
gap> PointGroup(MSpaceGroupIT(3,22));
#I Memo key: [ 3, 22 ]
#I Key unknown. Computing result...
Group([ [ [ -1, 0, 0 ], [ 0, -1, 0 ], [ 0, 0, 1 ] ], [ [ -1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, -1 ] ] ])
gap> PointGroup(MSpaceGroupIT(3,22));
#I Memo key: [ 3, 22 ]
#I Key known! Loading result from cache...
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 2nd choice method found for `IsAffineCrystGroupOnLeftOrRight' on 1 arguments at /usr/local/Cellar/gap/4.12.0/libexec/lib/methsel2.g:249 called from
<<compiled GAP code>> from GAPROOT/lib/oper1.g:736 in function PointGroup default method requiring categories and checking properties called from
<function "PointGroup default method requiring categories and checking properties">( <arguments> )
called from read-eval loop at *stdin*:48
type 'quit;' to quit to outer loop
brk>
Generating all space groups is quite slow. On my machine it takes 21 seconds (3,2 GHz 6-Core Intel Core i7-8700B):
I could speed up by using the six cores.
However, I would like to restore them from a pickled file, since doing the same computation all the time is a waste of resources.
The functions
IO_Pickle
andIO_Unpickle
of the gap packageIO
can be executedbut the unpickled object is actually is not the identical object. I have to call
AsAffineCrystGroupOnRight
to getAffineCrystGroups
:As you can see, this as slow as generating them again.
Can the support of
IO_Pickle
/IO_Unpickle
forAffineCrystGroups
be improved?I assume
IO_Pickle
currently falls back to matrix groups:taken from https://github.com/gap-packages/io/blob/master/gap/pickle.gi#L1193-L1209
As you can see the group is reconstructed by calling
GroupWithGenerators(gens)
which explains the behaviour.I assume to be faster the
AffineCrystGroup
should be reconstructed by the underlying objects:such as
PointGroup
,PointHomomorphism
,TranslationBasis
,InternalBasis
How should the
IO_Pickle
method look like?and how can one create an AffineCrystGroup on a lower level:
What about using
ObjectifyWithAttributes
? What is the family ofAffineCrystGroup
?