Index: tol_pkg/GraphTools/_GraphTools.tol
===================================================================
--- tol_pkg/GraphTools/_GraphTools.tol	(revision 176aa3ef8a2b205a8793758988988ba3aed69d9a)
+++ tol_pkg/GraphTools/_GraphTools.tol	(revision e7af41b7eebdd99dc6bfd0af60af16a14d5ddecd)
@@ -9,4 +9,10 @@
 //////////////////////////////////////////////////////////////////////////////
 [[
+
+Text _.autodoc.description = "Functions and classes related with "
+"Graph Theory.";
+
+Text _.autodoc.keywords = "Graph Theory,vertex,edge,adjacent";
+
 //////////////////////////////////////////////////////////////////////////////
 Text _.autodoc.member.Append.Indexed = "Adds and index a new element to a "
@@ -220,7 +226,7 @@
   VMatrix _.edge.map = Rand(0,0,0,0);
   VMatrix _.edge.adjacency = Rand(0,0,0,0);
-  VMatrix _.edge.rep = Rand(0,0,0,0);
-  Real _.edge.check.rep = ?;
-
+  VMatrix _.edge.repeated = Rand(0,0,0,0);
+  Real _.edge.check.repeated = ?;
+  Real _.edge.check.repaired = ?;
   ////////////////////////////////////////////////////////////////////////////
   Static Text _.autodoc.member.New = "Creates a new instance of "
@@ -255,5 +261,5 @@
   ////////////////////////////////////////////////////////////////////////////
   Text _.autodoc.member.edge.build = "";
-  Real edge.build(Matrix data)
+  Real edge.build(Matrix data, Real removeRepeatedEdges)
   ////////////////////////////////////////////////////////////////////////////
   {
@@ -264,23 +270,35 @@
     Matrix in   = If(_.directed, in_,  Max(in_, out_));
     Matrix _.edge::_.data := out | in | SubCol(data,Range(3,Columns(data),1));
-
     Matrix idx = DifEq(1/(1-B),Rand(_.edge.num,1,1,1));
     Matrix idx.rep = Rand(_.edge.num,1,1,1);
     Matrix outInRep = out|in|idx.rep;
     VMatrix triplet.rep = Triplet(outInRep,_.vertex.num,_.vertex.num);
-    VMatrix _.edge.rep := Convert(triplet.rep,"Cholmod.R.Sparse");
-    Real _.edge.check.rep := VMatMax(_.edge.rep)>1;
-    VMatrix triplet.map = If(!_.edge.check.rep,
+    VMatrix _.edge.repeated := Convert(triplet.rep,"Cholmod.R.Sparse");
+    VMatrix _.edge.adjacency := Or(_.edge.repeated, Zeros(_.vertex.num));
+    VMatrix _.edge.repeated := _.edge.repeated - _.edge.adjacency;
+    Real _.edge.check.repeated := VMatSum(_.edge.repeated);
+    Code funTriplet = Case(
+    !_.edge.check.repeated,
     {
-      VMatrix _.edge.adjacency := _.edge.rep;
-      Triplet(out|in|idx,_.vertex.num,_.vertex.num)
+      Real _.edge.check.repaired := 0;
+      Triplet
     },
+    removeRepeatedEdges,
     {
       WriteLn("[GraphTools::@Graph "+_.name+"::edge.build()] "+
-              "There are repeated edges","W");
-      VMatrix triplet.adj = TripletUnique(outInRep,_.vertex.num,_.vertex.num);
-      VMatrix _.edge.adjacency := Convert(triplet.adj,"Cholmod.R.Sparse");
-      TripletUnique(out|in|idx,_.vertex.num,_.vertex.num)
+              "There was "<<_.edge.check.repeated+
+              " repeated edges that has been removed","W");
+      Real _.edge.check.repaired := _.edge.check.repeated;
+      TripletUnique
+    },
+    1==1,
+    {
+      WriteLn("[GraphTools::@Graph "+_.name+"::edge.build()] "+
+              "There are "<<_.edge.check.repeated+" repeated edges "
+              "but they don't will be deleted","W");
+      Real _.edge.check.repaired := 0;
+      Triplet
     });
+    VMatrix triplet.map = funTriplet(out|in|idx,_.vertex.num,_.vertex.num);
     VMatrix _.edge.map := Convert(triplet.map,"Cholmod.R.Sparse");
     True
