Blame SOURCES/internal-to-inteernal.patch

19490a
From af5af041018cd0c8b89fde3f8684fe00290b386d Mon Sep 17 00:00:00 2001
19490a
From: Jan Chaloupka <jchaloup@redhat.com>
19490a
Date: Wed, 30 Sep 2015 09:57:57 +0200
19490a
Subject: [PATCH] internal to inteernal
19490a
19490a
---
19490a
 .../src/github.com/gonum/blas/native/dgemm.go      |   2 +-
19490a
 .../github.com/gonum/blas/native/level1double.go   |   2 +-
19490a
 .../gonum/blas/native/level1double_ddot.go         |   2 +-
19490a
 .../github.com/gonum/blas/native/level1single.go   |   2 +-
19490a
 .../gonum/blas/native/level1single_dsdot.go        |   2 +-
19490a
 .../gonum/blas/native/level1single_sdot.go         |   2 +-
19490a
 .../gonum/blas/native/level1single_sdsdot.go       |   2 +-
19490a
 .../github.com/gonum/blas/native/level2double.go   |   2 +-
19490a
 .../github.com/gonum/blas/native/level2single.go   |   2 +-
19490a
 .../github.com/gonum/blas/native/level3double.go   |   2 +-
19490a
 .../github.com/gonum/blas/native/level3single.go   |   2 +-
19490a
 .../src/github.com/gonum/blas/native/sgemm.go      |   2 +-
19490a
 .../src/github.com/gonum/graph/inteernal/linear.go |  73 ++++
19490a
 .../src/github.com/gonum/graph/inteernal/set.go    | 211 +++++++++++
19490a
 .../github.com/gonum/graph/inteernal/set_test.go   | 413 +++++++++++++++++++++
19490a
 .../src/github.com/gonum/graph/inteernal/sort.go   |  28 ++
19490a
 .../src/github.com/gonum/graph/internal/linear.go  |  73 ----
19490a
 .../src/github.com/gonum/graph/internal/set.go     | 211 -----------
19490a
 .../github.com/gonum/graph/internal/set_test.go    | 413 ---------------------
19490a
 .../src/github.com/gonum/graph/internal/sort.go    |  28 --
19490a
 .../github.com/gonum/graph/network/betweenness.go  |   2 +-
19490a
 .../src/github.com/gonum/graph/path/a_star.go      |   2 +-
19490a
 .../github.com/gonum/graph/path/control_flow.go    |   2 +-
19490a
 .../github.com/gonum/graph/path/dijkstra_test.go   |   2 +-
19490a
 .../gonum/graph/path/floydwarshall_test.go         |   2 +-
19490a
 .../gonum/graph/path/johnson_apsp_test.go          |   2 +-
19490a
 .../github.com/gonum/graph/path/spanning_tree.go   |   2 +-
19490a
 .../github.com/gonum/graph/topo/bron_kerbosch.go   |   2 +-
19490a
 .../gonum/graph/topo/bron_kerbosch_test.go         |   2 +-
19490a
 .../github.com/gonum/graph/topo/johnson_cycles.go  |   2 +-
19490a
 .../gonum/graph/topo/johnson_cycles_test.go        |   2 +-
19490a
 .../src/github.com/gonum/graph/topo/tarjan.go      |   2 +-
19490a
 .../src/github.com/gonum/graph/topo/tarjan_test.go |   2 +-
19490a
 .../src/github.com/gonum/graph/topo/topo_test.go   |   2 +-
19490a
 .../github.com/gonum/graph/traverse/traverse.go    |   2 +-
19490a
 .../gonum/graph/traverse/traverse_test.go          |   2 +-
19490a
 .../src/github.com/gonum/inteernal/asm/caxpy.go    |  22 ++
19490a
 .../src/github.com/gonum/inteernal/asm/cdotc.go    |  23 ++
19490a
 .../src/github.com/gonum/inteernal/asm/cdotu.go    |  23 ++
19490a
 .../src/github.com/gonum/inteernal/asm/complex     |  58 +++
19490a
 .../src/github.com/gonum/inteernal/asm/conj.go     |   7 +
19490a
 .../src/github.com/gonum/inteernal/asm/daxpy.go    |  22 ++
19490a
 .../github.com/gonum/inteernal/asm/daxpy_amd64.go  |  12 +
19490a
 .../github.com/gonum/inteernal/asm/daxpy_amd64.s   | 140 +++++++
19490a
 .../src/github.com/gonum/inteernal/asm/ddot.go     |  23 ++
19490a
 .../github.com/gonum/inteernal/asm/ddot_amd64.go   |  10 +
19490a
 .../github.com/gonum/inteernal/asm/ddot_amd64.s    | 140 +++++++
19490a
 .../src/github.com/gonum/inteernal/asm/dsdot.go    |  23 ++
19490a
 .../src/github.com/gonum/inteernal/asm/generate.go |   8 +
19490a
 .../src/github.com/gonum/inteernal/asm/saxpy.go    |  22 ++
19490a
 .../src/github.com/gonum/inteernal/asm/sdot.go     |  23 ++
19490a
 .../gonum/inteernal/asm/single_precision           |  30 ++
19490a
 .../src/github.com/gonum/inteernal/asm/zaxpy.go    |  22 ++
19490a
 .../src/github.com/gonum/inteernal/asm/zdotc.go    |  25 ++
19490a
 .../src/github.com/gonum/inteernal/asm/zdotu.go    |  23 ++
19490a
 .../src/github.com/gonum/internal/asm/caxpy.go     |  22 --
19490a
 .../src/github.com/gonum/internal/asm/cdotc.go     |  23 --
19490a
 .../src/github.com/gonum/internal/asm/cdotu.go     |  23 --
19490a
 .../src/github.com/gonum/internal/asm/complex      |  58 ---
19490a
 .../src/github.com/gonum/internal/asm/conj.go      |   7 -
19490a
 .../src/github.com/gonum/internal/asm/daxpy.go     |  22 --
19490a
 .../github.com/gonum/internal/asm/daxpy_amd64.go   |  12 -
19490a
 .../github.com/gonum/internal/asm/daxpy_amd64.s    | 140 -------
19490a
 .../src/github.com/gonum/internal/asm/ddot.go      |  23 --
19490a
 .../github.com/gonum/internal/asm/ddot_amd64.go    |  10 -
19490a
 .../src/github.com/gonum/internal/asm/ddot_amd64.s | 140 -------
19490a
 .../src/github.com/gonum/internal/asm/dsdot.go     |  23 --
19490a
 .../src/github.com/gonum/internal/asm/generate.go  |   8 -
19490a
 .../src/github.com/gonum/internal/asm/saxpy.go     |  22 --
19490a
 .../src/github.com/gonum/internal/asm/sdot.go      |  23 --
19490a
 .../github.com/gonum/internal/asm/single_precision |  30 --
19490a
 .../src/github.com/gonum/internal/asm/zaxpy.go     |  22 --
19490a
 .../src/github.com/gonum/internal/asm/zdotc.go     |  25 --
19490a
 .../src/github.com/gonum/internal/asm/zdotu.go     |  23 --
19490a
 .../src/github.com/gonum/matrix/mat64/inner.go     |   2 +-
19490a
 pkg/cmd/cli/describe/chaindescriber.go             |   2 +-
19490a
 76 files changed, 1411 insertions(+), 1411 deletions(-)
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/set.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go
19490a
 create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/complex
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go
19490a
 delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go
19490a
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go b/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go
19490a
index 850f62c..8dc9920 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go
19490a
@@ -10,7 +10,7 @@ import (
19490a
 	"sync"
19490a
 
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 // Dgemm computes
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go
19490a
index 0d77243..65f2972 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go
19490a
@@ -8,7 +8,7 @@ import (
19490a
 	"math"
19490a
 
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 var _ blas.Float64Level1 = Implementation{}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go
19490a
index 7af4e04..84a16ed 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go
19490a
@@ -5,7 +5,7 @@
19490a
 package native
19490a
 
19490a
 import (
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 // Ddot computes the dot product of the two vectors
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go
19490a
index 6bcba83..ca82629 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go
19490a
@@ -10,7 +10,7 @@ import (
19490a
 	math "github.com/gonum/blas/native/internal/math32"
19490a
 
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 var _ blas.Float32Level1 = Implementation{}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go
19490a
index 4665a01..a438155 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go
19490a
@@ -7,7 +7,7 @@
19490a
 package native
19490a
 
19490a
 import (
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 // Dsdot computes the dot product of the two vectors
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go
19490a
index 1e5b565..7d96b74 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go
19490a
@@ -7,7 +7,7 @@
19490a
 package native
19490a
 
19490a
 import (
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 // Sdot computes the dot product of the two vectors
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go
19490a
index d58be3d..79543d4 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go
19490a
@@ -7,7 +7,7 @@
19490a
 package native
19490a
 
19490a
 import (
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 // Sdsdot computes the dot product of the two vectors plus a constant
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go
19490a
index 6d59559..af62cd1 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go
19490a
@@ -6,7 +6,7 @@ package native
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 var _ blas.Float64Level2 = Implementation{}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go
19490a
index b213ad6..6720c0e 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go
19490a
@@ -8,7 +8,7 @@ package native
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 var _ blas.Float32Level2 = Implementation{}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go
19490a
index 5a19652..47d5d15 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go
19490a
@@ -6,7 +6,7 @@ package native
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 var _ blas.Float64Level3 = Implementation{}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go
19490a
index 6bc9a56..82212a0 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go
19490a
@@ -8,7 +8,7 @@ package native
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 var _ blas.Float32Level3 = Implementation{}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go b/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go
19490a
index 047d4e5..0387945 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go
19490a
@@ -12,7 +12,7 @@ import (
19490a
 	"sync"
19490a
 
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 // Sgemm computes
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go
19490a
new file mode 100644
19490a
index 0000000..3d64de9
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go
19490a
@@ -0,0 +1,73 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package internal
19490a
+
19490a
+import (
19490a
+	"github.com/gonum/graph"
19490a
+)
19490a
+
19490a
+// NodeStack implements a LIFO stack of graph.Node.
19490a
+type NodeStack []graph.Node
19490a
+
19490a
+// Len returns the number of graph.Nodes on the stack.
19490a
+func (s *NodeStack) Len() int { return len(*s) }
19490a
+
19490a
+// Pop returns the last graph.Node on the stack and removes it
19490a
+// from the stack.
19490a
+func (s *NodeStack) Pop() graph.Node {
19490a
+	v := *s
19490a
+	v, n := v[:len(v)-1], v[len(v)-1]
19490a
+	*s = v
19490a
+	return n
19490a
+}
19490a
+
19490a
+// Push adds the node n to the stack at the last position.
19490a
+func (s *NodeStack) Push(n graph.Node) { *s = append(*s, n) }
19490a
+
19490a
+// NodeQueue implements a FIFO queue.
19490a
+type NodeQueue struct {
19490a
+	head int
19490a
+	data []graph.Node
19490a
+}
19490a
+
19490a
+// Len returns the number of graph.Nodes in the queue.
19490a
+func (q *NodeQueue) Len() int { return len(q.data) - q.head }
19490a
+
19490a
+// Enqueue adds the node n to the back of the queue.
19490a
+func (q *NodeQueue) Enqueue(n graph.Node) {
19490a
+	if len(q.data) == cap(q.data) && q.head > 0 {
19490a
+		l := q.Len()
19490a
+		copy(q.data, q.data[q.head:])
19490a
+		q.head = 0
19490a
+		q.data = append(q.data[:l], n)
19490a
+	} else {
19490a
+		q.data = append(q.data, n)
19490a
+	}
19490a
+}
19490a
+
19490a
+// Dequeue returns the graph.Node at the front of the queue and
19490a
+// removes it from the queue.
19490a
+func (q *NodeQueue) Dequeue() graph.Node {
19490a
+	if q.Len() == 0 {
19490a
+		panic("queue: empty queue")
19490a
+	}
19490a
+
19490a
+	var n graph.Node
19490a
+	n, q.data[q.head] = q.data[q.head], nil
19490a
+	q.head++
19490a
+
19490a
+	if q.Len() == 0 {
19490a
+		q.head = 0
19490a
+		q.data = q.data[:0]
19490a
+	}
19490a
+
19490a
+	return n
19490a
+}
19490a
+
19490a
+// Reset clears the queue for reuse.
19490a
+func (q *NodeQueue) Reset() {
19490a
+	q.head = 0
19490a
+	q.data = q.data[:0]
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go
19490a
new file mode 100644
19490a
index 0000000..3ad1bc8
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go
19490a
@@ -0,0 +1,211 @@
19490a
+// Copyright ©2014 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package internal
19490a
+
19490a
+import (
19490a
+	"unsafe"
19490a
+
19490a
+	"github.com/gonum/graph"
19490a
+)
19490a
+
19490a
+// IntSet is a set of integer identifiers.
19490a
+type IntSet map[int]struct{}
19490a
+
19490a
+// The simple accessor methods for Set are provided to allow ease of
19490a
+// implementation change should the need arise.
19490a
+
19490a
+// Add inserts an element into the set.
19490a
+func (s IntSet) Add(e int) {
19490a
+	s[e] = struct{}{}
19490a
+}
19490a
+
19490a
+// Has reports the existence of the element in the set.
19490a
+func (s IntSet) Has(e int) bool {
19490a
+	_, ok := s[e]
19490a
+	return ok
19490a
+}
19490a
+
19490a
+// Remove deletes the specified element from the set.
19490a
+func (s IntSet) Remove(e int) {
19490a
+	delete(s, e)
19490a
+}
19490a
+
19490a
+// Count reports the number of elements stored in the set.
19490a
+func (s IntSet) Count() int {
19490a
+	return len(s)
19490a
+}
19490a
+
19490a
+// Same determines whether two sets are backed by the same store. In the
19490a
+// current implementation using hash maps it makes use of the fact that
19490a
+// hash maps (at least in the gc implementation) are passed as a pointer
19490a
+// to a runtime Hmap struct.
19490a
+//
19490a
+// A map is not seen by the runtime as a pointer though, so we cannot
19490a
+// directly compare the sets converted to unsafe.Pointer and need to take
19490a
+// the sets' addressed and dereference them as pointers to some comparable
19490a
+// type.
19490a
+func Same(s1, s2 Set) bool {
19490a
+	return *(*uintptr)(unsafe.Pointer(&s1)) == *(*uintptr)(unsafe.Pointer(&s2))
19490a
+}
19490a
+
19490a
+// A set is a set of nodes keyed in their integer identifiers.
19490a
+type Set map[int]graph.Node
19490a
+
19490a
+// The simple accessor methods for Set are provided to allow ease of
19490a
+// implementation change should the need arise.
19490a
+
19490a
+// Add inserts an element into the set.
19490a
+func (s Set) Add(n graph.Node) {
19490a
+	s[n.ID()] = n
19490a
+}
19490a
+
19490a
+// Remove deletes the specified element from the set.
19490a
+func (s Set) Remove(e graph.Node) {
19490a
+	delete(s, e.ID())
19490a
+}
19490a
+
19490a
+// Has reports the existence of the element in the set.
19490a
+func (s Set) Has(n graph.Node) bool {
19490a
+	_, ok := s[n.ID()]
19490a
+	return ok
19490a
+}
19490a
+
19490a
+// Clear returns an empty set, possibly using the same backing store.
19490a
+// Clear is not provided as a method since there is no way to replace
19490a
+// the calling value if clearing is performed by a make(set). Clear
19490a
+// should never be called without keeping the returned value.
19490a
+func Clear(s Set) Set {
19490a
+	if len(s) == 0 {
19490a
+		return s
19490a
+	}
19490a
+
19490a
+	return make(Set)
19490a
+}
19490a
+
19490a
+// Copy performs a perfect copy from s1 to dst (meaning the sets will
19490a
+// be equal).
19490a
+func (dst Set) Copy(src Set) Set {
19490a
+	if Same(src, dst) {
19490a
+		return dst
19490a
+	}
19490a
+
19490a
+	if len(dst) > 0 {
19490a
+		dst = make(Set, len(src))
19490a
+	}
19490a
+
19490a
+	for e, n := range src {
19490a
+		dst[e] = n
19490a
+	}
19490a
+
19490a
+	return dst
19490a
+}
19490a
+
19490a
+// Equal reports set equality between the parameters. Sets are equal if
19490a
+// and only if they have the same elements.
19490a
+func Equal(s1, s2 Set) bool {
19490a
+	if Same(s1, s2) {
19490a
+		return true
19490a
+	}
19490a
+
19490a
+	if len(s1) != len(s2) {
19490a
+		return false
19490a
+	}
19490a
+
19490a
+	for e := range s1 {
19490a
+		if _, ok := s2[e]; !ok {
19490a
+			return false
19490a
+		}
19490a
+	}
19490a
+
19490a
+	return true
19490a
+}
19490a
+
19490a
+// Union takes the union of s1 and s2, and stores it in dst.
19490a
+//
19490a
+// The union of two sets, s1 and s2, is the set containing all the
19490a
+// elements of each, for instance:
19490a
+//
19490a
+//     {a,b,c} UNION {d,e,f} = {a,b,c,d,e,f}
19490a
+//
19490a
+// Since sets may not have repetition, unions of two sets that overlap
19490a
+// do not contain repeat elements, that is:
19490a
+//
19490a
+//     {a,b,c} UNION {b,c,d} = {a,b,c,d}
19490a
+//
19490a
+func (dst Set) Union(s1, s2 Set) Set {
19490a
+	if Same(s1, s2) {
19490a
+		return dst.Copy(s1)
19490a
+	}
19490a
+
19490a
+	if !Same(s1, dst) && !Same(s2, dst) {
19490a
+		dst = Clear(dst)
19490a
+	}
19490a
+
19490a
+	if !Same(dst, s1) {
19490a
+		for e, n := range s1 {
19490a
+			dst[e] = n
19490a
+		}
19490a
+	}
19490a
+
19490a
+	if !Same(dst, s2) {
19490a
+		for e, n := range s2 {
19490a
+			dst[e] = n
19490a
+		}
19490a
+	}
19490a
+
19490a
+	return dst
19490a
+}
19490a
+
19490a
+// Intersect takes the intersection of s1 and s2, and stores it in dst.
19490a
+//
19490a
+// The intersection of two sets, s1 and s2, is the set containing all
19490a
+// the elements shared between the two sets, for instance:
19490a
+//
19490a
+//     {a,b,c} INTERSECT {b,c,d} = {b,c}
19490a
+//
19490a
+// The intersection between a set and itself is itself, and thus
19490a
+// effectively a copy operation:
19490a
+//
19490a
+//     {a,b,c} INTERSECT {a,b,c} = {a,b,c}
19490a
+//
19490a
+// The intersection between two sets that share no elements is the empty
19490a
+// set:
19490a
+//
19490a
+//     {a,b,c} INTERSECT {d,e,f} = {}
19490a
+//
19490a
+func (dst Set) Intersect(s1, s2 Set) Set {
19490a
+	var swap Set
19490a
+
19490a
+	if Same(s1, s2) {
19490a
+		return dst.Copy(s1)
19490a
+	}
19490a
+	if Same(s1, dst) {
19490a
+		swap = s2
19490a
+	} else if Same(s2, dst) {
19490a
+		swap = s1
19490a
+	} else {
19490a
+		dst = Clear(dst)
19490a
+
19490a
+		if len(s1) > len(s2) {
19490a
+			s1, s2 = s2, s1
19490a
+		}
19490a
+
19490a
+		for e, n := range s1 {
19490a
+			if _, ok := s2[e]; ok {
19490a
+				dst[e] = n
19490a
+			}
19490a
+		}
19490a
+
19490a
+		return dst
19490a
+	}
19490a
+
19490a
+	for e := range dst {
19490a
+		if _, ok := swap[e]; !ok {
19490a
+			delete(dst, e)
19490a
+		}
19490a
+	}
19490a
+
19490a
+	return dst
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go
19490a
new file mode 100644
19490a
index 0000000..fb39620
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go
19490a
@@ -0,0 +1,413 @@
19490a
+// Copyright ©2014 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package internal
19490a
+
19490a
+import "testing"
19490a
+
19490a
+type node int
19490a
+
19490a
+func (n node) ID() int { return int(n) }
19490a
+
19490a
+// count reports the number of elements stored in the set.
19490a
+func (s Set) count() int {
19490a
+	return len(s)
19490a
+}
19490a
+
19490a
+// TestSame tests the assumption that pointer equality via unsafe conversion
19490a
+// of a map[int]struct{} to uintptr is a valid test for perfect identity between
19490a
+// set values. If any of the tests in TestSame fail, the package is broken and same
19490a
+// must be reimplemented to conform to the runtime map implementation. The relevant
19490a
+// code to look at (at least for gc) is in runtime/hashmap.{h,goc}.
19490a
+func TestSame(t *testing.T) {
19490a
+	var (
19490a
+		a = make(Set)
19490a
+		b = make(Set)
19490a
+		c = a
19490a
+	)
19490a
+
19490a
+	if Same(a, b) {
19490a
+		t.Error("Independently created sets test as same")
19490a
+	}
19490a
+	if !Same(a, c) {
19490a
+		t.Error("Set copy and original test as not same.")
19490a
+	}
19490a
+	a.Add(node(1))
19490a
+	if !Same(a, c) {
19490a
+		t.Error("Set copy and original test as not same after addition.")
19490a
+	}
19490a
+	if !Same(nil, nil) {
19490a
+		t.Error("nil sets test as not same.")
19490a
+	}
19490a
+	if Same(b, nil) {
19490a
+		t.Error("nil and empty sets test as same.")
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestAdd(t *testing.T) {
19490a
+	s := make(Set)
19490a
+	if s == nil {
19490a
+		t.Fatal("Set cannot be created successfully")
19490a
+	}
19490a
+
19490a
+	if s.count() != 0 {
19490a
+		t.Error("Set somehow contains new elements upon creation")
19490a
+	}
19490a
+
19490a
+	s.Add(node(1))
19490a
+	s.Add(node(3))
19490a
+	s.Add(node(5))
19490a
+
19490a
+	if s.count() != 3 {
19490a
+		t.Error("Incorrect number of set elements after adding")
19490a
+	}
19490a
+
19490a
+	if !s.Has(node(1)) || !s.Has(node(3)) || !s.Has(node(5)) {
19490a
+		t.Error("Set doesn't contain element that was added")
19490a
+	}
19490a
+
19490a
+	s.Add(node(1))
19490a
+
19490a
+	if s.count() > 3 {
19490a
+		t.Error("Set double-adds element (element not unique)")
19490a
+	} else if s.count() < 3 {
19490a
+		t.Error("Set double-add lowered len")
19490a
+	}
19490a
+
19490a
+	if !s.Has(node(1)) {
19490a
+		t.Error("Set doesn't contain double-added element")
19490a
+	}
19490a
+
19490a
+	if !s.Has(node(3)) || !s.Has(node(5)) {
19490a
+		t.Error("Set removes element on double-add")
19490a
+	}
19490a
+
19490a
+	for e, n := range s {
19490a
+		if e != n.ID() {
19490a
+			t.Error("Element ID did not match key: %d != %d", e, n.ID())
19490a
+		}
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestRemove(t *testing.T) {
19490a
+	s := make(Set)
19490a
+
19490a
+	s.Add(node(1))
19490a
+	s.Add(node(3))
19490a
+	s.Add(node(5))
19490a
+
19490a
+	s.Remove(node(1))
19490a
+
19490a
+	if s.count() != 2 {
19490a
+		t.Error("Incorrect number of set elements after removing an element")
19490a
+	}
19490a
+
19490a
+	if s.Has(node(1)) {
19490a
+		t.Error("Element present after removal")
19490a
+	}
19490a
+
19490a
+	if !s.Has(node(3)) || !s.Has(node(5)) {
19490a
+		t.Error("Set remove removed wrong element")
19490a
+	}
19490a
+
19490a
+	s.Remove(node(1))
19490a
+
19490a
+	if s.count() != 2 || s.Has(node(1)) {
19490a
+		t.Error("Double set remove does something strange")
19490a
+	}
19490a
+
19490a
+	s.Add(node(1))
19490a
+
19490a
+	if s.count() != 3 || !s.Has(node(1)) {
19490a
+		t.Error("Cannot add element after removal")
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestClear(t *testing.T) {
19490a
+	s := make(Set)
19490a
+
19490a
+	s.Add(node(8))
19490a
+	s.Add(node(9))
19490a
+	s.Add(node(10))
19490a
+
19490a
+	s = Clear(s)
19490a
+
19490a
+	if s.count() != 0 {
19490a
+		t.Error("Clear did not properly reset set to size 0")
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestSelfEqual(t *testing.T) {
19490a
+	s := make(Set)
19490a
+
19490a
+	if !Equal(s, s) {
19490a
+		t.Error("Set is not equal to itself")
19490a
+	}
19490a
+
19490a
+	s.Add(node(1))
19490a
+
19490a
+	if !Equal(s, s) {
19490a
+		t.Error("Set ceases self equality after adding element")
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestEqual(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+
19490a
+	if !Equal(s1, s2) {
19490a
+		t.Error("Two different empty sets not equal")
19490a
+	}
19490a
+
19490a
+	s1.Add(node(1))
19490a
+	if Equal(s1, s2) {
19490a
+		t.Error("Two different sets with different elements not equal")
19490a
+	}
19490a
+
19490a
+	s2.Add(node(1))
19490a
+	if !Equal(s1, s2) {
19490a
+		t.Error("Two sets with same element not equal")
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestCopy(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+
19490a
+	s1.Add(node(1))
19490a
+	s1.Add(node(2))
19490a
+	s1.Add(node(3))
19490a
+
19490a
+	s2.Copy(s1)
19490a
+
19490a
+	if !Equal(s1, s2) {
19490a
+		t.Fatalf("Two sets not equal after copy")
19490a
+	}
19490a
+
19490a
+	s2.Remove(node(1))
19490a
+
19490a
+	if Equal(s1, s2) {
19490a
+		t.Errorf("Mutating one set mutated another after copy")
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestSelfCopy(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+
19490a
+	s1.Add(node(1))
19490a
+	s1.Add(node(2))
19490a
+
19490a
+	s1.Copy(s1)
19490a
+
19490a
+	if s1.count() != 2 {
19490a
+		t.Error("Something strange happened when copying into self")
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestUnionSame(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+	s3 := make(Set)
19490a
+
19490a
+	s1.Add(node(1))
19490a
+	s1.Add(node(2))
19490a
+
19490a
+	s2.Add(node(1))
19490a
+	s2.Add(node(2))
19490a
+
19490a
+	s3.Union(s1, s2)
19490a
+
19490a
+	if s3.count() != 2 {
19490a
+		t.Error("Union of same sets yields set with wrong len")
19490a
+	}
19490a
+
19490a
+	if !s3.Has(node(1)) || !s3.Has(node(2)) {
19490a
+		t.Error("Union of same sets yields wrong elements")
19490a
+	}
19490a
+
19490a
+	for i, s := range []Set{s1, s2, s3} {
19490a
+		for e, n := range s {
19490a
+			if e != n.ID() {
19490a
+				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
+			}
19490a
+		}
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestUnionDiff(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+	s3 := make(Set)
19490a
+
19490a
+	s1.Add(node(1))
19490a
+	s1.Add(node(2))
19490a
+
19490a
+	s2.Add(node(3))
19490a
+
19490a
+	s3.Union(s1, s2)
19490a
+
19490a
+	if s3.count() != 3 {
19490a
+		t.Error("Union of different sets yields set with wrong len")
19490a
+	}
19490a
+
19490a
+	if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
19490a
+		t.Error("Union of different sets yields set with wrong elements")
19490a
+	}
19490a
+
19490a
+	if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
19490a
+		t.Error("Union of sets mutates non-destination set (argument 1)")
19490a
+	}
19490a
+
19490a
+	if !s2.Has(node(3)) || s2.Has(node(1)) || s2.Has(node(2)) || s2.count() != 1 {
19490a
+		t.Error("Union of sets mutates non-destination set (argument 2)")
19490a
+	}
19490a
+
19490a
+	for i, s := range []Set{s1, s2, s3} {
19490a
+		for e, n := range s {
19490a
+			if e != n.ID() {
19490a
+				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
+			}
19490a
+		}
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestUnionOverlapping(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+	s3 := make(Set)
19490a
+
19490a
+	s1.Add(node(1))
19490a
+	s1.Add(node(2))
19490a
+
19490a
+	s2.Add(node(2))
19490a
+	s2.Add(node(3))
19490a
+
19490a
+	s3.Union(s1, s2)
19490a
+
19490a
+	if s3.count() != 3 {
19490a
+		t.Error("Union of overlapping sets yields set with wrong len")
19490a
+	}
19490a
+
19490a
+	if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
19490a
+		t.Error("Union of overlapping sets yields set with wrong elements")
19490a
+	}
19490a
+
19490a
+	if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
19490a
+		t.Error("Union of sets mutates non-destination set (argument 1)")
19490a
+	}
19490a
+
19490a
+	if !s2.Has(node(3)) || s2.Has(node(1)) || !s2.Has(node(2)) || s2.count() != 2 {
19490a
+		t.Error("Union of sets mutates non-destination set (argument 2)")
19490a
+	}
19490a
+
19490a
+	for i, s := range []Set{s1, s2, s3} {
19490a
+		for e, n := range s {
19490a
+			if e != n.ID() {
19490a
+				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
+			}
19490a
+		}
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestIntersectSame(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+	s3 := make(Set)
19490a
+
19490a
+	s1.Add(node(2))
19490a
+	s1.Add(node(3))
19490a
+
19490a
+	s2.Add(node(2))
19490a
+	s2.Add(node(3))
19490a
+
19490a
+	s3.Intersect(s1, s2)
19490a
+
19490a
+	if card := s3.count(); card != 2 {
19490a
+		t.Errorf("Intersection of identical sets yields set of wrong len %d", card)
19490a
+	}
19490a
+
19490a
+	if !s3.Has(node(2)) || !s3.Has(node(3)) {
19490a
+		t.Error("Intersection of identical sets yields set of wrong elements")
19490a
+	}
19490a
+
19490a
+	for i, s := range []Set{s1, s2, s3} {
19490a
+		for e, n := range s {
19490a
+			if e != n.ID() {
19490a
+				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
+			}
19490a
+		}
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestIntersectDiff(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+	s3 := make(Set)
19490a
+
19490a
+	s1.Add(node(2))
19490a
+	s1.Add(node(3))
19490a
+
19490a
+	s2.Add(node(1))
19490a
+	s2.Add(node(4))
19490a
+
19490a
+	s3.Intersect(s1, s2)
19490a
+
19490a
+	if card := s3.count(); card != 0 {
19490a
+		t.Errorf("Intersection of different yields non-empty set %d", card)
19490a
+	}
19490a
+
19490a
+	if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(1)) || s1.Has(node(4)) || s1.count() != 2 {
19490a
+		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
+	}
19490a
+
19490a
+	if s2.Has(node(2)) || s2.Has(node(3)) || !s2.Has(node(1)) || !s2.Has(node(4)) || s2.count() != 2 {
19490a
+		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
+	}
19490a
+
19490a
+	for i, s := range []Set{s1, s2, s3} {
19490a
+		for e, n := range s {
19490a
+			if e != n.ID() {
19490a
+				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
+			}
19490a
+		}
19490a
+	}
19490a
+}
19490a
+
19490a
+func TestIntersectOverlapping(t *testing.T) {
19490a
+	s1 := make(Set)
19490a
+	s2 := make(Set)
19490a
+	s3 := make(Set)
19490a
+
19490a
+	s1.Add(node(2))
19490a
+	s1.Add(node(3))
19490a
+
19490a
+	s2.Add(node(3))
19490a
+	s2.Add(node(4))
19490a
+
19490a
+	s3.Intersect(s1, s2)
19490a
+
19490a
+	if card := s3.count(); card != 1 {
19490a
+		t.Errorf("Intersection of overlapping sets yields set of incorrect len %d", card)
19490a
+	}
19490a
+
19490a
+	if !s3.Has(node(3)) {
19490a
+		t.Errorf("Intersection of overlapping sets yields set with wrong element")
19490a
+	}
19490a
+
19490a
+	if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(4)) || s1.count() != 2 {
19490a
+		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
+	}
19490a
+
19490a
+	if s2.Has(node(2)) || !s2.Has(node(3)) || !s2.Has(node(4)) || s2.count() != 2 {
19490a
+		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
+	}
19490a
+
19490a
+	for i, s := range []Set{s1, s2, s3} {
19490a
+		for e, n := range s {
19490a
+			if e != n.ID() {
19490a
+				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
+			}
19490a
+		}
19490a
+	}
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go
19490a
new file mode 100644
19490a
index 0000000..3bfee0f
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go
19490a
@@ -0,0 +1,28 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package internal
19490a
+
19490a
+// BySliceValues implements the sort.Interface sorting a slice of
19490a
+// []int lexically by the values of the []int.
19490a
+type BySliceValues [][]int
19490a
+
19490a
+func (c BySliceValues) Len() int { return len(c) }
19490a
+func (c BySliceValues) Less(i, j int) bool {
19490a
+	a, b := c[i], c[j]
19490a
+	l := len(a)
19490a
+	if len(b) < l {
19490a
+		l = len(b)
19490a
+	}
19490a
+	for k, v := range a[:l] {
19490a
+		if v < b[k] {
19490a
+			return true
19490a
+		}
19490a
+		if v > b[k] {
19490a
+			return false
19490a
+		}
19490a
+	}
19490a
+	return len(a) < len(b)
19490a
+}
19490a
+func (c BySliceValues) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go
19490a
deleted file mode 100644
19490a
index 3d64de9..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go
19490a
+++ /dev/null
19490a
@@ -1,73 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package internal
19490a
-
19490a
-import (
19490a
-	"github.com/gonum/graph"
19490a
-)
19490a
-
19490a
-// NodeStack implements a LIFO stack of graph.Node.
19490a
-type NodeStack []graph.Node
19490a
-
19490a
-// Len returns the number of graph.Nodes on the stack.
19490a
-func (s *NodeStack) Len() int { return len(*s) }
19490a
-
19490a
-// Pop returns the last graph.Node on the stack and removes it
19490a
-// from the stack.
19490a
-func (s *NodeStack) Pop() graph.Node {
19490a
-	v := *s
19490a
-	v, n := v[:len(v)-1], v[len(v)-1]
19490a
-	*s = v
19490a
-	return n
19490a
-}
19490a
-
19490a
-// Push adds the node n to the stack at the last position.
19490a
-func (s *NodeStack) Push(n graph.Node) { *s = append(*s, n) }
19490a
-
19490a
-// NodeQueue implements a FIFO queue.
19490a
-type NodeQueue struct {
19490a
-	head int
19490a
-	data []graph.Node
19490a
-}
19490a
-
19490a
-// Len returns the number of graph.Nodes in the queue.
19490a
-func (q *NodeQueue) Len() int { return len(q.data) - q.head }
19490a
-
19490a
-// Enqueue adds the node n to the back of the queue.
19490a
-func (q *NodeQueue) Enqueue(n graph.Node) {
19490a
-	if len(q.data) == cap(q.data) && q.head > 0 {
19490a
-		l := q.Len()
19490a
-		copy(q.data, q.data[q.head:])
19490a
-		q.head = 0
19490a
-		q.data = append(q.data[:l], n)
19490a
-	} else {
19490a
-		q.data = append(q.data, n)
19490a
-	}
19490a
-}
19490a
-
19490a
-// Dequeue returns the graph.Node at the front of the queue and
19490a
-// removes it from the queue.
19490a
-func (q *NodeQueue) Dequeue() graph.Node {
19490a
-	if q.Len() == 0 {
19490a
-		panic("queue: empty queue")
19490a
-	}
19490a
-
19490a
-	var n graph.Node
19490a
-	n, q.data[q.head] = q.data[q.head], nil
19490a
-	q.head++
19490a
-
19490a
-	if q.Len() == 0 {
19490a
-		q.head = 0
19490a
-		q.data = q.data[:0]
19490a
-	}
19490a
-
19490a
-	return n
19490a
-}
19490a
-
19490a
-// Reset clears the queue for reuse.
19490a
-func (q *NodeQueue) Reset() {
19490a
-	q.head = 0
19490a
-	q.data = q.data[:0]
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/set.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/set.go
19490a
deleted file mode 100644
19490a
index 3ad1bc8..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/set.go
19490a
+++ /dev/null
19490a
@@ -1,211 +0,0 @@
19490a
-// Copyright ©2014 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package internal
19490a
-
19490a
-import (
19490a
-	"unsafe"
19490a
-
19490a
-	"github.com/gonum/graph"
19490a
-)
19490a
-
19490a
-// IntSet is a set of integer identifiers.
19490a
-type IntSet map[int]struct{}
19490a
-
19490a
-// The simple accessor methods for Set are provided to allow ease of
19490a
-// implementation change should the need arise.
19490a
-
19490a
-// Add inserts an element into the set.
19490a
-func (s IntSet) Add(e int) {
19490a
-	s[e] = struct{}{}
19490a
-}
19490a
-
19490a
-// Has reports the existence of the element in the set.
19490a
-func (s IntSet) Has(e int) bool {
19490a
-	_, ok := s[e]
19490a
-	return ok
19490a
-}
19490a
-
19490a
-// Remove deletes the specified element from the set.
19490a
-func (s IntSet) Remove(e int) {
19490a
-	delete(s, e)
19490a
-}
19490a
-
19490a
-// Count reports the number of elements stored in the set.
19490a
-func (s IntSet) Count() int {
19490a
-	return len(s)
19490a
-}
19490a
-
19490a
-// Same determines whether two sets are backed by the same store. In the
19490a
-// current implementation using hash maps it makes use of the fact that
19490a
-// hash maps (at least in the gc implementation) are passed as a pointer
19490a
-// to a runtime Hmap struct.
19490a
-//
19490a
-// A map is not seen by the runtime as a pointer though, so we cannot
19490a
-// directly compare the sets converted to unsafe.Pointer and need to take
19490a
-// the sets' addressed and dereference them as pointers to some comparable
19490a
-// type.
19490a
-func Same(s1, s2 Set) bool {
19490a
-	return *(*uintptr)(unsafe.Pointer(&s1)) == *(*uintptr)(unsafe.Pointer(&s2))
19490a
-}
19490a
-
19490a
-// A set is a set of nodes keyed in their integer identifiers.
19490a
-type Set map[int]graph.Node
19490a
-
19490a
-// The simple accessor methods for Set are provided to allow ease of
19490a
-// implementation change should the need arise.
19490a
-
19490a
-// Add inserts an element into the set.
19490a
-func (s Set) Add(n graph.Node) {
19490a
-	s[n.ID()] = n
19490a
-}
19490a
-
19490a
-// Remove deletes the specified element from the set.
19490a
-func (s Set) Remove(e graph.Node) {
19490a
-	delete(s, e.ID())
19490a
-}
19490a
-
19490a
-// Has reports the existence of the element in the set.
19490a
-func (s Set) Has(n graph.Node) bool {
19490a
-	_, ok := s[n.ID()]
19490a
-	return ok
19490a
-}
19490a
-
19490a
-// Clear returns an empty set, possibly using the same backing store.
19490a
-// Clear is not provided as a method since there is no way to replace
19490a
-// the calling value if clearing is performed by a make(set). Clear
19490a
-// should never be called without keeping the returned value.
19490a
-func Clear(s Set) Set {
19490a
-	if len(s) == 0 {
19490a
-		return s
19490a
-	}
19490a
-
19490a
-	return make(Set)
19490a
-}
19490a
-
19490a
-// Copy performs a perfect copy from s1 to dst (meaning the sets will
19490a
-// be equal).
19490a
-func (dst Set) Copy(src Set) Set {
19490a
-	if Same(src, dst) {
19490a
-		return dst
19490a
-	}
19490a
-
19490a
-	if len(dst) > 0 {
19490a
-		dst = make(Set, len(src))
19490a
-	}
19490a
-
19490a
-	for e, n := range src {
19490a
-		dst[e] = n
19490a
-	}
19490a
-
19490a
-	return dst
19490a
-}
19490a
-
19490a
-// Equal reports set equality between the parameters. Sets are equal if
19490a
-// and only if they have the same elements.
19490a
-func Equal(s1, s2 Set) bool {
19490a
-	if Same(s1, s2) {
19490a
-		return true
19490a
-	}
19490a
-
19490a
-	if len(s1) != len(s2) {
19490a
-		return false
19490a
-	}
19490a
-
19490a
-	for e := range s1 {
19490a
-		if _, ok := s2[e]; !ok {
19490a
-			return false
19490a
-		}
19490a
-	}
19490a
-
19490a
-	return true
19490a
-}
19490a
-
19490a
-// Union takes the union of s1 and s2, and stores it in dst.
19490a
-//
19490a
-// The union of two sets, s1 and s2, is the set containing all the
19490a
-// elements of each, for instance:
19490a
-//
19490a
-//     {a,b,c} UNION {d,e,f} = {a,b,c,d,e,f}
19490a
-//
19490a
-// Since sets may not have repetition, unions of two sets that overlap
19490a
-// do not contain repeat elements, that is:
19490a
-//
19490a
-//     {a,b,c} UNION {b,c,d} = {a,b,c,d}
19490a
-//
19490a
-func (dst Set) Union(s1, s2 Set) Set {
19490a
-	if Same(s1, s2) {
19490a
-		return dst.Copy(s1)
19490a
-	}
19490a
-
19490a
-	if !Same(s1, dst) && !Same(s2, dst) {
19490a
-		dst = Clear(dst)
19490a
-	}
19490a
-
19490a
-	if !Same(dst, s1) {
19490a
-		for e, n := range s1 {
19490a
-			dst[e] = n
19490a
-		}
19490a
-	}
19490a
-
19490a
-	if !Same(dst, s2) {
19490a
-		for e, n := range s2 {
19490a
-			dst[e] = n
19490a
-		}
19490a
-	}
19490a
-
19490a
-	return dst
19490a
-}
19490a
-
19490a
-// Intersect takes the intersection of s1 and s2, and stores it in dst.
19490a
-//
19490a
-// The intersection of two sets, s1 and s2, is the set containing all
19490a
-// the elements shared between the two sets, for instance:
19490a
-//
19490a
-//     {a,b,c} INTERSECT {b,c,d} = {b,c}
19490a
-//
19490a
-// The intersection between a set and itself is itself, and thus
19490a
-// effectively a copy operation:
19490a
-//
19490a
-//     {a,b,c} INTERSECT {a,b,c} = {a,b,c}
19490a
-//
19490a
-// The intersection between two sets that share no elements is the empty
19490a
-// set:
19490a
-//
19490a
-//     {a,b,c} INTERSECT {d,e,f} = {}
19490a
-//
19490a
-func (dst Set) Intersect(s1, s2 Set) Set {
19490a
-	var swap Set
19490a
-
19490a
-	if Same(s1, s2) {
19490a
-		return dst.Copy(s1)
19490a
-	}
19490a
-	if Same(s1, dst) {
19490a
-		swap = s2
19490a
-	} else if Same(s2, dst) {
19490a
-		swap = s1
19490a
-	} else {
19490a
-		dst = Clear(dst)
19490a
-
19490a
-		if len(s1) > len(s2) {
19490a
-			s1, s2 = s2, s1
19490a
-		}
19490a
-
19490a
-		for e, n := range s1 {
19490a
-			if _, ok := s2[e]; ok {
19490a
-				dst[e] = n
19490a
-			}
19490a
-		}
19490a
-
19490a
-		return dst
19490a
-	}
19490a
-
19490a
-	for e := range dst {
19490a
-		if _, ok := swap[e]; !ok {
19490a
-			delete(dst, e)
19490a
-		}
19490a
-	}
19490a
-
19490a
-	return dst
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go
19490a
deleted file mode 100644
19490a
index fb39620..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go
19490a
+++ /dev/null
19490a
@@ -1,413 +0,0 @@
19490a
-// Copyright ©2014 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package internal
19490a
-
19490a
-import "testing"
19490a
-
19490a
-type node int
19490a
-
19490a
-func (n node) ID() int { return int(n) }
19490a
-
19490a
-// count reports the number of elements stored in the set.
19490a
-func (s Set) count() int {
19490a
-	return len(s)
19490a
-}
19490a
-
19490a
-// TestSame tests the assumption that pointer equality via unsafe conversion
19490a
-// of a map[int]struct{} to uintptr is a valid test for perfect identity between
19490a
-// set values. If any of the tests in TestSame fail, the package is broken and same
19490a
-// must be reimplemented to conform to the runtime map implementation. The relevant
19490a
-// code to look at (at least for gc) is in runtime/hashmap.{h,goc}.
19490a
-func TestSame(t *testing.T) {
19490a
-	var (
19490a
-		a = make(Set)
19490a
-		b = make(Set)
19490a
-		c = a
19490a
-	)
19490a
-
19490a
-	if Same(a, b) {
19490a
-		t.Error("Independently created sets test as same")
19490a
-	}
19490a
-	if !Same(a, c) {
19490a
-		t.Error("Set copy and original test as not same.")
19490a
-	}
19490a
-	a.Add(node(1))
19490a
-	if !Same(a, c) {
19490a
-		t.Error("Set copy and original test as not same after addition.")
19490a
-	}
19490a
-	if !Same(nil, nil) {
19490a
-		t.Error("nil sets test as not same.")
19490a
-	}
19490a
-	if Same(b, nil) {
19490a
-		t.Error("nil and empty sets test as same.")
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestAdd(t *testing.T) {
19490a
-	s := make(Set)
19490a
-	if s == nil {
19490a
-		t.Fatal("Set cannot be created successfully")
19490a
-	}
19490a
-
19490a
-	if s.count() != 0 {
19490a
-		t.Error("Set somehow contains new elements upon creation")
19490a
-	}
19490a
-
19490a
-	s.Add(node(1))
19490a
-	s.Add(node(3))
19490a
-	s.Add(node(5))
19490a
-
19490a
-	if s.count() != 3 {
19490a
-		t.Error("Incorrect number of set elements after adding")
19490a
-	}
19490a
-
19490a
-	if !s.Has(node(1)) || !s.Has(node(3)) || !s.Has(node(5)) {
19490a
-		t.Error("Set doesn't contain element that was added")
19490a
-	}
19490a
-
19490a
-	s.Add(node(1))
19490a
-
19490a
-	if s.count() > 3 {
19490a
-		t.Error("Set double-adds element (element not unique)")
19490a
-	} else if s.count() < 3 {
19490a
-		t.Error("Set double-add lowered len")
19490a
-	}
19490a
-
19490a
-	if !s.Has(node(1)) {
19490a
-		t.Error("Set doesn't contain double-added element")
19490a
-	}
19490a
-
19490a
-	if !s.Has(node(3)) || !s.Has(node(5)) {
19490a
-		t.Error("Set removes element on double-add")
19490a
-	}
19490a
-
19490a
-	for e, n := range s {
19490a
-		if e != n.ID() {
19490a
-			t.Error("Element ID did not match key: %d != %d", e, n.ID())
19490a
-		}
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestRemove(t *testing.T) {
19490a
-	s := make(Set)
19490a
-
19490a
-	s.Add(node(1))
19490a
-	s.Add(node(3))
19490a
-	s.Add(node(5))
19490a
-
19490a
-	s.Remove(node(1))
19490a
-
19490a
-	if s.count() != 2 {
19490a
-		t.Error("Incorrect number of set elements after removing an element")
19490a
-	}
19490a
-
19490a
-	if s.Has(node(1)) {
19490a
-		t.Error("Element present after removal")
19490a
-	}
19490a
-
19490a
-	if !s.Has(node(3)) || !s.Has(node(5)) {
19490a
-		t.Error("Set remove removed wrong element")
19490a
-	}
19490a
-
19490a
-	s.Remove(node(1))
19490a
-
19490a
-	if s.count() != 2 || s.Has(node(1)) {
19490a
-		t.Error("Double set remove does something strange")
19490a
-	}
19490a
-
19490a
-	s.Add(node(1))
19490a
-
19490a
-	if s.count() != 3 || !s.Has(node(1)) {
19490a
-		t.Error("Cannot add element after removal")
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestClear(t *testing.T) {
19490a
-	s := make(Set)
19490a
-
19490a
-	s.Add(node(8))
19490a
-	s.Add(node(9))
19490a
-	s.Add(node(10))
19490a
-
19490a
-	s = Clear(s)
19490a
-
19490a
-	if s.count() != 0 {
19490a
-		t.Error("Clear did not properly reset set to size 0")
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestSelfEqual(t *testing.T) {
19490a
-	s := make(Set)
19490a
-
19490a
-	if !Equal(s, s) {
19490a
-		t.Error("Set is not equal to itself")
19490a
-	}
19490a
-
19490a
-	s.Add(node(1))
19490a
-
19490a
-	if !Equal(s, s) {
19490a
-		t.Error("Set ceases self equality after adding element")
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestEqual(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-
19490a
-	if !Equal(s1, s2) {
19490a
-		t.Error("Two different empty sets not equal")
19490a
-	}
19490a
-
19490a
-	s1.Add(node(1))
19490a
-	if Equal(s1, s2) {
19490a
-		t.Error("Two different sets with different elements not equal")
19490a
-	}
19490a
-
19490a
-	s2.Add(node(1))
19490a
-	if !Equal(s1, s2) {
19490a
-		t.Error("Two sets with same element not equal")
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestCopy(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-
19490a
-	s1.Add(node(1))
19490a
-	s1.Add(node(2))
19490a
-	s1.Add(node(3))
19490a
-
19490a
-	s2.Copy(s1)
19490a
-
19490a
-	if !Equal(s1, s2) {
19490a
-		t.Fatalf("Two sets not equal after copy")
19490a
-	}
19490a
-
19490a
-	s2.Remove(node(1))
19490a
-
19490a
-	if Equal(s1, s2) {
19490a
-		t.Errorf("Mutating one set mutated another after copy")
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestSelfCopy(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-
19490a
-	s1.Add(node(1))
19490a
-	s1.Add(node(2))
19490a
-
19490a
-	s1.Copy(s1)
19490a
-
19490a
-	if s1.count() != 2 {
19490a
-		t.Error("Something strange happened when copying into self")
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestUnionSame(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-	s3 := make(Set)
19490a
-
19490a
-	s1.Add(node(1))
19490a
-	s1.Add(node(2))
19490a
-
19490a
-	s2.Add(node(1))
19490a
-	s2.Add(node(2))
19490a
-
19490a
-	s3.Union(s1, s2)
19490a
-
19490a
-	if s3.count() != 2 {
19490a
-		t.Error("Union of same sets yields set with wrong len")
19490a
-	}
19490a
-
19490a
-	if !s3.Has(node(1)) || !s3.Has(node(2)) {
19490a
-		t.Error("Union of same sets yields wrong elements")
19490a
-	}
19490a
-
19490a
-	for i, s := range []Set{s1, s2, s3} {
19490a
-		for e, n := range s {
19490a
-			if e != n.ID() {
19490a
-				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
-			}
19490a
-		}
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestUnionDiff(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-	s3 := make(Set)
19490a
-
19490a
-	s1.Add(node(1))
19490a
-	s1.Add(node(2))
19490a
-
19490a
-	s2.Add(node(3))
19490a
-
19490a
-	s3.Union(s1, s2)
19490a
-
19490a
-	if s3.count() != 3 {
19490a
-		t.Error("Union of different sets yields set with wrong len")
19490a
-	}
19490a
-
19490a
-	if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
19490a
-		t.Error("Union of different sets yields set with wrong elements")
19490a
-	}
19490a
-
19490a
-	if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
19490a
-		t.Error("Union of sets mutates non-destination set (argument 1)")
19490a
-	}
19490a
-
19490a
-	if !s2.Has(node(3)) || s2.Has(node(1)) || s2.Has(node(2)) || s2.count() != 1 {
19490a
-		t.Error("Union of sets mutates non-destination set (argument 2)")
19490a
-	}
19490a
-
19490a
-	for i, s := range []Set{s1, s2, s3} {
19490a
-		for e, n := range s {
19490a
-			if e != n.ID() {
19490a
-				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
-			}
19490a
-		}
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestUnionOverlapping(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-	s3 := make(Set)
19490a
-
19490a
-	s1.Add(node(1))
19490a
-	s1.Add(node(2))
19490a
-
19490a
-	s2.Add(node(2))
19490a
-	s2.Add(node(3))
19490a
-
19490a
-	s3.Union(s1, s2)
19490a
-
19490a
-	if s3.count() != 3 {
19490a
-		t.Error("Union of overlapping sets yields set with wrong len")
19490a
-	}
19490a
-
19490a
-	if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
19490a
-		t.Error("Union of overlapping sets yields set with wrong elements")
19490a
-	}
19490a
-
19490a
-	if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
19490a
-		t.Error("Union of sets mutates non-destination set (argument 1)")
19490a
-	}
19490a
-
19490a
-	if !s2.Has(node(3)) || s2.Has(node(1)) || !s2.Has(node(2)) || s2.count() != 2 {
19490a
-		t.Error("Union of sets mutates non-destination set (argument 2)")
19490a
-	}
19490a
-
19490a
-	for i, s := range []Set{s1, s2, s3} {
19490a
-		for e, n := range s {
19490a
-			if e != n.ID() {
19490a
-				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
-			}
19490a
-		}
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestIntersectSame(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-	s3 := make(Set)
19490a
-
19490a
-	s1.Add(node(2))
19490a
-	s1.Add(node(3))
19490a
-
19490a
-	s2.Add(node(2))
19490a
-	s2.Add(node(3))
19490a
-
19490a
-	s3.Intersect(s1, s2)
19490a
-
19490a
-	if card := s3.count(); card != 2 {
19490a
-		t.Errorf("Intersection of identical sets yields set of wrong len %d", card)
19490a
-	}
19490a
-
19490a
-	if !s3.Has(node(2)) || !s3.Has(node(3)) {
19490a
-		t.Error("Intersection of identical sets yields set of wrong elements")
19490a
-	}
19490a
-
19490a
-	for i, s := range []Set{s1, s2, s3} {
19490a
-		for e, n := range s {
19490a
-			if e != n.ID() {
19490a
-				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
-			}
19490a
-		}
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestIntersectDiff(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-	s3 := make(Set)
19490a
-
19490a
-	s1.Add(node(2))
19490a
-	s1.Add(node(3))
19490a
-
19490a
-	s2.Add(node(1))
19490a
-	s2.Add(node(4))
19490a
-
19490a
-	s3.Intersect(s1, s2)
19490a
-
19490a
-	if card := s3.count(); card != 0 {
19490a
-		t.Errorf("Intersection of different yields non-empty set %d", card)
19490a
-	}
19490a
-
19490a
-	if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(1)) || s1.Has(node(4)) || s1.count() != 2 {
19490a
-		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
-	}
19490a
-
19490a
-	if s2.Has(node(2)) || s2.Has(node(3)) || !s2.Has(node(1)) || !s2.Has(node(4)) || s2.count() != 2 {
19490a
-		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
-	}
19490a
-
19490a
-	for i, s := range []Set{s1, s2, s3} {
19490a
-		for e, n := range s {
19490a
-			if e != n.ID() {
19490a
-				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
-			}
19490a
-		}
19490a
-	}
19490a
-}
19490a
-
19490a
-func TestIntersectOverlapping(t *testing.T) {
19490a
-	s1 := make(Set)
19490a
-	s2 := make(Set)
19490a
-	s3 := make(Set)
19490a
-
19490a
-	s1.Add(node(2))
19490a
-	s1.Add(node(3))
19490a
-
19490a
-	s2.Add(node(3))
19490a
-	s2.Add(node(4))
19490a
-
19490a
-	s3.Intersect(s1, s2)
19490a
-
19490a
-	if card := s3.count(); card != 1 {
19490a
-		t.Errorf("Intersection of overlapping sets yields set of incorrect len %d", card)
19490a
-	}
19490a
-
19490a
-	if !s3.Has(node(3)) {
19490a
-		t.Errorf("Intersection of overlapping sets yields set with wrong element")
19490a
-	}
19490a
-
19490a
-	if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(4)) || s1.count() != 2 {
19490a
-		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
-	}
19490a
-
19490a
-	if s2.Has(node(2)) || !s2.Has(node(3)) || !s2.Has(node(4)) || s2.count() != 2 {
19490a
-		t.Error("Intersection of sets mutates non-destination set (argument 1)")
19490a
-	}
19490a
-
19490a
-	for i, s := range []Set{s1, s2, s3} {
19490a
-		for e, n := range s {
19490a
-			if e != n.ID() {
19490a
-				t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
19490a
-			}
19490a
-		}
19490a
-	}
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go
19490a
deleted file mode 100644
19490a
index 3bfee0f..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go
19490a
+++ /dev/null
19490a
@@ -1,28 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package internal
19490a
-
19490a
-// BySliceValues implements the sort.Interface sorting a slice of
19490a
-// []int lexically by the values of the []int.
19490a
-type BySliceValues [][]int
19490a
-
19490a
-func (c BySliceValues) Len() int { return len(c) }
19490a
-func (c BySliceValues) Less(i, j int) bool {
19490a
-	a, b := c[i], c[j]
19490a
-	l := len(a)
19490a
-	if len(b) < l {
19490a
-		l = len(b)
19490a
-	}
19490a
-	for k, v := range a[:l] {
19490a
-		if v < b[k] {
19490a
-			return true
19490a
-		}
19490a
-		if v > b[k] {
19490a
-			return false
19490a
-		}
19490a
-	}
19490a
-	return len(a) < len(b)
19490a
-}
19490a
-func (c BySliceValues) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go b/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go
19490a
index ad16732..dbe216e 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go
19490a
@@ -8,7 +8,7 @@ import (
19490a
 	"math"
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/path"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go b/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go
19490a
index b41d194..d742cff 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go
19490a
@@ -8,7 +8,7 @@ import (
19490a
 	"container/heap"
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 )
19490a
 
19490a
 // Heuristic returns an estimate of the cost of travelling between two nodes.
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go b/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go
19490a
index 219226d..9bebf2c 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go
19490a
@@ -6,7 +6,7 @@ package path
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 )
19490a
 
19490a
 // PostDominatores returns all dominators for all nodes in g. It does not
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go b/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go
19490a
index c22d28f..0526ba9 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go
19490a
@@ -11,7 +11,7 @@ import (
19490a
 	"testing"
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/path"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go b/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go
19490a
index ea78e79..d23bb6a 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go
19490a
@@ -11,7 +11,7 @@ import (
19490a
 	"testing"
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/path"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go b/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go
19490a
index 814000f..588581d 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go
19490a
@@ -11,7 +11,7 @@ import (
19490a
 	"testing"
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/path"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go b/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go
19490a
index 99b30cb..2e3a501 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go
19490a
@@ -9,7 +9,7 @@ import (
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
 	"github.com/gonum/graph/concrete"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 )
19490a
 
19490a
 // EdgeListerGraph is an undirected graph than returns its complete set of edges.
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go
19490a
index 5e30d5b..a012b9b 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go
19490a
@@ -6,7 +6,7 @@ package topo
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 )
19490a
 
19490a
 // VertexOrdering returns the vertex ordering and the k-cores of
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go
19490a
index 3d22c36..73e303c 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go
19490a
@@ -10,7 +10,7 @@ import (
19490a
 	"testing"
19490a
 
19490a
 	"github.com/gonum/graph/concrete"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/topo"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go
19490a
index 36d4cbd..ce9318e 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go
19490a
@@ -8,7 +8,7 @@ import (
19490a
 	"sort"
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 )
19490a
 
19490a
 // johnson implements Johnson's "Finding all the elementary
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go
19490a
index a1ee6e1..149fff2 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go
19490a
@@ -10,7 +10,7 @@ import (
19490a
 	"testing"
19490a
 
19490a
 	"github.com/gonum/graph/concrete"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/topo"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go
19490a
index 908358c..f779bbb 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go
19490a
@@ -9,7 +9,7 @@ import (
19490a
 	"sort"
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 )
19490a
 
19490a
 // Unorderable is an error containing sets of unorderable graph.Nodes.
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go
19490a
index 504633f..63c1a82 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go
19490a
@@ -10,7 +10,7 @@ import (
19490a
 	"testing"
19490a
 
19490a
 	"github.com/gonum/graph/concrete"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/topo"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go
19490a
index d903ee1..d71b788 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go
19490a
@@ -11,7 +11,7 @@ import (
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
 	"github.com/gonum/graph/concrete"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/topo"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go
19490a
index bb0fdad..a7eb54d 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go
19490a
@@ -7,7 +7,7 @@ package traverse
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/graph"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 )
19490a
 
19490a
 // BreadthFirst implements stateful breadth-first graph traversal.
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go
19490a
index c5a4e2a..b771b46 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go
19490a
@@ -12,7 +12,7 @@ import (
19490a
 
19490a
 	"github.com/gonum/graph"
19490a
 	"github.com/gonum/graph/concrete"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/traverse"
19490a
 )
19490a
 
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go
19490a
new file mode 100644
19490a
index 0000000..80d802a
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go
19490a
@@ -0,0 +1,22 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+// The extra z parameter is needed because of floats.AddScaledTo
19490a
+func CaxpyUnitary(alpha complex64, x, y, z []complex64) {
19490a
+	for i, v := range x {
19490a
+		z[i] = alpha*v + y[i]
19490a
+	}
19490a
+}
19490a
+
19490a
+func CaxpyInc(alpha complex64, x, y []complex64, n, incX, incY, ix, iy uintptr) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		y[iy] += alpha * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go
19490a
new file mode 100644
19490a
index 0000000..ed999e5
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go
19490a
@@ -0,0 +1,23 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+func CdotcUnitary(x, y []complex64) (sum complex64) {
19490a
+	for i, v := range x {
19490a
+		sum += y[i] * conj(v)
19490a
+	}
19490a
+	return
19490a
+}
19490a
+
19490a
+func CdotcInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		sum += y[iy] * conj(x[ix])
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+	return
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go
19490a
new file mode 100644
19490a
index 0000000..3392ee2
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go
19490a
@@ -0,0 +1,23 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+func CdotuUnitary(x, y []complex64) (sum complex64) {
19490a
+	for i, v := range x {
19490a
+		sum += y[i] * v
19490a
+	}
19490a
+	return
19490a
+}
19490a
+
19490a
+func CdotuInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		sum += y[iy] * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+	return
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex
19490a
new file mode 100644
19490a
index 0000000..b26e4e6
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex
19490a
@@ -0,0 +1,58 @@
19490a
+#!/usr/bin/env bash
19490a
+
19490a
+# Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+# Use of this source code is governed by a BSD-style
19490a
+# license that can be found in the LICENSE file.
19490a
+
19490a
+echo Generating zdotu.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotu.go
19490a
+cat ddot.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> complex128' \
19490a
+| sed 's/Ddot/Zdotu/' \
19490a
+>> zdotu.go
19490a
+
19490a
+echo Generating zdotc.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotc.go
19490a
+cat ddot.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> complex128' \
19490a
+| gofmt -r 'y[i] * v -> y[i] * cmplx.Conj(v)' \
19490a
+| sed 's/Ddot/Zdotc/' \
19490a
+| goimports \
19490a
+>> zdotc.go
19490a
+
19490a
+echo Generating zaxpy.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > zaxpy.go
19490a
+cat daxpy.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> complex128' \
19490a
+| sed 's/Daxpy/Zaxpy/' \
19490a
+>> zaxpy.go
19490a
+
19490a
+echo Generating cdotu.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotu.go
19490a
+cat ddot.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> complex64' \
19490a
+| sed 's/Ddot/Cdotu/' \
19490a
+>> cdotu.go
19490a
+
19490a
+echo Generating cdotc.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotc.go
19490a
+cat ddot.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> complex64' \
19490a
+| gofmt -r 'y[i] * v -> y[i] * conj(v)' \
19490a
+| sed 's/Ddot/Cdotc/' \
19490a
+| goimports \
19490a
+>> cdotc.go
19490a
+
19490a
+echo Generating caxpy.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > caxpy.go
19490a
+cat daxpy.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> complex64' \
19490a
+| sed 's/Daxpy/Caxpy/' \
19490a
+>> caxpy.go
19490a
+
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go
19490a
new file mode 100644
19490a
index 0000000..1cadb2a
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go
19490a
@@ -0,0 +1,7 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+func conj(c complex64) complex64 { return complex(real(c), -imag(c)) }
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go
19490a
new file mode 100644
19490a
index 0000000..24979fc
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go
19490a
@@ -0,0 +1,22 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+//+build !amd64 noasm
19490a
+
19490a
+package asm
19490a
+
19490a
+// The extra z parameter is needed because of floats.AddScaledTo
19490a
+func DaxpyUnitary(alpha float64, x, y, z []float64) {
19490a
+	for i, v := range x {
19490a
+		z[i] = alpha*v + y[i]
19490a
+	}
19490a
+}
19490a
+
19490a
+func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		y[iy] += alpha * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go
19490a
new file mode 100644
19490a
index 0000000..d1aeacf
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go
19490a
@@ -0,0 +1,12 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+//+build !noasm
19490a
+
19490a
+package asm
19490a
+
19490a
+// The extra z parameter is needed because of floats.AddScaledTo
19490a
+func DaxpyUnitary(alpha float64, x, y, z []float64)
19490a
+
19490a
+func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s
19490a
new file mode 100644
19490a
index 0000000..18f2d3c
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s
19490a
@@ -0,0 +1,140 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+//
19490a
+// Some of the loop unrolling code is copied from:
19490a
+// http://golang.org/src/math/big/arith_amd64.s
19490a
+// which is distributed under these terms:
19490a
+//
19490a
+// Copyright (c) 2012 The Go Authors. All rights reserved.
19490a
+// 
19490a
+// Redistribution and use in source and binary forms, with or without
19490a
+// modification, are permitted provided that the following conditions are
19490a
+// met:
19490a
+// 
19490a
+//    * Redistributions of source code must retain the above copyright
19490a
+// notice, this list of conditions and the following disclaimer.
19490a
+//    * Redistributions in binary form must reproduce the above
19490a
+// copyright notice, this list of conditions and the following disclaimer
19490a
+// in the documentation and/or other materials provided with the
19490a
+// distribution.
19490a
+//    * Neither the name of Google Inc. nor the names of its
19490a
+// contributors may be used to endorse or promote products derived from
19490a
+// this software without specific prior written permission.
19490a
+// 
19490a
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19490a
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19490a
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19490a
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19490a
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19490a
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19490a
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19490a
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
19490a
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
19490a
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
19490a
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19490a
+
19490a
+//+build !noasm
19490a
+
19490a
+// TODO(fhs): use textflag.h after we drop Go 1.3 support
19490a
+//#include "textflag.h"
19490a
+// Don't insert stack check preamble.
19490a
+#define NOSPLIT	4
19490a
+
19490a
+
19490a
+// func DaxpyUnitary(alpha float64, x, y, z []float64)
19490a
+// This function assumes len(y) >= len(x).
19490a
+TEXT ·DaxpyUnitary(SB),NOSPLIT,$0
19490a
+	MOVHPD alpha+0(FP), X7
19490a
+	MOVLPD alpha+0(FP), X7
19490a
+	MOVQ x_len+16(FP), DI	// n = len(x)
19490a
+	MOVQ x+8(FP), R8
19490a
+	MOVQ y+32(FP), R9
19490a
+	MOVQ z+56(FP), R10
19490a
+	
19490a
+	MOVQ $0, SI				// i = 0
19490a
+	SUBQ $2, DI				// n -= 2
19490a
+	JL V1					// if n < 0 goto V1
19490a
+
19490a
+U1:	// n >= 0
19490a
+	// y[i] += alpha * x[i] unrolled 2x.
19490a
+	MOVUPD 0(R8)(SI*8), X0
19490a
+	MOVUPD 0(R9)(SI*8), X1
19490a
+	MULPD X7, X0
19490a
+	ADDPD X0, X1
19490a
+	MOVUPD X1, 0(R10)(SI*8)
19490a
+	
19490a
+	ADDQ $2, SI				// i += 2
19490a
+	SUBQ $2, DI				// n -= 2
19490a
+	JGE U1					// if n >= 0 goto U1
19490a
+
19490a
+V1:
19490a
+	ADDQ $2, DI				// n += 2
19490a
+	JLE E1					// if n <= 0 goto E1
19490a
+	
19490a
+	// y[i] += alpha * x[i] for last iteration if n is odd.
19490a
+	MOVSD 0(R8)(SI*8), X0
19490a
+	MOVSD 0(R9)(SI*8), X1
19490a
+	MULSD X7, X0
19490a
+	ADDSD X0, X1
19490a
+	MOVSD X1, 0(R10)(SI*8)
19490a
+
19490a
+E1:
19490a
+	RET
19490a
+
19490a
+
19490a
+// func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
19490a
+TEXT ·DaxpyInc(SB),NOSPLIT,$0
19490a
+	MOVHPD alpha+0(FP), X7
19490a
+	MOVLPD alpha+0(FP), X7
19490a
+	MOVQ x+8(FP), R8
19490a
+	MOVQ y+32(FP), R9
19490a
+	MOVQ n+56(FP), CX
19490a
+	MOVQ incX+64(FP), R11
19490a
+	MOVQ incY+72(FP), R12
19490a
+	MOVQ ix+80(FP), SI
19490a
+	MOVQ iy+88(FP), DI
19490a
+
19490a
+	MOVQ SI, AX				// nextX = ix
19490a
+	MOVQ DI, BX				// nextY = iy
19490a
+	ADDQ R11, AX			// nextX += incX
19490a
+	ADDQ R12, BX			// nextY += incX
19490a
+	SHLQ $1, R11			// indX *= 2
19490a
+	SHLQ $1, R12			// indY *= 2
19490a
+	
19490a
+	SUBQ $2, CX				// n -= 2
19490a
+	JL V2					// if n < 0 goto V2
19490a
+
19490a
+U2:	// n >= 0
19490a
+	// y[i] += alpha * x[i] unrolled 2x.
19490a
+	MOVHPD 0(R8)(SI*8), X0
19490a
+	MOVHPD 0(R9)(DI*8), X1
19490a
+	MOVLPD 0(R8)(AX*8), X0
19490a
+	MOVLPD 0(R9)(BX*8), X1
19490a
+	
19490a
+	MULPD X7, X0
19490a
+	ADDPD X0, X1
19490a
+	MOVHPD X1, 0(R9)(DI*8)
19490a
+	MOVLPD X1, 0(R9)(BX*8)
19490a
+
19490a
+	ADDQ R11, SI			// ix += incX
19490a
+	ADDQ R12, DI			// iy += incY
19490a
+	ADDQ R11, AX			// nextX += incX
19490a
+	ADDQ R12, BX			// nextY += incY
19490a
+
19490a
+	SUBQ $2, CX				// n -= 2
19490a
+	JGE U2					// if n >= 0 goto U2
19490a
+
19490a
+V2:
19490a
+	ADDQ $2, CX				// n += 2
19490a
+	JLE E2					// if n <= 0 goto E2
19490a
+	
19490a
+	// y[i] += alpha * x[i] for the last iteration if n is odd.
19490a
+	MOVSD 0(R8)(SI*8), X0
19490a
+	MOVSD 0(R9)(DI*8), X1
19490a
+	MULSD X7, X0
19490a
+	ADDSD X0, X1
19490a
+	MOVSD X1, 0(R9)(DI*8)
19490a
+
19490a
+E2:
19490a
+	RET
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go
19490a
new file mode 100644
19490a
index 0000000..7e69957
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go
19490a
@@ -0,0 +1,23 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+//+build !amd64 noasm
19490a
+
19490a
+package asm
19490a
+
19490a
+func DdotUnitary(x, y []float64) (sum float64) {
19490a
+	for i, v := range x {
19490a
+		sum += y[i] * v
19490a
+	}
19490a
+	return
19490a
+}
19490a
+
19490a
+func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		sum += y[iy] * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+	return
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go
19490a
new file mode 100644
19490a
index 0000000..7fa634a
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go
19490a
@@ -0,0 +1,10 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+//+build !noasm
19490a
+
19490a
+package asm
19490a
+
19490a
+func DdotUnitary(x, y []float64) (sum float64)
19490a
+func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s
19490a
new file mode 100644
19490a
index 0000000..a898bbb
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s
19490a
@@ -0,0 +1,140 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+//
19490a
+// Some of the loop unrolling code is copied from:
19490a
+// http://golang.org/src/math/big/arith_amd64.s
19490a
+// which is distributed under these terms:
19490a
+//
19490a
+// Copyright (c) 2012 The Go Authors. All rights reserved.
19490a
+// 
19490a
+// Redistribution and use in source and binary forms, with or without
19490a
+// modification, are permitted provided that the following conditions are
19490a
+// met:
19490a
+// 
19490a
+//    * Redistributions of source code must retain the above copyright
19490a
+// notice, this list of conditions and the following disclaimer.
19490a
+//    * Redistributions in binary form must reproduce the above
19490a
+// copyright notice, this list of conditions and the following disclaimer
19490a
+// in the documentation and/or other materials provided with the
19490a
+// distribution.
19490a
+//    * Neither the name of Google Inc. nor the names of its
19490a
+// contributors may be used to endorse or promote products derived from
19490a
+// this software without specific prior written permission.
19490a
+// 
19490a
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19490a
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19490a
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19490a
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19490a
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19490a
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19490a
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19490a
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
19490a
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
19490a
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
19490a
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19490a
+
19490a
+//+build !noasm
19490a
+
19490a
+// TODO(fhs): use textflag.h after we drop Go 1.3 support
19490a
+//#include "textflag.h"
19490a
+// Don't insert stack check preamble.
19490a
+#define NOSPLIT	4
19490a
+
19490a
+
19490a
+// func DdotUnitary(x, y []float64) (sum float64)
19490a
+// This function assumes len(y) >= len(x).
19490a
+TEXT ·DdotUnitary(SB),NOSPLIT,$0
19490a
+	MOVQ x_len+8(FP), DI	// n = len(x)
19490a
+	MOVQ x+0(FP), R8
19490a
+	MOVQ y+24(FP), R9
19490a
+	
19490a
+	MOVQ $0, SI				// i = 0
19490a
+	MOVSD $(0.0), X7		// sum = 0
19490a
+	
19490a
+	SUBQ $2, DI				// n -= 2
19490a
+	JL V1					// if n < 0 goto V1
19490a
+
19490a
+U1:	// n >= 0
19490a
+	// sum += x[i] * y[i] unrolled 2x.
19490a
+	MOVUPD 0(R8)(SI*8), X0
19490a
+	MOVUPD 0(R9)(SI*8), X1
19490a
+	MULPD X1, X0
19490a
+	ADDPD X0, X7
19490a
+	
19490a
+	ADDQ $2, SI				// i += 2
19490a
+	SUBQ $2, DI				// n -= 2
19490a
+	JGE U1					// if n >= 0 goto U1
19490a
+
19490a
+V1:	// n > 0
19490a
+	ADDQ $2, DI				// n += 2
19490a
+	JLE E1					// if n <= 0 goto E1
19490a
+	
19490a
+	// sum += x[i] * y[i] for last iteration if n is odd.
19490a
+	MOVSD 0(R8)(SI*8), X0
19490a
+	MOVSD 0(R9)(SI*8), X1
19490a
+	MULSD X1, X0
19490a
+	ADDSD X0, X7
19490a
+
19490a
+E1:
19490a
+	// Add the two sums together.
19490a
+	MOVSD X7, X0
19490a
+	UNPCKHPD X7, X7
19490a
+	ADDSD X0, X7
19490a
+	MOVSD X7, sum+48(FP)	// return final sum
19490a
+	RET
19490a
+
19490a
+
19490a
+// func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
19490a
+TEXT ·DdotInc(SB),NOSPLIT,$0
19490a
+	MOVQ x+0(FP), R8
19490a
+	MOVQ y+24(FP), R9
19490a
+	MOVQ n+48(FP), CX
19490a
+	MOVQ incX+56(FP), R11
19490a
+	MOVQ incY+64(FP), R12
19490a
+	MOVQ ix+72(FP), R13
19490a
+	MOVQ iy+80(FP), R14
19490a
+	
19490a
+	MOVSD $(0.0), X7		// sum = 0
19490a
+	LEAQ (R8)(R13*8), SI	// p = &x[ix]
19490a
+	LEAQ (R9)(R14*8), DI	// q = &y[ix]
19490a
+	SHLQ $3, R11			// incX *= sizeof(float64)
19490a
+	SHLQ $3, R12			// indY *= sizeof(float64)
19490a
+	
19490a
+	SUBQ $2, CX				// n -= 2
19490a
+	JL V2					// if n < 0 goto V2
19490a
+
19490a
+U2:	// n >= 0
19490a
+	// sum += *p * *q unrolled 2x.
19490a
+	MOVHPD (SI), X0
19490a
+	MOVHPD (DI), X1
19490a
+	ADDQ R11, SI			// p += incX
19490a
+	ADDQ R12, DI			// q += incY
19490a
+	MOVLPD (SI), X0
19490a
+	MOVLPD (DI), X1
19490a
+	ADDQ R11, SI			// p += incX
19490a
+	ADDQ R12, DI			// q += incY
19490a
+	
19490a
+	MULPD X1, X0
19490a
+	ADDPD X0, X7
19490a
+
19490a
+	SUBQ $2, CX				// n -= 2
19490a
+	JGE U2					// if n >= 0 goto U2
19490a
+
19490a
+V2:
19490a
+	ADDQ $2, CX				// n += 2
19490a
+	JLE E2					// if n <= 0 goto E2
19490a
+	
19490a
+	// sum += *p * *q for the last iteration if n is odd.
19490a
+	MOVSD (SI), X0
19490a
+	MULSD (DI), X0
19490a
+	ADDSD X0, X7
19490a
+
19490a
+E2:
19490a
+	// Add the two sums together.
19490a
+	MOVSD X7, X0
19490a
+	UNPCKHPD X7, X7
19490a
+	ADDSD X0, X7
19490a
+	MOVSD X7, sum+88(FP)	// return final sum
19490a
+	RET
19490a
+  
19490a
\ No newline at end of file
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go
19490a
new file mode 100644
19490a
index 0000000..8450689
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go
19490a
@@ -0,0 +1,23 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+func DsdotUnitary(x, y []float32) (sum float64) {
19490a
+	for i, v := range x {
19490a
+		sum += float64(y[i]) * float64(v)
19490a
+	}
19490a
+	return
19490a
+}
19490a
+
19490a
+func DsdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float64) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		sum += float64(y[iy]) * float64(x[ix])
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+	return
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go
19490a
new file mode 100644
19490a
index 0000000..e252140
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go
19490a
@@ -0,0 +1,8 @@
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+//go:generate ./single_precision
19490a
+//go:generate ./complex
19490a
+
19490a
+package asm
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go
19490a
new file mode 100644
19490a
index 0000000..3ef767f
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go
19490a
@@ -0,0 +1,22 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+// The extra z parameter is needed because of floats.AddScaledTo
19490a
+func SaxpyUnitary(alpha float32, x, y, z []float32) {
19490a
+	for i, v := range x {
19490a
+		z[i] = alpha*v + y[i]
19490a
+	}
19490a
+}
19490a
+
19490a
+func SaxpyInc(alpha float32, x, y []float32, n, incX, incY, ix, iy uintptr) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		y[iy] += alpha * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go
19490a
new file mode 100644
19490a
index 0000000..0cef5de
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go
19490a
@@ -0,0 +1,23 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+func SdotUnitary(x, y []float32) (sum float32) {
19490a
+	for i, v := range x {
19490a
+		sum += y[i] * v
19490a
+	}
19490a
+	return
19490a
+}
19490a
+
19490a
+func SdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float32) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		sum += y[iy] * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+	return
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision
19490a
new file mode 100644
19490a
index 0000000..a937a97
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision
19490a
@@ -0,0 +1,30 @@
19490a
+#!/usr/bin/env bash
19490a
+
19490a
+# Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+# Use of this source code is governed by a BSD-style
19490a
+# license that can be found in the LICENSE file.
19490a
+
19490a
+echo Generating dsdot.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > dsdot.go
19490a
+cat ddot.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r '[]float64 -> []float32' \
19490a
+| gofmt -r 'a * b -> float64(a) * float64(b)' \
19490a
+| sed 's/Ddot/Dsdot/' \
19490a
+>> dsdot.go
19490a
+
19490a
+echo Generating sdot.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > sdot.go
19490a
+cat ddot.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> float32' \
19490a
+| sed 's/Ddot/Sdot/' \
19490a
+>> sdot.go
19490a
+
19490a
+echo Generating saxpy.go
19490a
+echo -e '// Generated code do not edit. Run `go generate`.\n' > saxpy.go
19490a
+cat daxpy.go \
19490a
+| grep -v '//+build' \
19490a
+| gofmt -r 'float64 -> float32' \
19490a
+| sed 's/Daxpy/Saxpy/' \
19490a
+>> saxpy.go
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go
19490a
new file mode 100644
19490a
index 0000000..9478f25
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go
19490a
@@ -0,0 +1,22 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+// The extra z parameter is needed because of floats.AddScaledTo
19490a
+func ZaxpyUnitary(alpha complex128, x, y, z []complex128) {
19490a
+	for i, v := range x {
19490a
+		z[i] = alpha*v + y[i]
19490a
+	}
19490a
+}
19490a
+
19490a
+func ZaxpyInc(alpha complex128, x, y []complex128, n, incX, incY, ix, iy uintptr) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		y[iy] += alpha * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go
19490a
new file mode 100644
19490a
index 0000000..7b8febc
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go
19490a
@@ -0,0 +1,25 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+import "math/cmplx"
19490a
+
19490a
+func ZdotcUnitary(x, y []complex128) (sum complex128) {
19490a
+	for i, v := range x {
19490a
+		sum += y[i] * cmplx.Conj(v)
19490a
+	}
19490a
+	return
19490a
+}
19490a
+
19490a
+func ZdotcInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		sum += y[iy] * cmplx.Conj(x[ix])
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+	return
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go
19490a
new file mode 100644
19490a
index 0000000..82c1fe2
19490a
--- /dev/null
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go
19490a
@@ -0,0 +1,23 @@
19490a
+// Generated code do not edit. Run `go generate`.
19490a
+
19490a
+// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
+// Use of this source code is governed by a BSD-style
19490a
+// license that can be found in the LICENSE file.
19490a
+
19490a
+package asm
19490a
+
19490a
+func ZdotuUnitary(x, y []complex128) (sum complex128) {
19490a
+	for i, v := range x {
19490a
+		sum += y[i] * v
19490a
+	}
19490a
+	return
19490a
+}
19490a
+
19490a
+func ZdotuInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
19490a
+	for i := 0; i < int(n); i++ {
19490a
+		sum += y[iy] * x[ix]
19490a
+		ix += incX
19490a
+		iy += incY
19490a
+	}
19490a
+	return
19490a
+}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go
19490a
deleted file mode 100644
19490a
index 80d802a..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go
19490a
+++ /dev/null
19490a
@@ -1,22 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-// The extra z parameter is needed because of floats.AddScaledTo
19490a
-func CaxpyUnitary(alpha complex64, x, y, z []complex64) {
19490a
-	for i, v := range x {
19490a
-		z[i] = alpha*v + y[i]
19490a
-	}
19490a
-}
19490a
-
19490a
-func CaxpyInc(alpha complex64, x, y []complex64, n, incX, incY, ix, iy uintptr) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		y[iy] += alpha * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go
19490a
deleted file mode 100644
19490a
index ed999e5..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go
19490a
+++ /dev/null
19490a
@@ -1,23 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-func CdotcUnitary(x, y []complex64) (sum complex64) {
19490a
-	for i, v := range x {
19490a
-		sum += y[i] * conj(v)
19490a
-	}
19490a
-	return
19490a
-}
19490a
-
19490a
-func CdotcInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		sum += y[iy] * conj(x[ix])
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-	return
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go
19490a
deleted file mode 100644
19490a
index 3392ee2..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go
19490a
+++ /dev/null
19490a
@@ -1,23 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-func CdotuUnitary(x, y []complex64) (sum complex64) {
19490a
-	for i, v := range x {
19490a
-		sum += y[i] * v
19490a
-	}
19490a
-	return
19490a
-}
19490a
-
19490a
-func CdotuInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		sum += y[iy] * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-	return
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/complex b/Godeps/_workspace/src/github.com/gonum/internal/asm/complex
19490a
deleted file mode 100644
19490a
index b26e4e6..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/complex
19490a
+++ /dev/null
19490a
@@ -1,58 +0,0 @@
19490a
-#!/usr/bin/env bash
19490a
-
19490a
-# Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-# Use of this source code is governed by a BSD-style
19490a
-# license that can be found in the LICENSE file.
19490a
-
19490a
-echo Generating zdotu.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotu.go
19490a
-cat ddot.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> complex128' \
19490a
-| sed 's/Ddot/Zdotu/' \
19490a
->> zdotu.go
19490a
-
19490a
-echo Generating zdotc.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotc.go
19490a
-cat ddot.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> complex128' \
19490a
-| gofmt -r 'y[i] * v -> y[i] * cmplx.Conj(v)' \
19490a
-| sed 's/Ddot/Zdotc/' \
19490a
-| goimports \
19490a
->> zdotc.go
19490a
-
19490a
-echo Generating zaxpy.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > zaxpy.go
19490a
-cat daxpy.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> complex128' \
19490a
-| sed 's/Daxpy/Zaxpy/' \
19490a
->> zaxpy.go
19490a
-
19490a
-echo Generating cdotu.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotu.go
19490a
-cat ddot.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> complex64' \
19490a
-| sed 's/Ddot/Cdotu/' \
19490a
->> cdotu.go
19490a
-
19490a
-echo Generating cdotc.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotc.go
19490a
-cat ddot.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> complex64' \
19490a
-| gofmt -r 'y[i] * v -> y[i] * conj(v)' \
19490a
-| sed 's/Ddot/Cdotc/' \
19490a
-| goimports \
19490a
->> cdotc.go
19490a
-
19490a
-echo Generating caxpy.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > caxpy.go
19490a
-cat daxpy.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> complex64' \
19490a
-| sed 's/Daxpy/Caxpy/' \
19490a
->> caxpy.go
19490a
-
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go
19490a
deleted file mode 100644
19490a
index 1cadb2a..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go
19490a
+++ /dev/null
19490a
@@ -1,7 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-func conj(c complex64) complex64 { return complex(real(c), -imag(c)) }
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go
19490a
deleted file mode 100644
19490a
index 24979fc..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go
19490a
+++ /dev/null
19490a
@@ -1,22 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-//+build !amd64 noasm
19490a
-
19490a
-package asm
19490a
-
19490a
-// The extra z parameter is needed because of floats.AddScaledTo
19490a
-func DaxpyUnitary(alpha float64, x, y, z []float64) {
19490a
-	for i, v := range x {
19490a
-		z[i] = alpha*v + y[i]
19490a
-	}
19490a
-}
19490a
-
19490a
-func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		y[iy] += alpha * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go
19490a
deleted file mode 100644
19490a
index d1aeacf..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go
19490a
+++ /dev/null
19490a
@@ -1,12 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-//+build !noasm
19490a
-
19490a
-package asm
19490a
-
19490a
-// The extra z parameter is needed because of floats.AddScaledTo
19490a
-func DaxpyUnitary(alpha float64, x, y, z []float64)
19490a
-
19490a
-func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s b/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s
19490a
deleted file mode 100644
19490a
index 18f2d3c..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s
19490a
+++ /dev/null
19490a
@@ -1,140 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-//
19490a
-// Some of the loop unrolling code is copied from:
19490a
-// http://golang.org/src/math/big/arith_amd64.s
19490a
-// which is distributed under these terms:
19490a
-//
19490a
-// Copyright (c) 2012 The Go Authors. All rights reserved.
19490a
-// 
19490a
-// Redistribution and use in source and binary forms, with or without
19490a
-// modification, are permitted provided that the following conditions are
19490a
-// met:
19490a
-// 
19490a
-//    * Redistributions of source code must retain the above copyright
19490a
-// notice, this list of conditions and the following disclaimer.
19490a
-//    * Redistributions in binary form must reproduce the above
19490a
-// copyright notice, this list of conditions and the following disclaimer
19490a
-// in the documentation and/or other materials provided with the
19490a
-// distribution.
19490a
-//    * Neither the name of Google Inc. nor the names of its
19490a
-// contributors may be used to endorse or promote products derived from
19490a
-// this software without specific prior written permission.
19490a
-// 
19490a
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19490a
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19490a
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19490a
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19490a
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19490a
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19490a
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19490a
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
19490a
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
19490a
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
19490a
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19490a
-
19490a
-//+build !noasm
19490a
-
19490a
-// TODO(fhs): use textflag.h after we drop Go 1.3 support
19490a
-//#include "textflag.h"
19490a
-// Don't insert stack check preamble.
19490a
-#define NOSPLIT	4
19490a
-
19490a
-
19490a
-// func DaxpyUnitary(alpha float64, x, y, z []float64)
19490a
-// This function assumes len(y) >= len(x).
19490a
-TEXT ·DaxpyUnitary(SB),NOSPLIT,$0
19490a
-	MOVHPD alpha+0(FP), X7
19490a
-	MOVLPD alpha+0(FP), X7
19490a
-	MOVQ x_len+16(FP), DI	// n = len(x)
19490a
-	MOVQ x+8(FP), R8
19490a
-	MOVQ y+32(FP), R9
19490a
-	MOVQ z+56(FP), R10
19490a
-	
19490a
-	MOVQ $0, SI				// i = 0
19490a
-	SUBQ $2, DI				// n -= 2
19490a
-	JL V1					// if n < 0 goto V1
19490a
-
19490a
-U1:	// n >= 0
19490a
-	// y[i] += alpha * x[i] unrolled 2x.
19490a
-	MOVUPD 0(R8)(SI*8), X0
19490a
-	MOVUPD 0(R9)(SI*8), X1
19490a
-	MULPD X7, X0
19490a
-	ADDPD X0, X1
19490a
-	MOVUPD X1, 0(R10)(SI*8)
19490a
-	
19490a
-	ADDQ $2, SI				// i += 2
19490a
-	SUBQ $2, DI				// n -= 2
19490a
-	JGE U1					// if n >= 0 goto U1
19490a
-
19490a
-V1:
19490a
-	ADDQ $2, DI				// n += 2
19490a
-	JLE E1					// if n <= 0 goto E1
19490a
-	
19490a
-	// y[i] += alpha * x[i] for last iteration if n is odd.
19490a
-	MOVSD 0(R8)(SI*8), X0
19490a
-	MOVSD 0(R9)(SI*8), X1
19490a
-	MULSD X7, X0
19490a
-	ADDSD X0, X1
19490a
-	MOVSD X1, 0(R10)(SI*8)
19490a
-
19490a
-E1:
19490a
-	RET
19490a
-
19490a
-
19490a
-// func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
19490a
-TEXT ·DaxpyInc(SB),NOSPLIT,$0
19490a
-	MOVHPD alpha+0(FP), X7
19490a
-	MOVLPD alpha+0(FP), X7
19490a
-	MOVQ x+8(FP), R8
19490a
-	MOVQ y+32(FP), R9
19490a
-	MOVQ n+56(FP), CX
19490a
-	MOVQ incX+64(FP), R11
19490a
-	MOVQ incY+72(FP), R12
19490a
-	MOVQ ix+80(FP), SI
19490a
-	MOVQ iy+88(FP), DI
19490a
-
19490a
-	MOVQ SI, AX				// nextX = ix
19490a
-	MOVQ DI, BX				// nextY = iy
19490a
-	ADDQ R11, AX			// nextX += incX
19490a
-	ADDQ R12, BX			// nextY += incX
19490a
-	SHLQ $1, R11			// indX *= 2
19490a
-	SHLQ $1, R12			// indY *= 2
19490a
-	
19490a
-	SUBQ $2, CX				// n -= 2
19490a
-	JL V2					// if n < 0 goto V2
19490a
-
19490a
-U2:	// n >= 0
19490a
-	// y[i] += alpha * x[i] unrolled 2x.
19490a
-	MOVHPD 0(R8)(SI*8), X0
19490a
-	MOVHPD 0(R9)(DI*8), X1
19490a
-	MOVLPD 0(R8)(AX*8), X0
19490a
-	MOVLPD 0(R9)(BX*8), X1
19490a
-	
19490a
-	MULPD X7, X0
19490a
-	ADDPD X0, X1
19490a
-	MOVHPD X1, 0(R9)(DI*8)
19490a
-	MOVLPD X1, 0(R9)(BX*8)
19490a
-
19490a
-	ADDQ R11, SI			// ix += incX
19490a
-	ADDQ R12, DI			// iy += incY
19490a
-	ADDQ R11, AX			// nextX += incX
19490a
-	ADDQ R12, BX			// nextY += incY
19490a
-
19490a
-	SUBQ $2, CX				// n -= 2
19490a
-	JGE U2					// if n >= 0 goto U2
19490a
-
19490a
-V2:
19490a
-	ADDQ $2, CX				// n += 2
19490a
-	JLE E2					// if n <= 0 goto E2
19490a
-	
19490a
-	// y[i] += alpha * x[i] for the last iteration if n is odd.
19490a
-	MOVSD 0(R8)(SI*8), X0
19490a
-	MOVSD 0(R9)(DI*8), X1
19490a
-	MULSD X7, X0
19490a
-	ADDSD X0, X1
19490a
-	MOVSD X1, 0(R9)(DI*8)
19490a
-
19490a
-E2:
19490a
-	RET
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go
19490a
deleted file mode 100644
19490a
index 7e69957..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go
19490a
+++ /dev/null
19490a
@@ -1,23 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-//+build !amd64 noasm
19490a
-
19490a
-package asm
19490a
-
19490a
-func DdotUnitary(x, y []float64) (sum float64) {
19490a
-	for i, v := range x {
19490a
-		sum += y[i] * v
19490a
-	}
19490a
-	return
19490a
-}
19490a
-
19490a
-func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		sum += y[iy] * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-	return
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go
19490a
deleted file mode 100644
19490a
index 7fa634a..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go
19490a
+++ /dev/null
19490a
@@ -1,10 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-//+build !noasm
19490a
-
19490a
-package asm
19490a
-
19490a
-func DdotUnitary(x, y []float64) (sum float64)
19490a
-func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s b/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s
19490a
deleted file mode 100644
19490a
index a898bbb..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s
19490a
+++ /dev/null
19490a
@@ -1,140 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-//
19490a
-// Some of the loop unrolling code is copied from:
19490a
-// http://golang.org/src/math/big/arith_amd64.s
19490a
-// which is distributed under these terms:
19490a
-//
19490a
-// Copyright (c) 2012 The Go Authors. All rights reserved.
19490a
-// 
19490a
-// Redistribution and use in source and binary forms, with or without
19490a
-// modification, are permitted provided that the following conditions are
19490a
-// met:
19490a
-// 
19490a
-//    * Redistributions of source code must retain the above copyright
19490a
-// notice, this list of conditions and the following disclaimer.
19490a
-//    * Redistributions in binary form must reproduce the above
19490a
-// copyright notice, this list of conditions and the following disclaimer
19490a
-// in the documentation and/or other materials provided with the
19490a
-// distribution.
19490a
-//    * Neither the name of Google Inc. nor the names of its
19490a
-// contributors may be used to endorse or promote products derived from
19490a
-// this software without specific prior written permission.
19490a
-// 
19490a
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19490a
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19490a
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19490a
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19490a
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19490a
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19490a
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19490a
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
19490a
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
19490a
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
19490a
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19490a
-
19490a
-//+build !noasm
19490a
-
19490a
-// TODO(fhs): use textflag.h after we drop Go 1.3 support
19490a
-//#include "textflag.h"
19490a
-// Don't insert stack check preamble.
19490a
-#define NOSPLIT	4
19490a
-
19490a
-
19490a
-// func DdotUnitary(x, y []float64) (sum float64)
19490a
-// This function assumes len(y) >= len(x).
19490a
-TEXT ·DdotUnitary(SB),NOSPLIT,$0
19490a
-	MOVQ x_len+8(FP), DI	// n = len(x)
19490a
-	MOVQ x+0(FP), R8
19490a
-	MOVQ y+24(FP), R9
19490a
-	
19490a
-	MOVQ $0, SI				// i = 0
19490a
-	MOVSD $(0.0), X7		// sum = 0
19490a
-	
19490a
-	SUBQ $2, DI				// n -= 2
19490a
-	JL V1					// if n < 0 goto V1
19490a
-
19490a
-U1:	// n >= 0
19490a
-	// sum += x[i] * y[i] unrolled 2x.
19490a
-	MOVUPD 0(R8)(SI*8), X0
19490a
-	MOVUPD 0(R9)(SI*8), X1
19490a
-	MULPD X1, X0
19490a
-	ADDPD X0, X7
19490a
-	
19490a
-	ADDQ $2, SI				// i += 2
19490a
-	SUBQ $2, DI				// n -= 2
19490a
-	JGE U1					// if n >= 0 goto U1
19490a
-
19490a
-V1:	// n > 0
19490a
-	ADDQ $2, DI				// n += 2
19490a
-	JLE E1					// if n <= 0 goto E1
19490a
-	
19490a
-	// sum += x[i] * y[i] for last iteration if n is odd.
19490a
-	MOVSD 0(R8)(SI*8), X0
19490a
-	MOVSD 0(R9)(SI*8), X1
19490a
-	MULSD X1, X0
19490a
-	ADDSD X0, X7
19490a
-
19490a
-E1:
19490a
-	// Add the two sums together.
19490a
-	MOVSD X7, X0
19490a
-	UNPCKHPD X7, X7
19490a
-	ADDSD X0, X7
19490a
-	MOVSD X7, sum+48(FP)	// return final sum
19490a
-	RET
19490a
-
19490a
-
19490a
-// func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
19490a
-TEXT ·DdotInc(SB),NOSPLIT,$0
19490a
-	MOVQ x+0(FP), R8
19490a
-	MOVQ y+24(FP), R9
19490a
-	MOVQ n+48(FP), CX
19490a
-	MOVQ incX+56(FP), R11
19490a
-	MOVQ incY+64(FP), R12
19490a
-	MOVQ ix+72(FP), R13
19490a
-	MOVQ iy+80(FP), R14
19490a
-	
19490a
-	MOVSD $(0.0), X7		// sum = 0
19490a
-	LEAQ (R8)(R13*8), SI	// p = &x[ix]
19490a
-	LEAQ (R9)(R14*8), DI	// q = &y[ix]
19490a
-	SHLQ $3, R11			// incX *= sizeof(float64)
19490a
-	SHLQ $3, R12			// indY *= sizeof(float64)
19490a
-	
19490a
-	SUBQ $2, CX				// n -= 2
19490a
-	JL V2					// if n < 0 goto V2
19490a
-
19490a
-U2:	// n >= 0
19490a
-	// sum += *p * *q unrolled 2x.
19490a
-	MOVHPD (SI), X0
19490a
-	MOVHPD (DI), X1
19490a
-	ADDQ R11, SI			// p += incX
19490a
-	ADDQ R12, DI			// q += incY
19490a
-	MOVLPD (SI), X0
19490a
-	MOVLPD (DI), X1
19490a
-	ADDQ R11, SI			// p += incX
19490a
-	ADDQ R12, DI			// q += incY
19490a
-	
19490a
-	MULPD X1, X0
19490a
-	ADDPD X0, X7
19490a
-
19490a
-	SUBQ $2, CX				// n -= 2
19490a
-	JGE U2					// if n >= 0 goto U2
19490a
-
19490a
-V2:
19490a
-	ADDQ $2, CX				// n += 2
19490a
-	JLE E2					// if n <= 0 goto E2
19490a
-	
19490a
-	// sum += *p * *q for the last iteration if n is odd.
19490a
-	MOVSD (SI), X0
19490a
-	MULSD (DI), X0
19490a
-	ADDSD X0, X7
19490a
-
19490a
-E2:
19490a
-	// Add the two sums together.
19490a
-	MOVSD X7, X0
19490a
-	UNPCKHPD X7, X7
19490a
-	ADDSD X0, X7
19490a
-	MOVSD X7, sum+88(FP)	// return final sum
19490a
-	RET
19490a
-  
19490a
\ No newline at end of file
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go
19490a
deleted file mode 100644
19490a
index 8450689..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go
19490a
+++ /dev/null
19490a
@@ -1,23 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-func DsdotUnitary(x, y []float32) (sum float64) {
19490a
-	for i, v := range x {
19490a
-		sum += float64(y[i]) * float64(v)
19490a
-	}
19490a
-	return
19490a
-}
19490a
-
19490a
-func DsdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float64) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		sum += float64(y[iy]) * float64(x[ix])
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-	return
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go
19490a
deleted file mode 100644
19490a
index e252140..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go
19490a
+++ /dev/null
19490a
@@ -1,8 +0,0 @@
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-//go:generate ./single_precision
19490a
-//go:generate ./complex
19490a
-
19490a
-package asm
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go
19490a
deleted file mode 100644
19490a
index 3ef767f..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go
19490a
+++ /dev/null
19490a
@@ -1,22 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-// The extra z parameter is needed because of floats.AddScaledTo
19490a
-func SaxpyUnitary(alpha float32, x, y, z []float32) {
19490a
-	for i, v := range x {
19490a
-		z[i] = alpha*v + y[i]
19490a
-	}
19490a
-}
19490a
-
19490a
-func SaxpyInc(alpha float32, x, y []float32, n, incX, incY, ix, iy uintptr) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		y[iy] += alpha * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go
19490a
deleted file mode 100644
19490a
index 0cef5de..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go
19490a
+++ /dev/null
19490a
@@ -1,23 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-func SdotUnitary(x, y []float32) (sum float32) {
19490a
-	for i, v := range x {
19490a
-		sum += y[i] * v
19490a
-	}
19490a
-	return
19490a
-}
19490a
-
19490a
-func SdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float32) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		sum += y[iy] * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-	return
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision b/Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision
19490a
deleted file mode 100644
19490a
index a937a97..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision
19490a
+++ /dev/null
19490a
@@ -1,30 +0,0 @@
19490a
-#!/usr/bin/env bash
19490a
-
19490a
-# Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-# Use of this source code is governed by a BSD-style
19490a
-# license that can be found in the LICENSE file.
19490a
-
19490a
-echo Generating dsdot.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > dsdot.go
19490a
-cat ddot.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r '[]float64 -> []float32' \
19490a
-| gofmt -r 'a * b -> float64(a) * float64(b)' \
19490a
-| sed 's/Ddot/Dsdot/' \
19490a
->> dsdot.go
19490a
-
19490a
-echo Generating sdot.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > sdot.go
19490a
-cat ddot.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> float32' \
19490a
-| sed 's/Ddot/Sdot/' \
19490a
->> sdot.go
19490a
-
19490a
-echo Generating saxpy.go
19490a
-echo -e '// Generated code do not edit. Run `go generate`.\n' > saxpy.go
19490a
-cat daxpy.go \
19490a
-| grep -v '//+build' \
19490a
-| gofmt -r 'float64 -> float32' \
19490a
-| sed 's/Daxpy/Saxpy/' \
19490a
->> saxpy.go
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go
19490a
deleted file mode 100644
19490a
index 9478f25..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go
19490a
+++ /dev/null
19490a
@@ -1,22 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-// The extra z parameter is needed because of floats.AddScaledTo
19490a
-func ZaxpyUnitary(alpha complex128, x, y, z []complex128) {
19490a
-	for i, v := range x {
19490a
-		z[i] = alpha*v + y[i]
19490a
-	}
19490a
-}
19490a
-
19490a
-func ZaxpyInc(alpha complex128, x, y []complex128, n, incX, incY, ix, iy uintptr) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		y[iy] += alpha * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go
19490a
deleted file mode 100644
19490a
index 7b8febc..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go
19490a
+++ /dev/null
19490a
@@ -1,25 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-import "math/cmplx"
19490a
-
19490a
-func ZdotcUnitary(x, y []complex128) (sum complex128) {
19490a
-	for i, v := range x {
19490a
-		sum += y[i] * cmplx.Conj(v)
19490a
-	}
19490a
-	return
19490a
-}
19490a
-
19490a
-func ZdotcInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		sum += y[iy] * cmplx.Conj(x[ix])
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-	return
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go
19490a
deleted file mode 100644
19490a
index 82c1fe2..0000000
19490a
--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go
19490a
+++ /dev/null
19490a
@@ -1,23 +0,0 @@
19490a
-// Generated code do not edit. Run `go generate`.
19490a
-
19490a
-// Copyright ©2015 The gonum Authors. All rights reserved.
19490a
-// Use of this source code is governed by a BSD-style
19490a
-// license that can be found in the LICENSE file.
19490a
-
19490a
-package asm
19490a
-
19490a
-func ZdotuUnitary(x, y []complex128) (sum complex128) {
19490a
-	for i, v := range x {
19490a
-		sum += y[i] * v
19490a
-	}
19490a
-	return
19490a
-}
19490a
-
19490a
-func ZdotuInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
19490a
-	for i := 0; i < int(n); i++ {
19490a
-		sum += y[iy] * x[ix]
19490a
-		ix += incX
19490a
-		iy += incY
19490a
-	}
19490a
-	return
19490a
-}
19490a
diff --git a/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go b/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go
19490a
index 77616ba..1610a83 100644
19490a
--- a/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go
19490a
+++ b/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go
19490a
@@ -6,7 +6,7 @@ package mat64
19490a
 
19490a
 import (
19490a
 	"github.com/gonum/blas"
19490a
-	"github.com/gonum/internal/asm"
19490a
+	"github.com/gonum/inteernal/asm"
19490a
 )
19490a
 
19490a
 // Inner computes the generalized inner product
19490a
diff --git a/pkg/cmd/cli/describe/chaindescriber.go b/pkg/cmd/cli/describe/chaindescriber.go
19490a
index 2ca7c6e..2d2b6c8 100644
19490a
--- a/pkg/cmd/cli/describe/chaindescriber.go
19490a
+++ b/pkg/cmd/cli/describe/chaindescriber.go
19490a
@@ -8,7 +8,7 @@ import (
19490a
 	"github.com/golang/glog"
19490a
 	"github.com/gonum/graph"
19490a
 	"github.com/gonum/graph/encoding/dot"
19490a
-	"github.com/gonum/graph/internal"
19490a
+	"github.com/gonum/graph/inteernal"
19490a
 	"github.com/gonum/graph/path"
19490a
 	kapi "k8s.io/kubernetes/pkg/api"
19490a
 	utilerrors "k8s.io/kubernetes/pkg/util/errors"
19490a
-- 
19490a
1.9.3
19490a