Skip to content

Commit

Permalink
Merge branch 'stable-4.8'
Browse files Browse the repository at this point in the history
  • Loading branch information
markuspf committed Feb 16, 2016
2 parents d2977f0 + 12f45a1 commit dc48981
Show file tree
Hide file tree
Showing 14 changed files with 246 additions and 98 deletions.
50 changes: 47 additions & 3 deletions doc/changes/changes48.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Heading>Changes between &GAP; 4.7 and &GAP; 4.8</Heading>

This chapter contains an overview of the most important changes
introduced in &GAP; 4.8.1 release (the 2nd beta release of &GAP; 4.8).
introduced in &GAP; 4.8.2 release (the 1st public release of &GAP; 4.8).
Later it will also contain information about subsequent update
releases for &GAP; 4.8.

Expand All @@ -16,8 +16,8 @@ and you may use appropriate milestones from
that were introduced in corresponding &GAP; releases. An overview of the
most significant ones is provided below.

<Section Label="gap480">
<Heading>&GAP; 4.8.1 (December 2015)</Heading>
<Section Label="gap482">
<Heading>&GAP; 4.8.2 (February 2016)</Heading>

<Subsection Label="Changes in the core GAP48 system">
<Heading>Changes in the core &GAP; system introduced in &GAP; 4.8</Heading>
Expand Down Expand Up @@ -146,6 +146,10 @@ belong to the <Package>Semigroups</Package> and <Package>Smallsemi</Package> pac
<Ref Func="Test" BookName="ref"/> with the option to compare the output up to
whitespaces.
</Item>
<Item>The function `ErrorMayQuit`, which differs from
<Ref Func="Error" BookName="ref"/> by not allowing execution to continue,
has been renamed to <Ref Func="ErrorNoReturn" BookName="ref"/>.
</Item>
</List>

Fixed bugs:
Expand Down Expand Up @@ -182,10 +186,18 @@ Including a <C>break</C> or <C>continue</C> statement in a function body
but not in a loop now gives a syntax error instead of failing at run time.
</Item>
<Item>
<Ref Oper="GroupGeneralMappingByImages" BookName="ref"/> now verifies that
that image of a mapping is contained in its range.
</Item>
<Item>
Fixed a bug in caching the degree of transformation that could lead to a
non-identity transformation accidentally changing its value to the identity
transformation.
</Item>
<Item>
Fixed the problem with using Windows default browser as a help viewer using
<C>SetHelpViewer("browser");</C>.
</Item>
</List>

</Subsection>
Expand All @@ -209,20 +221,52 @@ together with three associated packages
(all three - by Sebastian Gutsche and Sebastian Posur).
</Item>
<Item>
<Package>Digraphs</Package> package by Jan De Beule, Julius Jonušas,
James Mitchell, Michael Torpey and Wilf Wilson, which provides
functionality to work with graphs, digraphs, and multidigraphs.
</Item>
<Item>
<Package>FinInG</Package> package by John Bamberg, Anton Betten,
Philippe Cara, Jan De Beule, Michel Lavrauw and Max Neunhöffer
for computation in Finite Incidence Geometry.
</Item>
<Item>
<Package>HeLP</Package> package by Andreas Bächle and Leo Margolis,
which computes constraints on partial augmentations of torsion units
in integral group rings using a method developed by Luthar, Passi and
Hertweck. The package can be employed to verify the Zassenhaus
Conjecture and the Prime Graph Question for finite groups, once
their characters are known. It uses an interface to the software
package <Package>4ti2</Package> to solve integral linear inequalities.
</Item>
<Item>
<Package>matgrp</Package> package by Alexander Hulpke, which provides
an interface to the solvable radical functionality for matrix groups,
building on constructive recognition.
</Item>
<Item>
<Package>NormalizInterface</Package> package by Sebastian Gutsche,
Max Horn and Christof Söger, which provides a GAP interface to
<Package>Normaliz</Package>, enabling direct access to the complete
functionality of <Package>Normaliz</Package>, such as computations
in affine monoids, vector configurations, lattice polytopes, and
rational cones.
</Item>
<Item>
<Package>profiling</Package> package by Christopher Jefferson for
transforming profiles produced by <Ref Func="ProfileLineByLine" BookName="ref"/>
and <Ref Func="CoverageLineByLine" BookName="ref"/> into a human-readable form.
</Item>
<Item>
<Package>Utils</Package> package by Sebastian Gutsche, Stefan Kohl and
Christopher Wensley, which provides a collection of utility functions
gleaned from many packages.
</Item>
<Item>
<Package>XModAlg</Package> package by Zekeriya Arvasi and Alper Odabas,
which provides a collection of functions for computing with crossed
modules and Cat1-algebras and morphisms of these structures.
</Item>
</List>

</Subsection>
Expand Down
6 changes: 4 additions & 2 deletions doc/ref/grppc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ the groups of a given order.
Finally we note that for the computation of split extensions it is not
necessary that <A>M</A> must correspond to an elementary abelian group. Here
it is possible to construct split extensions of arbitrary pc groups,
see <Ref Func="SplitExtension"/>.
see <Ref Oper="SplitExtension"/>.

<#Include Label="TwoCoboundaries">
<#Include Label="TwoCocycles">
Expand All @@ -471,6 +471,8 @@ see <Ref Func="SplitExtension"/>.

<Description>
returns the split extension of <A>G</A> by the <A>G</A>-module <A>M</A>.
See also <Ref Oper="SplitExtension" Label="with specified homomorphism"/>
for its 3-argument version.
</Description>
</ManSection>

Expand Down Expand Up @@ -514,7 +516,7 @@ up to equivalence, but not up to isomorphism.
<#Include Label="ExtensionRepresentatives">

<ManSection>
<Oper Name="SplitExtension" Arg='G, aut, N'/>
<Oper Name="SplitExtension" Arg='G, aut, N' Label="with specified homomorphism"/>

<Description>
returns the split extensions of the pc group <A>G</A> by the pc group
Expand Down
2 changes: 1 addition & 1 deletion lib/galois.gd
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ DeclareInfoClass("InfoGalois");
##
## <#GAPDoc Label="GaloisType">
## <ManSection>
## <Attr Name="GaloisType" Arg='f[,cand]'/>
## <Attr Name="GaloisType" Arg='f'/>
##
## <Description>
## Let <A>f</A> be an irreducible polynomial with rational coefficients. This
Expand Down
4 changes: 4 additions & 0 deletions lib/galois.gi
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,10 @@ end);
##
#F GaloisType(<pol>,[<cands>]) . . . . . . . . . . . . . compute Galois type
##
## The optional 2nd argument may be used to restrict the range of transitive
## permutation groups that will be considered as possible Galois groups.
## The use of the 2nd argument is experimental and is not documented.
##
BindGlobal("DoGaloisType",function(arg)
local f,n,sh,p,ind,cand,noca,alt,d,df,co,dco,res,resf,pat,pps,i,j,k,
orbs,GetResolvent,norb,act,repro,minpol,ext,ncand,pos,step,lens,gudeg,
Expand Down
14 changes: 10 additions & 4 deletions lib/ghomperm.gi
Original file line number Diff line number Diff line change
Expand Up @@ -700,10 +700,16 @@ InstallOtherMethod( StabChainMutable, "perm mapping by images", true,

# build short words by an orbit algorithm on genimg
BuildOrb:=function(genimg)
local orb,dict,orbf,T,elm,img,i,n;
dict:=NewDictionary(genimg[1][1],false);
AddDictionary(dict,One(genimg[1][1]));
orb:=[Immutable([One(genimg[1][1]),One(genimg[2][1])])];
local a,orb,dict,orbf,T,elm,img,i,n;
if Length(genimg[1])>0 then
a:=genimg[1][1];
else
a:=One(Source(hom));
fi;
dict:=NewDictionary(a,false);
a:=One(Source(hom));
AddDictionary(dict,a);
orb:=[Immutable([a,One(Range(hom))])];
orbf:=[0];
i:=1;
n:=Length(genimg[1]);
Expand Down
21 changes: 12 additions & 9 deletions lib/grp.gd
Original file line number Diff line number Diff line change
Expand Up @@ -4254,7 +4254,14 @@ DeclareGlobalFunction( "PowerMapOfGroupWithInvariants" );
##
## <Description>
## tests whether <A>G</A> <M>/</M> <A>N</A> is abelian
## (without explicitly constructing the factor group).
## (without explicitly constructing the factor group and without testing
## whether <A>N</A> is in fact a normal subgroup).
## <Example><![CDATA[
## gap> HasAbelianFactorGroup(g,n);
## false
## gap> HasAbelianFactorGroup(DerivedSubgroup(g),n);
## true
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
Expand All @@ -4271,7 +4278,8 @@ DeclareGlobalFunction("HasAbelianFactorGroup");
##
## <Description>
## tests whether <A>G</A> <M>/</M> <A>N</A> is solvable
## (without explicitly constructing the factor group).
## (without explicitly constructing the factor group and without testing
## whether <A>N</A> is in fact a normal subgroup).
## </Description>
## </ManSection>
## <#/GAPDoc>
Expand All @@ -4289,13 +4297,8 @@ DeclareGlobalFunction("HasSolvableFactorGroup");
##
## <Description>
## tests whether <A>G</A> <M>/</M> <A>N</A> is elementary abelian
## (without explicitly constructing the factor group).
## <Example><![CDATA[
## gap> HasAbelianFactorGroup(g,n);
## false
## gap> HasAbelianFactorGroup(DerivedSubgroup(g),n);
## true
## ]]></Example>
## (without explicitly constructing the factor group and without testing
## whether <A>N</A> is in fact a normal subgroup).
## </Description>
## </ManSection>
## <#/GAPDoc>
Expand Down
4 changes: 3 additions & 1 deletion lib/grp.gi
Original file line number Diff line number Diff line change
Expand Up @@ -4530,16 +4530,18 @@ InstallMethod( KnowsHowToDecompose,
##
InstallGlobalFunction(HasAbelianFactorGroup,function(G,N)
local gen;
Assert(2,IsNormal(G,N) and IsSubgroup(G,N));
gen:=Filtered(GeneratorsOfGroup(G),i->not i in N);
return ForAll([1..Length(gen)],
i->ForAll([1..i-1],j->Comm(gen[i],gen[j]) in N));
end);

#############################################################################
##
#M HasSolvableFactorGroup(<G>,<N>) test whether G/N is abelian
#M HasSolvableFactorGroup(<G>,<N>) test whether G/N is solvable
##
InstallGlobalFunction(HasSolvableFactorGroup,function(G,N)
Assert(2,IsNormal(G,N) and IsSubgroup(G,N));
return ForAny(DerivedSeriesOfGroup(G),x->IsSubset(N,x));
end);

Expand Down
15 changes: 7 additions & 8 deletions lib/helpview.gi
Original file line number Diff line number Diff line change
Expand Up @@ -69,20 +69,19 @@ if ARCH_IS_WINDOWS() then
HELP_VIEWER_INFO.browser := rec(
type := "url",
show := function( filename )
local pos;
local pos, winfilename;
if not filename{[1..9]}="/cygdrive" then
Error( "corrupted name of the help file ", filename );
Error( "the name of the help file ", filename , " must start with /cygdrive" );
else
winfilename:=MakeExternalFilename( SplitString( filename, "#" )[1] );
fi;
Print( "Opening help page in default windows browser ... \c" );
Process( DirectoryCurrent(),
Filename( DirectoriesLibrary( "bin" ), "cygstart.exe" ),
InputTextNone(),
OutputTextNone(),
[ SplitString( filename, "#" )[1] ] );
Print( "Opening help page ", winfilename, " in default windows browser ... \c" );
Exec( Concatenation("start ", winfilename ) );
Print( "done! \n" );
end
);


elif ARCH_IS_MAC_OS_X() then
# html version using Mac OS X default browser
HELP_VIEWER_INFO.("mac default browser") := rec (
Expand Down
108 changes: 57 additions & 51 deletions lib/mapping.gi
Original file line number Diff line number Diff line change
Expand Up @@ -516,57 +516,63 @@ InstallGlobalFunction( CompositionMapping, function ( arg )
end );


#############################################################################
##
#M IsInjective( <map> ) . . . . . for gen. mapp. with known inv. gen. mapp.
#M IsSingleValued( <map> ) . . . . for gen. mapp. with known inv. gen. mapp.
#M IsSurjective( <map> ) . . . . . for gen. mapp. with known inv. gen. mapp.
#M IsTotal( <map> ) . . . . . . . for gen. mapp. with known inv. gen. mapp.
##
InstallImmediateMethod( IsInjective,
IsGeneralMapping and HasInverseGeneralMapping, 0,
function( map )
map:= InverseGeneralMapping( map );
if HasIsSingleValued( map ) then
return IsSingleValued( map );
else
TryNextMethod();
fi;
end );

InstallImmediateMethod( IsSingleValued,
IsGeneralMapping and HasInverseGeneralMapping, 0,
function( map )
map:= InverseGeneralMapping( map );
if HasIsInjective( map ) then
return IsInjective( map );
else
TryNextMethod();
fi;
end );

InstallImmediateMethod( IsSurjective,
IsGeneralMapping and HasInverseGeneralMapping, 0,
function( map )
map:= InverseGeneralMapping( map );
if HasIsTotal( map ) then
return IsTotal( map );
else
TryNextMethod();
fi;
end );

InstallImmediateMethod( IsTotal,
IsGeneralMapping and HasInverseGeneralMapping, 0,
function( map )
map:= InverseGeneralMapping( map );
if HasIsSurjective( map ) then
return IsSurjective( map );
else
TryNextMethod();
fi;
end );

# Temporarily disabled -- See #569
# Currently some group homomrophisms construct inverse maps that are really
# restricted inverses (i.e. defined only on the image). Together with these
# immediate methods this can cause wrong indications of IsSurjective etc.
# for these maps. While this needs to be fixed in the future properly, the
# immediate methods are temporarily disabled to avoid this error having
# further effects.
# #############################################################################
# ##
# #M IsInjective( <map> ) . . . . . for gen. mapp. with known inv. gen. mapp.
# #M IsSingleValued( <map> ) . . . . for gen. mapp. with known inv. gen. mapp.
# #M IsSurjective( <map> ) . . . . . for gen. mapp. with known inv. gen. mapp.
# #M IsTotal( <map> ) . . . . . . . for gen. mapp. with known inv. gen. mapp.
# ##
# InstallImmediateMethod( IsInjective,
# IsGeneralMapping and HasInverseGeneralMapping, 0,
# function( map )
# map:= InverseGeneralMapping( map );
# if HasIsSingleValued( map ) then
# return IsSingleValued( map );
# else
# TryNextMethod();
# fi;
# end );
#
# InstallImmediateMethod( IsSingleValued,
# IsGeneralMapping and HasInverseGeneralMapping, 0,
# function( map )
# map:= InverseGeneralMapping( map );
# if HasIsInjective( map ) then
# return IsInjective( map );
# else
# TryNextMethod();
# fi;
# end );
#
# InstallImmediateMethod( IsSurjective,
# IsGeneralMapping and HasInverseGeneralMapping, 0,
# function( map )
# map:= InverseGeneralMapping( map );
# if HasIsTotal( map ) then
# return IsTotal( map );
# else
# TryNextMethod();
# fi;
# end );
#
# InstallImmediateMethod( IsTotal,
# IsGeneralMapping and HasInverseGeneralMapping, 0,
# function( map )
# map:= InverseGeneralMapping( map );
# if HasIsSurjective( map ) then
# return IsSurjective( map );
# else
# TryNextMethod();
# fi;
# end );

#############################################################################
##
Expand Down
4 changes: 3 additions & 1 deletion lib/set.gi
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ InstallMethod( AddSet,
Error( "<set> must be a mutable proper set" );
fi;
pos:= PositionSorted( set, obj );
if set[ pos ] <> obj then
if pos>Length(set) then
set[ pos ]:= obj;
elif set[ pos ] <> obj then
len:= Length( set );
set{ [ pos+1 .. len+1 ] }:= set{ [ pos .. len ] };
set[ pos ]:= obj;
Expand Down
Loading

0 comments on commit dc48981

Please sign in to comment.