Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  hack.g   Sprache: unbekannt

 
#############################################################################
##
##  This file is part of recog, a package for the GAP computer algebra system
##  which provides a collection of methods for the constructive recognition
##  of groups.
##
##  This files's authors include Max Neunhöffer, Ákos Seress.
##
##  Copyright of recog belongs to its developers whose names are too numerous
##  to list here. Please refer to the COPYRIGHT file for details.
##
##  SPDX-License-Identifier: GPL-3.0-or-later
##
##
##  Some corrections to the library.
##
#############################################################################

# Here I collect some hacks that are necessary with the current GAP,
# they should be removed some day:

InstallOtherMethod( ExtractSubMatrix, "hack: for lists of compressed vectors",
  [ IsList, IsList, IsList ],
  function( m, poss1, poss2 )
    local i,n;
    n := [];
    for i in poss1 do
        Add(n,ShallowCopy(m[i]{poss2}));
    od;
    if IsFFE(m[1,1]) then
        ConvertToMatrixRep(n);
    fi;
    return n;
  end );

InstallMethod( PseudoRandom, "for a group object with generators, use func",
  [ IsGroup and HasGeneratorsOfGroup ], 1,
  function( g )
    local l;
    # FIXME: get rid of this hackish override of PseudoRandom,
    # and define our own operation instead (say, RECOG_PseuoRandom)?!
    # Or at least change pseudorandomfunc to an attribute, so that
    # the filter of this method can be turned into something like
    #  IsGroup and HasPseudoRandomFunc
    if IsBound(g!.pseudorandomfunc) and Length(g!.pseudorandomfunc) > 0 then
        l := Length(g!.pseudorandomfunc);
        return CallFuncList(g!.pseudorandomfunc[l].func,
                            g!.pseudorandomfunc[l].args);
    fi;
    TryNextMethod();
  end );

# Randomize methods for non-compressed vectors, to support fields with more
# than 256 elements; needed by RECOG.RuleOutSmallProjOrder
InstallOtherMethod( Randomize, "for a mutable FFE vector",
  [ IsFFECollection and IsPlistRep and IsMutable ],
  v -> Randomize(GlobalMersenneTwister, v));

InstallOtherMethod( Randomize, "for a mutable FFE vector and a random source",
  [ IsFFECollection and IsPlistRep and IsMutable, IsRandomSource ],
  { v, rs } -> Randomize(rs, v) );

InstallOtherMethod( Randomize, "for a random source and a mutable FFE vector",
  [ IsRandomSource, IsFFECollection and IsPlistRep and IsMutable ],
  function( rs, v )
    local f,i;
    f := DefaultField(v);
    for i in [1..Length(v)] do v[i] := Random(rs,f); od;
    return v;
  end );

[ Dauer der Verarbeitung: 0.28 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge