diff --git a/doc/attr.xml b/doc/attr.xml
index 1dd3bb640..23f846615 100644
--- a/doc/attr.xml
+++ b/doc/attr.xml
@@ -1117,6 +1117,7 @@ gap> DigraphUndirectedGirth(D);
<#GAPDoc Label="ArticulationPoints">
+
A list of vertices.
A connected digraph is biconnected if it is still connected (in the
@@ -1143,6 +1144,9 @@ gap> DigraphUndirectedGirth(D);
with articulation points, but no bridges.
+ is a synonym for .
+
+
See also and
.
DigraphWelshPowellOrder(Digraph([[4], [9], [9], [],
<#/GAPDoc>
+<#GAPDoc Label="DigraphSmallestLastOrder">
+
+
+ A list of vertices.
+
+ DigraphSmallestLastOrder returns a list order containing each
+ of the vertices of digraph in smallest-last order, defined as
+ follows:
+
+ Let D_n be digraph. For i = n, n-1, \ldots, 1, the
+ vertex order[i] is a vertex of minimum degree in D_i, and
+ D_{i-1} is the subdigraph of D_i induced by removing
+ order[i]. The degree of a vertex here is the sum of the number of
+ out- and in-neighbours.
+
+ The result is not unique in general, since there may be several vertices
+ of minimum degree at any step; DigraphSmallestLastOrder tiebreaks
+ by taking the smallest such vertex.
+ D1 := Digraph([[2], [1, 3], [2]]);;
+gap> DigraphSmallestLastOrder(D1);
+[ 3, 2, 1 ]
+gap> D2 := CompleteDigraph(3);;
+gap> DigraphSmallestLastOrder(D2);
+[ 3, 2, 1 ]
+]]>
+
+
+<#/GAPDoc>
+
<#GAPDoc Label="DigraphEmbedding">
diff --git a/doc/oper.xml b/doc/oper.xml
index 9213ec1b4..c7cf5d218 100644
--- a/doc/oper.xml
+++ b/doc/oper.xml
@@ -1957,6 +1957,7 @@ rec( idom := [ 2, fail, 2, 2, 2 ], preorder := [ 2, 1, 3, 4, 5 ] )
<#GAPDoc Label="IsDigraphOutDominatingSet">
+
true or false.
@@ -1973,7 +1974,10 @@ rec( idom := [ 2, fail, 2, 2, 2 ], preorder := [ 2, 1, 3, 4, 5 ] )
either in S or an out-neighbour of a vertex in S.
An in-dominating set of digraph is a subset S of
vertices of digraph such that every vertex of digraph is
- either in S or an in-neighbour of a vertex in S.
+ either in S or an in-neighbour of a vertex in S.
+
+ is a synonym for
+ .
D := Digraph([[2, 4], [3], [1, 5], [3], [4]]);;
@@ -2290,6 +2294,7 @@ gap> DigraphDijkstra(D, 1, 2);
<#GAPDoc Label="ModularProduct">
+
A digraph.
If D1 and D2 are digraphs without multiple edges, then
@@ -2313,7 +2318,10 @@ gap> DigraphDijkstra(D, 1, 2);
Notably, the complete (with loops) subdigraphs of MPD are
- precisely the partial isomorphisms from D1 to D2.
+ precisely the partial isomorphisms from D1 to D2.
+
+ is a synonym for
+ .
ModularProduct(Digraph([[1], [1, 2]]), Digraph([[], [2]]));
@@ -2333,6 +2341,7 @@ gap> ModularProduct(NullDigraph(0), CompleteDigraph(10));
<#GAPDoc Label="StrongProduct">
+
A digraph.
If D1 and D2 are digraphs without multiple edges,
@@ -2360,7 +2369,10 @@ gap> ModularProduct(NullDigraph(0), CompleteDigraph(10));
The SPD of two paths of lengths m and n is also the king's graph
- for an m by n board.
+ for an m by n board.
+
+ is a synonym for
+ .
D1 := Digraph([[2], [1, 3, 4], [2, 5], [2, 5], [3, 4]]);
@@ -2380,6 +2392,7 @@ gap> StrongProduct(DigraphSymmetricClosure(ChainDigraph(3)),
<#GAPDoc Label="ConormalProduct">
+
A digraph.
If D1 and D2 are digraphs without multiple edges,
@@ -2398,7 +2411,10 @@ gap> StrongProduct(DigraphSymmetricClosure(ChainDigraph(3)),
-
There is an edge from b to d in D2.
-
+
+
+ is a synonym for
+ .
ConormalProduct(DigraphSymmetricClosure(CycleDigraph(7)),
@@ -2414,6 +2430,7 @@ gap> ConormalProduct(NullDigraph(0), CompleteDigraph(10));
<#GAPDoc Label="HomomorphicProduct">
+
A digraph.
If D1 and D2 are digraphs without multiple edges,
@@ -2433,7 +2450,10 @@ gap> ConormalProduct(NullDigraph(0), CompleteDigraph(10));
There is an edge from a to c in D1 and no edge from
b to d in D2.
-
+
+
+ is a synonym for
+ .
HomomorphicProduct(PetersenGraph(),
@@ -2476,6 +2496,7 @@ gap> OutNeighbours(D1);
<#GAPDoc Label="LexicographicProduct">
+
A digraph.
If D1 and D2 are digraphs without multiple edges,
@@ -2495,7 +2516,10 @@ gap> OutNeighbours(D1);
The vertices a and c of D1 are equal and there is
an edge from b to d in D2.
-
+
+
+ is a synonym for
+ .
LexicographicProduct(DigraphSymmetricClosure(CycleDigraph(3)),
diff --git a/doc/prop.xml b/doc/prop.xml
index 5c293f4a3..0eea03180 100644
--- a/doc/prop.xml
+++ b/doc/prop.xml
@@ -1665,11 +1665,14 @@ false]]>
<#GAPDoc Label="Is2EdgeTransitive">
+
true or false.
If digraph is a digraph without multiple edges, then Is2EdgeTransitive
returns true if digraph is 2-edge transitive, and false
- otherwise. If digraph has multiple edges, then Is2EdgeTransitive returns an error.
+ otherwise. If digraph has multiple edges, then Is2EdgeTransitive returns an error.
+
+ is a synonym for .
A digraph is 2-edge transitive if its automorphism group
acts transitively on 2-edges via the action
diff --git a/doc/weights.xml b/doc/weights.xml
index cc569a088..be0fda438 100644
--- a/doc/weights.xml
+++ b/doc/weights.xml
@@ -70,6 +70,36 @@ gap> EdgeWeights(g);
<#/GAPDoc>
+<#GAPDoc Label="UnitEdgeWeightedDigraph">
+
+
+ A digraph
+
+
+ If digraph is immutable, UnitEdgeWeightedDigraph returns
+ an immutable edge-weighted copy of digraph, with all edge weights
+ set to 1. If digraph is mutable, the returned digraph will be
+ mutable, but will not have edge weights.
+
+ See .
+
+ D := Digraph([[2], [1, 3], [1]]);
+
+gap> D1 := UnitEdgeWeightedDigraph(D);
+
+gap> EdgeWeights(D1);
+[ [ 1 ], [ 1, 1 ], [ 1 ] ]
+gap> D2 := Digraph(IsMutableDigraph, [[2], [1, 3], [1]]);;
+gap> UnitEdgeWeightedDigraph(D2);
+
+gap> HasEdgeWeights(D2);
+false
+]]>
+
+
+<#/GAPDoc>
+
<#GAPDoc Label="EdgeWeightedDigraphTotalWeight">
@@ -91,6 +121,25 @@ gap> EdgeWeightedDigraphTotalWeight(D);
<#/GAPDoc>
+<#GAPDoc Label="IsNegativeEdgeWeightedDigraph">
+
+
+ A boolean.
+
+ If digraph has edge weights, then this returns true if
+ at least one edge has negative weight, and false otherwise. If
+ digraph has no edge weights, then an error is raised.
+ D := EdgeWeightedDigraph([[2], [1]], [[5], [10]]);;
+gap> IsNegativeEdgeWeightedDigraph(D);
+false
+gap> D := EdgeWeightedDigraph([[2], [1]], [[-5], [10]]);;
+gap> IsNegativeEdgeWeightedDigraph(D);
+true]]>
+
+
+<#/GAPDoc>
+
<#GAPDoc Label="EdgeWeightedDigraphMinimumSpanningTree">
diff --git a/doc/z-chap5.xml b/doc/z-chap5.xml
index f1da97657..bf322b769 100644
--- a/doc/z-chap5.xml
+++ b/doc/z-chap5.xml
@@ -28,7 +28,9 @@
Edge Weights
<#Include Label="EdgeWeights">
<#Include Label="EdgeWeightedDigraph">
+ <#Include Label="UnitEdgeWeightedDigraph">
<#Include Label="EdgeWeightedDigraphTotalWeight">
+ <#Include Label="IsNegativeEdgeWeightedDigraph">
<#Include Label="EdgeWeightedDigraphMinimumSpanningTree">
<#Include Label="EdgeWeightedDigraphShortestPaths">
<#Include Label="EdgeWeightedDigraphShortestPath">
diff --git a/doc/z-chap6.xml b/doc/z-chap6.xml
index f9798b51c..26f5e23bc 100644
--- a/doc/z-chap6.xml
+++ b/doc/z-chap6.xml
@@ -73,6 +73,7 @@ from} $E_a$ \emph{to} $E_b$. In this case we say that $E_a$ and $E_b$ are
<#Include Label="DigraphColouring">
<#Include Label="DigraphGreedyColouring">
<#Include Label="DigraphWelshPowellOrder">
+ <#Include Label="DigraphSmallestLastOrder">
<#Include Label="ChromaticNumber">
<#Include Label="DigraphCore">
<#Include Label="LatticeDigraphEmbedding">
diff --git a/gap/grahom.gd b/gap/grahom.gd
index b18ecce70..8e970feb7 100644
--- a/gap/grahom.gd
+++ b/gap/grahom.gd
@@ -42,7 +42,7 @@ DeclareOperation("DigraphGreedyColouring", [IsDigraph, IsHomogeneousList]);
DeclareOperation("DigraphGreedyColouringNC", [IsDigraph, IsHomogeneousList]);
DeclareAttribute("DigraphWelshPowellOrder", IsDigraph);
-DeclareAttribute("DigraphSmallestLastOrder", IsDigraph); # TODO: document
+DeclareAttribute("DigraphSmallestLastOrder", IsDigraph);
DeclareOperation("IsDigraphEndomorphism", [IsDigraph, IsTransformation]);
DeclareOperation("IsDigraphHomomorphism",
diff --git a/gap/weights.gd b/gap/weights.gd
index 423950b61..77d8823a4 100644
--- a/gap/weights.gd
+++ b/gap/weights.gd
@@ -14,7 +14,7 @@ DeclareGlobalFunction("EdgeWeightedDigraph");
DeclareProperty("IsNegativeEdgeWeightedDigraph", IsDigraph and HasEdgeWeights);
DeclareAttribute("EdgeWeightedDigraphTotalWeight",
IsDigraph and HasEdgeWeights);
-DeclareAttribute("UnitEdgeWeightedDigraph", IsDigraph);
+DeclareOperation("UnitEdgeWeightedDigraph", [IsDigraph]);
# 2. Edge Weight Copies
DeclareOperation("EdgeWeightsMutableCopy", [IsDigraph and HasEdgeWeights]);