{"action":"created","comment":{"url":"https://api.github.com/repos/gonum/matrix/pulls/comments/35488680","id":35488680,"diff_hunk":"@@ -0,0 +1,684 @@\n+// Copyright ©2015 The gonum Authors. All rights reserved.\n+// Use of this source code is governed by a BSD-style\n+// license that can be found in the LICENSE file.\n+\n+package mat64\n+\n+import (\n+\t\"fmt\"\n+\t\"math/rand\"\n+\t\"reflect\"\n+\n+\t\"github.com/gonum/blas/blas64\"\n+\t\"github.com/gonum/floats\"\n+\t\"gopkg.in/check.v1\"\n+)\n+\n+// The sizes are legal when the two matrices have the same rectangular shape.\n+func dimsOKSameRectangular(ar, ac, br, bc int) bool {\n+\tif ar != br {\n+\t\treturn false\n+\t}\n+\tif ac != bc {\n+\t\treturn false\n+\t}\n+\treturn true\n+}\n+\n+// The sizes are legal when the two matrices have the same square shape.\n+func dimsOKSameSquare(ar, ac, br, bc int) bool {\n+\tif ar != br {\n+\t\treturn false\n+\t}\n+\tif ac != bc {\n+\t\treturn false\n+\t}\n+\tif ar != ac {\n+\t\treturn false\n+\t}\n+\treturn true\n+}\n+\n+// All Matrix types are legal.\n+func legalTypesAll(a, b Matrix) bool {\n+\treturn true\n+}\n+\n+// Symmetric types are legal.\n+func legalTypesSym(a, b Matrix) bool {\n+\tif _, ok := a.(Symmetric); !ok {\n+\t\treturn false\n+\t}\n+\tif _, ok := b.(Symmetric); !ok {\n+\t\treturn false\n+\t}\n+\treturn true\n+}\n+\n+// legalDims returns true if {m,n} is a valid dimension of the given matrix type.\n+func legalDims(a Matrix, m, n int) bool {\n+\tswitch a.(type) {\n+\tdefault:\n+\t\tpanic(\"not coded\")\n+\tcase *Dense, *basicMatrix, *basicVectorer:\n+\t\tif m < 0 || n < 0 {\n+\t\t\treturn false\n+\t\t}\n+\t\treturn true\n+\tcase *SymDense, *TriDense, *basicSymmetric, *basicTriangular:\n+\t\tif m < 0 || n < 0 || m != n {\n+\t\t\treturn false\n+\t\t}\n+\t\treturn true\n+\tcase *Vector:\n+\t\tif m < 0 || n < 0 {\n+\t\t\treturn false\n+\t\t}\n+\t\tif m != 1 && n != 1 {\n+\t\t\treturn false\n+\t\t}\n+\t\treturn true\n+\t}\n+}\n+\n+// returnAs returns the matrix a with the type of t. Used for making a concrete\n+// type and changing to the basicform\n+func returnAs(a, t Matrix) Matrix {\n+\tswitch mat := a.(type) {\n+\tdefault:\n+\t\tpanic(\"unknown type for a\")\n+\tcase *Dense:\n+\t\tswitch t.(type) {\n+\t\tdefault:\n+\t\t\tpanic(\"bad type\")\n+\t\tcase *Dense:\n+\t\t\treturn mat\n+\t\tcase *basicMatrix:\n+\t\t\treturn asBasicMatrix(mat)\n+\t\tcase *basicVectorer:\n+\t\t\treturn asBasicVectorer(mat)\n+\t\t}\n+\tcase *SymDense:\n+\t\tswitch t.(type) {\n+\t\tdefault:\n+\t\t\tpanic(\"bad type\")\n+\t\tcase *SymDense:\n+\t\t\treturn mat\n+\t\tcase *basicSymmetric:\n+\t\t\treturn asBasicSymmetric(mat)\n+\t\t}\n+\tcase *TriDense:\n+\t\tswitch t.(type) {\n+\t\tdefault:\n+\t\t\tpanic(\"bad type\")\n+\t\tcase *TriDense:\n+\t\t\treturn mat\n+\t\tcase *basicTriangular:\n+\t\t\treturn asBasicTriangular(mat)\n+\t\t}\n+\t}\n+}\n+\n+// makeRandOf returns a new random matrix of the underlying matrix type.\n+func makeRandOf(a Matrix, m, n int) Matrix {\n+\tvar matrix Matrix\n+\tswitch t := a.(type) {\n+\tdefault:\n+\t\tpanic(\"unknown type\")\n+\tcase *Dense, *basicMatrix, *basicVectorer:\n+\t\tmat := NewDense(m, n, nil)\n+\t\tfor i := 0; i < m; i++ {\n+\t\t\tfor j := 0; j < n; j++ {\n+\t\t\t\tmat.Set(i, j, rand.Float64())\n+\t\t\t}\n+\t\t}\n+\t\tmatrix = returnAs(mat, t)\n+\tcase *Vector:\n+\t\tif m != 1 && n != 1 {\n+\t\t\tpanic(\"bad size\")\n+\t\t}\n+\t\tlength := n\n+\t\tif n == 1 {\n+\t\t\tlength = m\n+\t\t}\n+\t\tmat := &Vector{\n+\t\t\tmat: blas64.Vector{\n+\t\t\t\tInc:  t.mat.Inc,\n+\t\t\t\tData: make([]float64, t.mat.Inc*length),\n+\t\t\t},\n+\t\t\tn: length,\n+\t\t}\n+\t\tfor i := 0; i < length; i++ {\n+\t\t\tmat.SetVec(i, rand.Float64())\n+\t\t}\n+\t\tif n == 1 {\n+\t\t\treturn mat\n+\t\t}\n+\t\tmatrix = Transpose{mat}\n+\tcase *SymDense, *basicSymmetric:\n+\t\tif m != n {\n+\t\t\tpanic(\"bad size\")\n+\t\t}\n+\t\tmat := NewSymDense(n, nil)\n+\t\tfor i := 0; i < m; i++ {\n+\t\t\tfor j := i; j < n; j++ {\n+\t\t\t\tmat.SetSym(i, j, rand.Float64())\n+\t\t\t}\n+\t\t}\n+\t\tmatrix = returnAs(mat, t)\n+\tcase *TriDense, *basicTriangular:\n+\t\tif m != n {\n+\t\t\tpanic(\"bad size\")\n+\t\t}\n+\t\t_, upper := t.(Triangular).Triangle()\n+\t\tmat := NewTriDense(n, upper, nil)\n+\t\tif upper {\n+\t\t\tfor i := 0; i < m; i++ {\n+\t\t\t\tfor j := i; j < n; j++ {\n+\t\t\t\t\tmat.SetTri(i, j, rand.Float64())\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\tfor i := 0; i < m; i++ {\n+\t\t\t\tfor j := 0; j <= i; j++ {\n+\t\t\t\t\tmat.SetTri(i, j, rand.Float64())\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\tmatrix = returnAs(mat, t)\n+\t}\n+\tif mr, mc := matrix.Dims(); mr != m || mc != n {\n+\t\tpanic(fmt.Sprintf(\"makeRandOf for %T returns wrong size: %d%d != %d%d\", a, m, n, mr, mc))\n+\t}\n+\treturn matrix\n+}\n+\n+// makeCopyOf makes a copy of the matrix.\n+func makeCopyOf(a Matrix) Matrix {\n+\tswitch t := a.(type) {\n+\tdefault:\n+\t\tpanic(\"unknown type in makeCopyOf\")\n+\tcase *Dense, *basicMatrix, *basicVectorer:\n+\t\tvar m Dense\n+\t\tm.Clone(a)\n+\t\treturn returnAs(&m, t)\n+\tcase *SymDense, *basicSymmetric:\n+\t\tn := t.(Symmetric).Symmetric()\n+\t\tm := NewSymDense(n, nil)\n+\t\tm.CopySym(t.(Symmetric))\n+\t\treturn returnAs(m, t)\n+\tcase *TriDense, *basicTriangular:\n+\t\tn, upper := t.(Triangular).Triangle()\n+\t\tm := NewTriDense(n, upper, nil)\n+\t\tif upper {\n+\t\t\tfor i := 0; i < n; i++ {\n+\t\t\t\tfor j := i; j < n; j++ {\n+\t\t\t\t\tm.SetTri(i, j, t.At(i, j))\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\tfor i := 0; i < n; i++ {\n+\t\t\t\tfor j := 0; j <= i; j++ {\n+\t\t\t\t\tm.SetTri(i, j, t.At(i, j))\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\treturn returnAs(m, t)\n+\tcase *Vector:\n+\t\tm := &Vector{\n+\t\t\tmat: blas64.Vector{\n+\t\t\t\tInc:  t.mat.Inc,\n+\t\t\t\tData: make([]float64, len(t.mat.Data)),\n+\t\t\t},\n+\t\t\tn: t.n,\n+\t\t}\n+\t\tcopy(m.mat.Data, t.mat.Data)\n+\t\treturn m\n+\tcase Transpose:\n+\t\tmatrix := t.Matrix\n+\t\tmat := matrix.(*Vector) // Should only be here for the vector type\n+\t\tm := &Vector{\n+\t\t\tmat: blas64.Vector{\n+\t\t\t\tInc:  mat.mat.Inc,\n+\t\t\t\tData: make([]float64, len(mat.mat.Data)),\n+\t\t\t},\n+\t\t\tn: mat.n,\n+\t\t}\n+\t\tcopy(m.mat.Data, mat.mat.Data)\n+\t\treturn Transpose{m}\n+\t}\n+}\n+\n+// makeTransposeCopyOf makes a transpose copy of the given matrix with the same\n+// underlying type.\n+func makeTransposeCopyOf(a Matrix) Matrix {\n+\tvar matrix Matrix\n+\tr, c := a.Dims()\n+\tswitch t := a.(type) {\n+\tdefault:\n+\t\tpanic(\"unknown type in make transpose of\")\n+\tcase *Dense, *basicMatrix, *basicVectorer:\n+\t\tm := NewDense(c, r, nil)\n+\t\tfor i := 0; i < r; i++ {\n+\t\t\tfor j := 0; j < c; j++ {\n+\t\t\t\tm.Set(j, i, a.At(i, j))\n+\t\t\t}\n+\t\t}\n+\t\tmatrix = returnAs(m, t)\n+\tcase *SymDense, *basicSymmetric:\n+\t\tmatrix = makeCopyOf(a)\n+\tcase *TriDense, *basicTriangular:\n+\t\tn, upper := t.(Triangular).Triangle()\n+\t\tmUpper := !upper\n+\t\tm := NewTriDense(n, mUpper, nil)\n+\t\tif mUpper {\n+\t\t\tfor i := 0; i < n; i++ {\n+\t\t\t\tfor j := i; j < n; j++ {\n+\t\t\t\t\tm.SetTri(i, j, t.At(j, i))\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\tfor i := 0; i < n; i++ {\n+\t\t\t\tfor j := 0; j <= i; j++ {\n+\t\t\t\t\tm.SetTri(i, j, t.At(j, i))\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\tmatrix = returnAs(m, t)\n+\tcase *Vector:\n+\t\tm := makeCopyOf(a)\n+\t\tmatrix = Transpose{m}\n+\tcase Transpose:\n+\t\tv := t.Matrix.(*Vector)\n+\t\tm := makeCopyOf(v)\n+\t\tmatrix = m\n+\t}\n+\tif mr, mc := matrix.Dims(); mr != c || mc != r {\n+\t\tpanic(fmt.Sprintf(\"makeTransposeOf for %T returns wrong size: %d%d != %d%d\", a, c, r, mr, mc))\n+\t}\n+\treturn matrix\n+}\n+\n+// sameType returns true if a and b have the same underlying type.\n+func sameType(a, b Matrix) bool {\n+\tif reflect.ValueOf(a).Type() == reflect.ValueOf(b).Type() {\n+\t\treturn true\n+\t}\n+\treturn false\n+}\n+\n+// canShadow returns true if the two matrices could be represented by the same\n+// pointer.\n+func canShadow(receiver, a Matrix, trans bool) bool {\n+\trr, rc := receiver.Dims()\n+\tar, ac := a.Dims()\n+\tif !sameType(receiver, a) {\n+\t\treturn false\n+\t}\n+\tif !trans {\n+\t\tif rr == ar && rc == ac {\n+\t\t\treturn true\n+\t\t}\n+\t\treturn false\n+\t}\n+\tif rr == ac && rc == ar {\n+\t\treturn true\n+\t}\n+\treturn false\n+}\n+\n+// equalApprox returns whether the elements of a and b are the same to within\n+// the tolerance.\n+func equalApprox(a, b Matrix, tol float64) bool {\n+\tar, ac := a.Dims()\n+\tbr, bc := b.Dims()\n+\tif ar != br {\n+\t\treturn false\n+\t}\n+\tif ac != bc {\n+\t\treturn false\n+\t}\n+\tfor i := 0; i < ar; i++ {\n+\t\tfor j := 0; j < ac; j++ {\n+\t\t\tif !floats.EqualWithinAbsOrRel(a.At(i, j), b.At(i, j), tol, tol) {\n+\t\t\t\treturn false\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn true\n+}\n+\n+// equal returns true if the matrices have equal entries.\n+func equal(a, b Matrix) bool {\n+\tar, ac := a.Dims()\n+\tbr, bc := b.Dims()\n+\tif ar != br {\n+\t\treturn false\n+\t}\n+\tif ac != bc {\n+\t\treturn false\n+\t}\n+\tfor i := 0; i < ar; i++ {\n+\t\tfor j := 0; j < ac; j++ {\n+\t\t\tif a.At(i, j) != b.At(i, j) {\n+\t\t\t\treturn false\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn true\n+}\n+\n+// testTwoInput tests a method that has two input arguments.\n+func testTwoInput(c *check.C,\n+\t// name is the name of the method being tested.\n+\tname string,\n+\n+\t// receiver is a value of the receiver type.\n+\treceiver Matrix,\n+\n+\t// method is the generalized receiver.Method(a, b).\n+\tmethod func(receiver, a, b Matrix),\n+\n+\t// denseComparison performs the same operation as method, but with dense\n+\t// matrices for comparison with the result.\n+\tdenseComparison func(receiver, a, b *Dense),\n+\n+\t// legalTypes returns whether the concrete types in Matrix are valid for\n+\t// the method.\n+\tlegalTypes func(a, b Matrix) bool,\n+\n+\t// dimsOK returns whether the matrix sizes are valid for the method.\n+\tdimsOK func(ar, ac, br, bc int) bool,\n+) {\n+\tstrideVec := &Vector{\n+\t\tmat: blas64.Vector{\n+\t\t\tInc: 10,\n+\t\t},\n+\t}\n+\t// Loop over all of the matrix types.\n+\ttypes := []Matrix{\n+\t\t&Dense{},\n+\t\t&SymDense{},\n+\t\tNewTriDense(0, true, nil),\n+\t\tNewTriDense(0, false, nil),\n+\t\tNewVector(0, nil),\n+\t\tstrideVec,\n+\t\t&basicMatrix{},\n+\t\t&basicVectorer{},\n+\t\t&basicSymmetric{},\n+\t\t&basicTriangular{},\n+\t}\n+\n+\tfor _, aMat := range types {\n+\t\tfor _, bMat := range types {\n+\t\t\t// Loop over all of the size combinations (bigger, smaller, etc.).\n+\t\t\tfor _, test := range []struct {\n+\t\t\t\tar, ac, br, bc int\n+\t\t\t}{\n+\n+\t\t\t\t{1, 1, 1, 1},\n+\t\t\t\t{6, 6, 6, 6},\n+\t\t\t\t{7, 7, 7, 7},\n+\n+\t\t\t\t{1, 1, 1, 5},\n+\t\t\t\t{1, 1, 5, 1},\n+\t\t\t\t{1, 5, 1, 1},\n+\t\t\t\t{5, 1, 1, 1},\n+\t\t\t\t{6, 6, 6, 11},\n+\t\t\t\t{6, 6, 11, 6},\n+\t\t\t\t{6, 11, 6, 6},\n+\t\t\t\t{11, 6, 6, 6},\n+\t\t\t\t{11, 11, 11, 6},\n+\t\t\t\t{11, 11, 6, 11},\n+\t\t\t\t{11, 6, 11, 11},\n+\t\t\t\t{6, 11, 11, 11},\n+\n+\t\t\t\t{1, 1, 5, 5},\n+\t\t\t\t{1, 5, 1, 5},\n+\t\t\t\t{1, 5, 5, 1},\n+\t\t\t\t{5, 1, 1, 5},\n+\t\t\t\t{5, 1, 5, 1},\n+\t\t\t\t{5, 5, 1, 1},\n+\t\t\t\t{6, 6, 11, 11},\n+\t\t\t\t{6, 11, 6, 11},\n+\t\t\t\t{6, 11, 11, 6},\n+\t\t\t\t{11, 6, 6, 11},\n+\t\t\t\t{11, 6, 11, 6},\n+\t\t\t\t{11, 11, 6, 6},\n+\n+\t\t\t\t{1, 1, 17, 11},\n+\t\t\t\t{1, 1, 11, 17},\n+\t\t\t\t{1, 11, 1, 17},\n+\t\t\t\t{1, 17, 1, 11},\n+\t\t\t\t{1, 11, 17, 1},\n+\t\t\t\t{1, 17, 11, 1},\n+\t\t\t\t{11, 1, 1, 17},\n+\t\t\t\t{17, 1, 1, 11},\n+\t\t\t\t{11, 1, 17, 1},\n+\t\t\t\t{17, 1, 11, 1},\n+\t\t\t\t{11, 17, 1, 1},\n+\t\t\t\t{17, 11, 1, 1},\n+\n+\t\t\t\t{6, 6, 1, 11},\n+\t\t\t\t{6, 6, 11, 1},\n+\t\t\t\t{6, 11, 6, 1},\n+\t\t\t\t{6, 1, 6, 11},\n+\t\t\t\t{6, 11, 1, 6},\n+\t\t\t\t{6, 1, 11, 6},\n+\t\t\t\t{11, 6, 6, 1},\n+\t\t\t\t{1, 6, 6, 11},\n+\t\t\t\t{11, 6, 1, 6},\n+\t\t\t\t{1, 6, 11, 6},\n+\t\t\t\t{11, 1, 6, 6},\n+\t\t\t\t{1, 11, 6, 6},\n+\n+\t\t\t\t{6, 6, 17, 1},\n+\t\t\t\t{6, 6, 1, 17},\n+\t\t\t\t{6, 1, 6, 17},\n+\t\t\t\t{6, 17, 6, 1},\n+\t\t\t\t{6, 1, 17, 6},\n+\t\t\t\t{6, 17, 1, 6},\n+\t\t\t\t{1, 6, 6, 17},\n+\t\t\t\t{17, 6, 6, 1},\n+\t\t\t\t{1, 6, 17, 6},\n+\t\t\t\t{17, 6, 1, 6},\n+\t\t\t\t{1, 17, 6, 6},\n+\t\t\t\t{17, 1, 6, 6},\n+\n+\t\t\t\t{6, 6, 17, 11},\n+\t\t\t\t{6, 6, 11, 17},\n+\t\t\t\t{6, 11, 6, 17},\n+\t\t\t\t{6, 17, 6, 11},\n+\t\t\t\t{6, 11, 17, 6},\n+\t\t\t\t{6, 17, 11, 6},\n+\t\t\t\t{11, 6, 6, 17},\n+\t\t\t\t{17, 6, 6, 11},\n+\t\t\t\t{11, 6, 17, 6},\n+\t\t\t\t{17, 6, 11, 6},\n+\t\t\t\t{11, 17, 6, 6},\n+\t\t\t\t{17, 11, 6, 6},\n+\t\t\t} {\n+\t\t\t\t// Skip the test if the arguments are compile-time provably incorrect\n+\t\t\t\t// This is either because the matrix types are wrong at compile time\n+\t\t\t\t// or because the sizes are impossible.\n+\t\t\t\tif !legalTypes(aMat, bMat) {\n+\t\t\t\t\tcontinue\n+\t\t\t\t}\n+\t\t\t\tif !legalDims(aMat, test.ar, test.ac) {\n+\t\t\t\t\tcontinue\n+\t\t\t\t}\n+\t\t\t\tif !legalDims(bMat, test.br, test.bc) {\n+\t\t\t\t\tcontinue\n+\t\t\t\t}\n+\t\t\t\ta := makeRandOf(aMat, test.ar, test.ac)\n+\t\t\t\tb := makeRandOf(bMat, test.br, test.bc)\n+\n+\t\t\t\t// Compute the true answer if the sizes are legal.\n+\t\t\t\tlegal := dimsOK(test.ar, test.ac, test.br, test.bc)","path":"mat64/list_test.go","position":517,"original_position":517,"commit_id":"58bd2a243c2e6655346fc9c1d7ae62d567cfca2e","original_commit_id":"58bd2a243c2e6655346fc9c1d7ae62d567cfca2e","user":{"login":"btracey","id":3680859,"avatar_url":"https://avatars.githubusercontent.com/u/3680859?v=3","gravatar_id":"","url":"https://api.github.com/users/btracey","html_url":"https://github.com/btracey","followers_url":"https://api.github.com/users/btracey/followers","following_url":"https://api.github.com/users/btracey/following{/other_user}","gists_url":"https://api.github.com/users/btracey/gists{/gist_id}","starred_url":"https://api.github.com/users/btracey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/btracey/subscriptions","organizations_url":"https://api.github.com/users/btracey/orgs","repos_url":"https://api.github.com/users/btracey/repos","events_url":"https://api.github.com/users/btracey/events{/privacy}","received_events_url":"https://api.github.com/users/btracey/received_events","type":"User","site_admin":false},"body":"Got it. Reverted.","created_at":"2015-07-26T02:32:35Z","updated_at":"2015-07-26T02:32:35Z","html_url":"https://github.com/gonum/matrix/pull/157#discussion_r35488680","pull_request_url":"https://api.github.com/repos/gonum/matrix/pulls/157","_links":{"self":{"href":"https://api.github.com/repos/gonum/matrix/pulls/comments/35488680"},"html":{"href":"https://github.com/gonum/matrix/pull/157#discussion_r35488680"},"pull_request":{"href":"https://api.github.com/repos/gonum/matrix/pulls/157"}}},"pull_request":{"url":"https://api.github.com/repos/gonum/matrix/pulls/157","id":40219595,"html_url":"https://github.com/gonum/matrix/pull/157","diff_url":"https://github.com/gonum/matrix/pull/157.diff","patch_url":"https://github.com/gonum/matrix/pull/157.patch","issue_url":"https://api.github.com/repos/gonum/matrix/issues/157","number":157,"state":"open","locked":false,"title":"Fixtestadd","user":{"login":"btracey","id":3680859,"avatar_url":"https://avatars.githubusercontent.com/u/3680859?v=3","gravatar_id":"","url":"https://api.github.com/users/btracey","html_url":"https://github.com/btracey","followers_url":"https://api.github.com/users/btracey/followers","following_url":"https://api.github.com/users/btracey/following{/other_user}","gists_url":"https://api.github.com/users/btracey/gists{/gist_id}","starred_url":"https://api.github.com/users/btracey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/btracey/subscriptions","organizations_url":"https://api.github.com/users/btracey/orgs","repos_url":"https://api.github.com/users/btracey/repos","events_url":"https://api.github.com/users/btracey/events{/privacy}","received_events_url":"https://api.github.com/users/btracey/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-07-17T10:42:17Z","updated_at":"2015-07-26T02:32:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7a5730756781baeec5617c4a11db48f68a4ff35e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/gonum/matrix/pulls/157/commits","review_comments_url":"https://api.github.com/repos/gonum/matrix/pulls/157/comments","review_comment_url":"https://api.github.com/repos/gonum/matrix/pulls/comments{/number}","comments_url":"https://api.github.com/repos/gonum/matrix/issues/157/comments","statuses_url":"https://api.github.com/repos/gonum/matrix/statuses/58bd2a243c2e6655346fc9c1d7ae62d567cfca2e","head":{"label":"gonum:fixtestadd","ref":"fixtestadd","sha":"58bd2a243c2e6655346fc9c1d7ae62d567cfca2e","user":{"login":"gonum","id":3771091,"avatar_url":"https://avatars.githubusercontent.com/u/3771091?v=3","gravatar_id":"","url":"https://api.github.com/users/gonum","html_url":"https://github.com/gonum","followers_url":"https://api.github.com/users/gonum/followers","following_url":"https://api.github.com/users/gonum/following{/other_user}","gists_url":"https://api.github.com/users/gonum/gists{/gist_id}","starred_url":"https://api.github.com/users/gonum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gonum/subscriptions","organizations_url":"https://api.github.com/users/gonum/orgs","repos_url":"https://api.github.com/users/gonum/repos","events_url":"https://api.github.com/users/gonum/events{/privacy}","received_events_url":"https://api.github.com/users/gonum/received_events","type":"Organization","site_admin":false},"repo":{"id":8569918,"name":"matrix","full_name":"gonum/matrix","owner":{"login":"gonum","id":3771091,"avatar_url":"https://avatars.githubusercontent.com/u/3771091?v=3","gravatar_id":"","url":"https://api.github.com/users/gonum","html_url":"https://github.com/gonum","followers_url":"https://api.github.com/users/gonum/followers","following_url":"https://api.github.com/users/gonum/following{/other_user}","gists_url":"https://api.github.com/users/gonum/gists{/gist_id}","starred_url":"https://api.github.com/users/gonum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gonum/subscriptions","organizations_url":"https://api.github.com/users/gonum/orgs","repos_url":"https://api.github.com/users/gonum/repos","events_url":"https://api.github.com/users/gonum/events{/privacy}","received_events_url":"https://api.github.com/users/gonum/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/gonum/matrix","description":"Matrix packages for the Go language.","fork":false,"url":"https://api.github.com/repos/gonum/matrix","forks_url":"https://api.github.com/repos/gonum/matrix/forks","keys_url":"https://api.github.com/repos/gonum/matrix/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gonum/matrix/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gonum/matrix/teams","hooks_url":"https://api.github.com/repos/gonum/matrix/hooks","issue_events_url":"https://api.github.com/repos/gonum/matrix/issues/events{/number}","events_url":"https://api.github.com/repos/gonum/matrix/events","assignees_url":"https://api.github.com/repos/gonum/matrix/assignees{/user}","branches_url":"https://api.github.com/repos/gonum/matrix/branches{/branch}","tags_url":"https://api.github.com/repos/gonum/matrix/tags","blobs_url":"https://api.github.com/repos/gonum/matrix/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gonum/matrix/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gonum/matrix/git/refs{/sha}","trees_url":"https://api.github.com/repos/gonum/matrix/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gonum/matrix/statuses/{sha}","languages_url":"https://api.github.com/repos/gonum/matrix/languages","stargazers_url":"https://api.github.com/repos/gonum/matrix/stargazers","contributors_url":"https://api.github.com/repos/gonum/matrix/contributors","subscribers_url":"https://api.github.com/repos/gonum/matrix/subscribers","subscription_url":"https://api.github.com/repos/gonum/matrix/subscription","commits_url":"https://api.github.com/repos/gonum/matrix/commits{/sha}","git_commits_url":"https://api.github.com/repos/gonum/matrix/git/commits{/sha}","comments_url":"https://api.github.com/repos/gonum/matrix/comments{/number}","issue_comment_url":"https://api.github.com/repos/gonum/matrix/issues/comments{/number}","contents_url":"https://api.github.com/repos/gonum/matrix/contents/{+path}","compare_url":"https://api.github.com/repos/gonum/matrix/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gonum/matrix/merges","archive_url":"https://api.github.com/repos/gonum/matrix/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gonum/matrix/downloads","issues_url":"https://api.github.com/repos/gonum/matrix/issues{/number}","pulls_url":"https://api.github.com/repos/gonum/matrix/pulls{/number}","milestones_url":"https://api.github.com/repos/gonum/matrix/milestones{/number}","notifications_url":"https://api.github.com/repos/gonum/matrix/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gonum/matrix/labels{/name}","releases_url":"https://api.github.com/repos/gonum/matrix/releases{/id}","created_at":"2013-03-05T01:59:12Z","updated_at":"2015-07-03T19:17:43Z","pushed_at":"2015-07-25T16:52:32Z","git_url":"git://github.com/gonum/matrix.git","ssh_url":"git@github.com:gonum/matrix.git","clone_url":"https://github.com/gonum/matrix.git","svn_url":"https://github.com/gonum/matrix","homepage":"","size":2180,"stargazers_count":127,"watchers_count":127,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":20,"forks":20,"open_issues":20,"watchers":127,"default_branch":"master"}},"base":{"label":"gonum:master","ref":"master","sha":"50ccfc94c575d789a328ecd1d9dd60714572ddf2","user":{"login":"gonum","id":3771091,"avatar_url":"https://avatars.githubusercontent.com/u/3771091?v=3","gravatar_id":"","url":"https://api.github.com/users/gonum","html_url":"https://github.com/gonum","followers_url":"https://api.github.com/users/gonum/followers","following_url":"https://api.github.com/users/gonum/following{/other_user}","gists_url":"https://api.github.com/users/gonum/gists{/gist_id}","starred_url":"https://api.github.com/users/gonum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gonum/subscriptions","organizations_url":"https://api.github.com/users/gonum/orgs","repos_url":"https://api.github.com/users/gonum/repos","events_url":"https://api.github.com/users/gonum/events{/privacy}","received_events_url":"https://api.github.com/users/gonum/received_events","type":"Organization","site_admin":false},"repo":{"id":8569918,"name":"matrix","full_name":"gonum/matrix","owner":{"login":"gonum","id":3771091,"avatar_url":"https://avatars.githubusercontent.com/u/3771091?v=3","gravatar_id":"","url":"https://api.github.com/users/gonum","html_url":"https://github.com/gonum","followers_url":"https://api.github.com/users/gonum/followers","following_url":"https://api.github.com/users/gonum/following{/other_user}","gists_url":"https://api.github.com/users/gonum/gists{/gist_id}","starred_url":"https://api.github.com/users/gonum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gonum/subscriptions","organizations_url":"https://api.github.com/users/gonum/orgs","repos_url":"https://api.github.com/users/gonum/repos","events_url":"https://api.github.com/users/gonum/events{/privacy}","received_events_url":"https://api.github.com/users/gonum/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/gonum/matrix","description":"Matrix packages for the Go language.","fork":false,"url":"https://api.github.com/repos/gonum/matrix","forks_url":"https://api.github.com/repos/gonum/matrix/forks","keys_url":"https://api.github.com/repos/gonum/matrix/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gonum/matrix/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gonum/matrix/teams","hooks_url":"https://api.github.com/repos/gonum/matrix/hooks","issue_events_url":"https://api.github.com/repos/gonum/matrix/issues/events{/number}","events_url":"https://api.github.com/repos/gonum/matrix/events","assignees_url":"https://api.github.com/repos/gonum/matrix/assignees{/user}","branches_url":"https://api.github.com/repos/gonum/matrix/branches{/branch}","tags_url":"https://api.github.com/repos/gonum/matrix/tags","blobs_url":"https://api.github.com/repos/gonum/matrix/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gonum/matrix/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gonum/matrix/git/refs{/sha}","trees_url":"https://api.github.com/repos/gonum/matrix/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gonum/matrix/statuses/{sha}","languages_url":"https://api.github.com/repos/gonum/matrix/languages","stargazers_url":"https://api.github.com/repos/gonum/matrix/stargazers","contributors_url":"https://api.github.com/repos/gonum/matrix/contributors","subscribers_url":"https://api.github.com/repos/gonum/matrix/subscribers","subscription_url":"https://api.github.com/repos/gonum/matrix/subscription","commits_url":"https://api.github.com/repos/gonum/matrix/commits{/sha}","git_commits_url":"https://api.github.com/repos/gonum/matrix/git/commits{/sha}","comments_url":"https://api.github.com/repos/gonum/matrix/comments{/number}","issue_comment_url":"https://api.github.com/repos/gonum/matrix/issues/comments{/number}","contents_url":"https://api.github.com/repos/gonum/matrix/contents/{+path}","compare_url":"https://api.github.com/repos/gonum/matrix/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gonum/matrix/merges","archive_url":"https://api.github.com/repos/gonum/matrix/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gonum/matrix/downloads","issues_url":"https://api.github.com/repos/gonum/matrix/issues{/number}","pulls_url":"https://api.github.com/repos/gonum/matrix/pulls{/number}","milestones_url":"https://api.github.com/repos/gonum/matrix/milestones{/number}","notifications_url":"https://api.github.com/repos/gonum/matrix/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gonum/matrix/labels{/name}","releases_url":"https://api.github.com/repos/gonum/matrix/releases{/id}","created_at":"2013-03-05T01:59:12Z","updated_at":"2015-07-03T19:17:43Z","pushed_at":"2015-07-25T16:52:32Z","git_url":"git://github.com/gonum/matrix.git","ssh_url":"git@github.com:gonum/matrix.git","clone_url":"https://github.com/gonum/matrix.git","svn_url":"https://github.com/gonum/matrix","homepage":"","size":2180,"stargazers_count":127,"watchers_count":127,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":20,"forks":20,"open_issues":20,"watchers":127,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/gonum/matrix/pulls/157"},"html":{"href":"https://github.com/gonum/matrix/pull/157"},"issue":{"href":"https://api.github.com/repos/gonum/matrix/issues/157"},"comments":{"href":"https://api.github.com/repos/gonum/matrix/issues/157/comments"},"review_comments":{"href":"https://api.github.com/repos/gonum/matrix/pulls/157/comments"},"review_comment":{"href":"https://api.github.com/repos/gonum/matrix/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/gonum/matrix/pulls/157/commits"},"statuses":{"href":"https://api.github.com/repos/gonum/matrix/statuses/58bd2a243c2e6655346fc9c1d7ae62d567cfca2e"}}}}