Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ Joseph Edwards <jde1@st-andrews.ac.uk> Joe Edwards <80713360+Joseph-Edwards@user
Joseph Edwards <jde1@st-andrews.ac.uk> Joseph Edwards <josephdavidedwards@gmail.com>
Luke Elliott <le27@st-andrews.ac.uk> le27 <le27@st-andrews.ac.uk>
Fernando Flores Brito <ffloresbrito@gmail.com> Fernando Flores Brito <ffb3@st-andrews.ac.uk>
Matthias Fresacher <m.fresacher@westernsydney.edu.au>
Matthias Fresacher <matthias.ypg37@slmail.me>
Tillman Froehlich <trf1@st-andrews.ac.uk> <47321884+awesometillman@users.noreply.github.com>
Nick Ham <nicholas.charles.ham@gmail.com>
Robert Hancock <robert.hancock@maths.ox.ac.uk> Robert Hancock <hancock@informatik.uni-heidelberg.de>
Expand Down
9 changes: 9 additions & 0 deletions PackageInfo.g
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,15 @@ Persons := [
IsAuthor := true,
IsMaintainer := false,
Email := "trf1@st-andrews.ac.uk"),

rec(
LastName := "Fresacher",
FirstNames := "Matthias",
IsAuthor := true,
IsMaintainer := false,
Email := "m.fresacher@westernsydney.edu.au",
WWWHome := "https://staff.cdms.westernsydney.edu.au/~mfresacher/",
Institution := "Western Sydney University"),

rec(
LastName := "Ham",
Expand Down
2 changes: 2 additions & 0 deletions gap/elements/bipart.gd
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ DeclareProperty("IsPartialPermBipartition", IsBipartition);

DeclareOperation("PermLeftQuoBipartition", [IsBipartition, IsBipartition]);

DeclareOperation("NrFloatingBlocks", [IsBipartition, IsBipartition]);

# Collections
DeclareAttribute("DegreeOfBipartitionCollection", IsBipartitionCollection);
DeclareOperation("OneMutable", [IsBipartitionCollection]);
61 changes: 61 additions & 0 deletions gap/elements/bipart.gi
Original file line number Diff line number Diff line change
Expand Up @@ -1111,3 +1111,64 @@ function(coll)

return TensorBipartitions(coll);
end);

InstallMethod(NrFloatingBlocks, "for bipartition and bipartition",
[IsBipartition, IsBipartition],
function(a, b)
local n, anr, fuse, fuseit, ablocks, bblocks, x, y, made_it, tab, nr, i;

n := DegreeOfBipartition(a);
anr := NrBlocks(a);

fuse := [1 .. anr + NrBlocks(b)];

fuseit := function(i)
while fuse[i] < i do
i := fuse[i];
od;
return i;
end;

ablocks := IntRepOfBipartition(a);
bblocks := IntRepOfBipartition(b);

for i in [1 .. n] do
x := fuseit(ablocks[i + n]);
y := fuseit(bblocks[i] + anr);
if x <> y then
if x < y then
fuse[y] := x;
else
fuse[x] := y;
fi;
fi;
od;

made_it := BlistList(fuse, []);
for i in [1 .. n] do
made_it[fuseit(ablocks[i])] := true;
od;

for i in [n + 1 .. 2 * n] do
made_it[fuseit(bblocks[i] + anr)] := true;
od;
tab := 0 * fuse;
nr := 0;

for i in [n + 1 .. 2 * n] do
x := fuseit(ablocks[i]);
if not made_it[x] and tab[x] = 0 then
nr := nr + 1;
tab[x] := 1;
fi;
od;

for i in [1 .. n] do
x := fuseit(bblocks[i] + anr);
if not made_it[x] and tab[x] = 0 then
nr := nr + 1;
tab[x] := 1;
fi;
od;
return nr;
end);
107 changes: 107 additions & 0 deletions gap/elements/twisted-bipart.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
############################################################################
##
## elements/twisted-bipart.gd
## Copyright (C) 2025 James D. Mitchell
##
## Licensing information can be found in the README file of this package.
##
#############################################################################
##
## In collaboration with
##
##############################################
## ##
## Code created ##
## by ##
## *--------------------* ##
## | Matthias Fresacher | ##
## *--------------------* ##
## ##
##############################################

# *------------------------------*
# |``````````````````````````````|
# |`````____````____`````````````|
# |````|MFMF\ /MFMF|````````````|
# |````|MF|MF\/MF|MF|````````````|
# |````|MF|\MFMF/|MF|_______`````|
# |````|MF|``````|MFMFMFMFMF|````|
# |````|MF|``````|MF|````````````|
# |````|MF|``````|MF|___`````````|
# |``````````````|MFMFMF|````````|
# |``````````````|MF|````````````|
# |``````````````|MF|````````````|
# |``````````````|MF|````````````|
# |``````````````````````````````|
# *------------------------------*

DeclareCategory("IsTwistedBipartition", IsMultiplicativeElementWithOne
and IsMultiplicativeElementWithZero and
IsAssociativeElement);
DeclareCategoryCollections("IsTwistedBipartition");
DeclareCategoryCollections("IsTwistedBipartitionCollection");

DeclareOperation("TwistedBipartition", [IsInt, IsBipartition, IsInt]);
DeclareOperation("ZeroTwistedBipartition", [IsInt, IsInt]);
DeclareAttribute("DegreeOfTwistedBipartition",
IsTwistedBipartition);
DeclareAttribute("DegreeOfTwistedBipartitionCollection",
IsTwistedBipartitionCollection);
DeclareAttribute("MaxFloatingBlocks",
IsTwistedBipartition);
DeclareAttribute("NrFloatingBlocks",
IsTwistedBipartition);
DeclareAttribute("UnderlyingBipartition",
IsTwistedBipartition);
DeclareAttribute("UnderlyingBipartitionCollection",
IsTwistedBipartitionCollection);

DeclareOperation("RandomNonZeroTwistedBipartition", [IsInt, IsInt]);
DeclareOperation("RandomNonZeroTwistedBipartition", [IsRandomSource, IsInt, IsInt]);
DeclareOperation("RandomTwistedBipartition", [IsInt, IsInt]);
DeclareOperation("RandomTwistedBipartition", [IsRandomSource, IsInt, IsInt]);
DeclareProperty("IsZero", IsTwistedBipartition);
DeclareProperty("IsOne", IsTwistedBipartition);
DeclareOperation("IdentityTwistedBipartition", [IsPosInt, IsInt]);
DeclareAttribute("ZeroImmutable", IsTwistedBipartition);

DeclareAttribute("DegreeOfBipartition", IsTwistedBipartition);
DeclareAttribute("NrBlocks", IsTwistedBipartition);
DeclareAttribute("NrLeftBlocks", IsTwistedBipartition);
DeclareAttribute("NrRightBlocks", IsTwistedBipartition);
DeclareAttribute("RankOfBipartition", IsTwistedBipartition);

DeclareAttribute("DomainOfBipartition", IsTwistedBipartition);
DeclareAttribute("CodomainOfBipartition", IsTwistedBipartition);

DeclareAttribute("NrTransverseBlocks", IsTwistedBipartition);
DeclareOperation("OneMutable", [IsTwistedBipartition, IsInt]);
DeclareOperation("OneMutable", [IsTwistedBipartitionCollection, IsInt]);

DeclareProperty("IsBlockBijection", IsTwistedBipartition);
DeclareProperty("IsUniformBlockBijection", IsTwistedBipartition);
DeclareProperty("IsPartialPermBipartition", IsTwistedBipartition);
DeclareProperty("IsTransBipartition", IsTwistedBipartition);
DeclareProperty("IsDualTransBipartition", IsTwistedBipartition);
DeclareProperty("IsPermBipartition", IsTwistedBipartition);

DeclareOperation("AsTwistedBipartition", [IsInt, IsPerm, IsZeroCyc, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsPerm, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsPerm, IsPosInt, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsPartialPerm, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsPartialPerm, IsZeroCyc, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsPartialPerm, IsPosInt, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsTransformation, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsTransformation, IsPosInt, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsTransformation, IsZeroCyc, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsBipartition, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsBipartition, IsPosInt, IsInt]);
DeclareOperation("AsTwistedBipartition", [IsTwistedBipartition]);
DeclareOperation("AsTwistedBipartition", [IsTwistedBipartition, IsPosInt]);
DeclareOperation("AsTwistedBipartition", [IsInt, IsBipartition, IsZeroCyc, IsInt]);
# DeclareOperation("AsTwistedBipartition", [IsInt, IsPBR, IsZeroCyc, IsInt]);
# DeclareOperation("AsTwistedBipartition", [IsInt, IsPBR, IsPosInt, IsInt]);
# DeclareOperation("AsTwistedBipartition", [IsInt, IsPBR, IsInt]);

DeclareOperation("AsBlockBijection", [IsTwistedBipartition, IsPosInt]);
DeclareOperation("AsBlockBijection", [IsTwistedBipartition]);
Loading