all: fix build and make tests pass with new streams

This commit is contained in:
kortschak
2017-11-17 12:38:53 +10:30
parent fa0c5aa7bc
commit 54a5f6f081
16 changed files with 59 additions and 55 deletions

View File

@@ -65,7 +65,7 @@ func TestGradient(t *testing.T) {
},
{
nDim: 40,
tol: 1e-6,
tol: 1e-5,
formula: Central,
},
} {

View File

@@ -112,8 +112,8 @@ func ExampleProfile_multiplex() {
// Output:
// Low:0.1 High:0.72 Score:26 Communities:[[0] [1 7 9 12] [2 8 11] [3 4 5 10] [6]] Q=[24.7 1.97]
// Low:0.72 High:1.1 Score:24 Communities:[[0 6] [1 7 9 12] [2 8 11] [3 4 5 10]] Q=[16.9 14.1]
// Low:1.1 High:1.1 Score:18 Communities:[[0 2 6 11] [1 7 9 12] [3 4 5 8 10]] Q=[9.16 25.1]
// Low:1.1 High:1.6 Score:10 Communities:[[0 3 4 5 6 10] [1 7 9 12] [2 8 11]] Q=[11.5 23.9]
// Low:1.1 High:1.2 Score:18 Communities:[[0 2 6 11] [1 7 9 12] [3 4 5 8 10]] Q=[9.16 25.1]
// Low:1.2 High:1.6 Score:10 Communities:[[0 3 4 5 6 10] [1 7 9 12] [2 8 11]] Q=[10.5 26.5]
// Low:1.6 High:1.6 Score:8 Communities:[[0 1 6 7 9 12] [2 8 11] [3 4 5 10]] Q=[5.56 39.8]
// Low:1.6 High:1.8 Score:2 Communities:[[0 2 3 4 5 6 10] [1 7 8 9 11 12]] Q=[-1.82 48.6]
// Low:1.8 High:2.3 Score:-6 Communities:[[0 2 3 4 5 6 8 10 11] [1 7 9 12]] Q=[-5 57.5]

View File

@@ -167,12 +167,11 @@ var communityDirectedQTests = []communityDirectedQTest{
},
},
{
q: 0.32525510204081637,
q: 0.36862244897959184,
communities: [][]graph.Node{
{simple.Node(0), simple.Node(3), simple.Node(5), simple.Node(7)},
{simple.Node(1), simple.Node(2), simple.Node(4), simple.Node(6)},
{simple.Node(8), simple.Node(10), simple.Node(11), simple.Node(13), simple.Node(15)},
{simple.Node(9), simple.Node(12), simple.Node(14)},
{simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(4), simple.Node(5)},
{simple.Node(3), simple.Node(6), simple.Node(7)},
{simple.Node(8), simple.Node(9), simple.Node(10), simple.Node(11), simple.Node(12), simple.Node(13), simple.Node(14), simple.Node(15)},
},
},
{

View File

@@ -153,13 +153,16 @@ var communityUndirectedQTests = []communityUndirectedQTest{
},
},
{
q: 0.39907955292570674,
q: 0.3496877054569362,
communities: [][]graph.Node{
{simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3), simple.Node(7), simple.Node(11), simple.Node(12), simple.Node(13), simple.Node(17), simple.Node(19), simple.Node(21)},
{simple.Node(4), simple.Node(10)},
{simple.Node(5), simple.Node(6), simple.Node(16)},
{simple.Node(8), simple.Node(9), simple.Node(14), simple.Node(15), simple.Node(18), simple.Node(20), simple.Node(22), simple.Node(26), simple.Node(29), simple.Node(30), simple.Node(32), simple.Node(33)},
{simple.Node(23), simple.Node(24), simple.Node(25), simple.Node(27), simple.Node(28), simple.Node(31)},
{simple.Node(8), simple.Node(9), simple.Node(14), simple.Node(15), simple.Node(18), simple.Node(20), simple.Node(22), simple.Node(30), simple.Node(32), simple.Node(33)},
{simple.Node(23), simple.Node(25)},
{simple.Node(24), simple.Node(27)},
{simple.Node(26), simple.Node(29)},
{simple.Node(28), simple.Node(31)},
},
},
{
@@ -226,7 +229,7 @@ var communityUndirectedQTests = []communityUndirectedQTest{
},
},
{
q: 0.34630102040816324,
q: 0.3463010204081633,
communities: [][]graph.Node{
{simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(4), simple.Node(5)},
{simple.Node(3), simple.Node(6), simple.Node(7)},

View File

@@ -533,7 +533,7 @@ func DgeevTest(t *testing.T, impl Dgeever) {
a: a,
evWant: ev,
valTol: 1e-12,
vecTol: 1e-8,
vecTol: 1e-7,
}
testDgeev(t, impl, "random", test, jobvl, jobvr, 0, optimumWork)
}
@@ -543,7 +543,7 @@ func DgeevTest(t *testing.T, impl Dgeever) {
}
func testDgeev(t *testing.T, impl Dgeever, tc string, test dgeevTest, jobvl lapack.LeftEVJob, jobvr lapack.RightEVJob, extra int, wl worklen) {
const defaultTol = 1e-13
const defaultTol = 1e-12
valTol := test.valTol
if valTol == 0 {
valTol = defaultTol

View File

@@ -39,7 +39,7 @@ func Dlasy2Test(t *testing.T, impl Dlasy2er) {
}
func testDlasy2(t *testing.T, impl Dlasy2er, tranl, tranr bool, isgn, n1, n2, extra int, rnd *rand.Rand) {
const tol = 1e-11
const tol = 1e-10
tl := randomGeneral(n1, n1, n1+extra, rnd)
tr := randomGeneral(n2, n2, n2+extra, rnd)

View File

@@ -96,7 +96,7 @@ func TestWishartRand(t *testing.T) {
v: mat.NewSymDense(3, []float64{0.8, 0.3, 0.1, 0.3, 0.7, -0.1, 0.1, -0.1, 7}),
nu: 5,
samples: 30000,
tol: 3e-2,
tol: 3e-1,
},
{
v: mat.NewSymDense(4, []float64{

View File

@@ -27,7 +27,7 @@ func TestBhattacharyyaNormal(t *testing.T) {
bm: []float64{-1, 1},
bc: mat.NewSymDense(2, []float64{1.5, 0.2, 0.2, 0.9}),
samples: 100000,
tol: 1e-2,
tol: 3e-1,
},
} {
rnd := rand.New(rand.NewSource(1))
@@ -41,7 +41,7 @@ func TestBhattacharyyaNormal(t *testing.T) {
}
want := bhattacharyyaSample(a.Dim(), test.samples, a, b)
got := Bhattacharyya{}.DistNormal(a, b)
if math.Abs(want-got) > test.tol {
if !floats.EqualWithinAbsOrRel(want, got, test.tol, test.tol) {
t.Errorf("Bhattacharyya mismatch, case %d: got %v, want %v", cas, got, want)
}
@@ -76,7 +76,7 @@ func TestBhattacharyyaUniform(t *testing.T) {
a, b := test.a, test.b
want := bhattacharyyaSample(a.Dim(), test.samples, a, b)
got := Bhattacharyya{}.DistUniform(a, b)
if math.Abs(want-got) > test.tol {
if !floats.EqualWithinAbsOrRel(want, got, test.tol, test.tol) {
t.Errorf("Bhattacharyya mismatch, case %d: got %v, want %v", cas, got, want)
}
// Bhattacharyya should by symmetric
@@ -136,7 +136,7 @@ func TestCrossEntropyNormal(t *testing.T) {
}
ce /= float64(test.samples)
got := CrossEntropy{}.DistNormal(a, b)
if math.Abs(ce-got) > test.tol {
if !floats.EqualWithinAbsOrRel(ce, got, test.tol, test.tol) {
t.Errorf("CrossEntropy mismatch, case %d: got %v, want %v", cas, got, ce)
}
}
@@ -180,7 +180,7 @@ func TestHellingerNormal(t *testing.T) {
}
want := math.Sqrt(0.5 * math.Exp(floats.LogSumExp(lAitchEDoubleHockeySticks)-math.Log(float64(test.samples))))
got := Hellinger{}.DistNormal(a, b)
if math.Abs(want-got) > test.tol {
if !floats.EqualWithinAbsOrRel(want, got, test.tol, test.tol) {
t.Errorf("Hellinger mismatch, case %d: got %v, want %v", cas, got, want)
}
}
@@ -242,7 +242,7 @@ func TestKullbackLeiblerUniform(t *testing.T) {
a, b := test.a, test.b
want := klSample(a.Dim(), test.samples, a, b)
got := KullbackLeibler{}.DistUniform(a, b)
if math.Abs(want-got) > test.tol {
if !floats.EqualWithinAbsOrRel(want, got, test.tol, test.tol) {
t.Errorf("Kullback-Leibler mismatch, case %d: got %v, want %v", cas, got, want)
}
}
@@ -276,7 +276,7 @@ func TestRenyiNormal(t *testing.T) {
bc: mat.NewSymDense(2, []float64{1.5, 0.2, 0.2, 0.9}),
alpha: 0.3,
samples: 10000,
tol: 1e-2,
tol: 3e-1,
},
} {
rnd := rand.New(rand.NewSource(1))
@@ -297,19 +297,19 @@ func TestRenyiNormal(t *testing.T) {
// Compare with Bhattacharyya.
want = 2 * Bhattacharyya{}.DistNormal(a, b)
got = Renyi{Alpha: 0.5}.DistNormal(a, b)
if math.Abs(want-got) > 1e-10 {
if !floats.EqualWithinAbsOrRel(want, got, 1e-10, 1e-10) {
t.Errorf("Case %d: Renyi mismatch with Bhattacharyya: got %v, want %v", cas, got, want)
}
// Compare with KL in both directions.
want = KullbackLeibler{}.DistNormal(a, b)
got = Renyi{Alpha: 0.9999999}.DistNormal(a, b) // very close to 1 but not equal to 1.
if math.Abs(want-got) > 1e-6 {
if !floats.EqualWithinAbsOrRel(want, got, 1e-6, 1e-6) {
t.Errorf("Case %d: Renyi mismatch with KL(a||b): got %v, want %v", cas, got, want)
}
want = KullbackLeibler{}.DistNormal(b, a)
got = Renyi{Alpha: 0.9999999}.DistNormal(b, a) // very close to 1 but not equal to 1.
if math.Abs(want-got) > 1e-6 {
if !floats.EqualWithinAbsOrRel(want, got, 1e-6, 1e-6) {
t.Errorf("Case %d: Renyi mismatch with KL(b||a): got %v, want %v", cas, got, want)
}
}

View File

@@ -64,7 +64,7 @@ func TestChiSquared(t *testing.T) {
func testChiSquared(t *testing.T, c ChiSquared, i int) {
tol := 1e-2
const n = 1e5
const n = 1e6
const bins = 50
x := make([]float64, n)
generateSamples(x, c)

View File

@@ -73,7 +73,7 @@ func TestF(t *testing.T) {
func testF(t *testing.T, f F, i int) {
const (
tol = 1e-2
n = 1e5
n = 1e6
bins = 50
)
x := make([]float64, n)

View File

@@ -54,7 +54,7 @@ func TestTriangle(t *testing.T) {
f := NewTriangle(test.a, test.b, test.c)
f.Source = src
tol := 1e-2
const n = 1e5
const n = 1e6
x := make([]float64, n)
generateSamples(x, f)
sort.Float64s(x)

View File

@@ -94,15 +94,15 @@ func TestRejection(t *testing.T) {
dim := 3
bounds := make([]distmv.Bound, dim)
for i := 0; i < dim; i++ {
min := rand.NormFloat64()
max := rand.NormFloat64()
min := src.NormFloat64()
max := src.NormFloat64()
if min > max {
min, max = max, min
}
bounds[i].Min = min
bounds[i].Max = max
}
target := distmv.NewUniform(bounds, nil)
target := distmv.NewUniform(bounds, src)
mu := target.Mean(nil)
muImp := make([]float64, dim)

View File

@@ -206,7 +206,7 @@ func (r *Rejectioner) Sample(batch *mat.Dense) {
// numbers, otherwise rand.Float64 will be used.
//
// Rejection sampling generates points from the target distribution by using
// the proposal distribution. At each step of the algorithm, the proposaed point
// the proposal distribution. At each step of the algorithm, the proposed point
// is accepted with probability
// p = target(x) / (proposal(x) * c)
// where target(x) is the probability of the point according to the target distribution

View File

@@ -5,14 +5,16 @@
package sampleuv
import (
"math"
"sort"
"testing"
"gonum.org/v1/gonum/floats"
"gonum.org/v1/gonum/stat"
"gonum.org/v1/gonum/stat/distuv"
)
const tol = 1e-2
type lhDist interface {
Quantile(float64) float64
CDF(float64) float64
@@ -48,7 +50,7 @@ func TestImportance(t *testing.T) {
weights := make([]float64, nSamples)
Importance(x, weights, target, proposal)
ev := stat.Mean(x, weights)
if math.Abs(ev-trueMean) > 1e-2 {
if !floats.EqualWithinAbsOrRel(ev, trueMean, tol, tol) {
t.Errorf("Mean mismatch: Want %v, got %v", trueMean, ev)
}
}
@@ -63,7 +65,7 @@ func TestRejection(t *testing.T) {
x := make([]float64, nSamples)
Rejection(x, target, proposal, 100, nil)
ev := stat.Mean(x, nil)
if math.Abs(ev-trueMean) > 2e-2 {
if !floats.EqualWithinAbsOrRel(ev, trueMean, tol, tol) {
t.Errorf("Mean mismatch: Want %v, got %v", trueMean, ev)
}
}
@@ -93,7 +95,7 @@ func TestMetropolisHastings(t *testing.T) {
// Remove burnin
x = x[burnin:]
ev := stat.Mean(x, nil)
if math.Abs(ev-trueMean) > 1e-2 {
if !floats.EqualWithinAbsOrRel(ev, trueMean, tol, tol) {
t.Errorf("Mean mismatch: Want %v, got %v", trueMean, ev)
}
}

View File

@@ -25,7 +25,7 @@ var (
}
exp = newExp()
obt = []float64{973, 1937, 3898, 7897, 15769, 31284, 62176, 125408, 250295, 500363}
obt = []float64{1020, 1909, 3937, 7881, 15687, 31486, 62310, 124632, 250453, 500685}
)
func newTestWeighted() Weighted {
@@ -92,7 +92,7 @@ func TestWeightedTimeSeeded(t *testing.T) {
}
t.Log("Note: This test is stochastic and is expected to fail with probability ≈ 0.05.")
rand.Seed(time.Now().Unix())
rand.Seed(uint64(time.Now().Unix()))
f := make([]float64, len(obt))
for i := 0; i < 1e6; i++ {

View File

@@ -72,8 +72,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacency,
wantMoranI: -0.0019631298955953233,
wantZ: -0.03039477405151108,
wantMoranI: -0.04387221370785312,
wantZ: -1.3543515772206267,
wantSegs: 0,
},
{
@@ -98,8 +98,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacency,
wantMoranI: 0.031195199553564902,
wantZ: 1.0171161514080056,
wantMoranI: 0.0259414094549987,
wantZ: 0.8511426395944303,
wantSegs: 0,
},
{
@@ -112,8 +112,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacency,
wantMoranI: -0.016245135637562223,
wantZ: -0.48157993864993476,
wantMoranI: -0.0003533345592575677,
wantZ: 0.0204605353504713,
wantSegs: 0,
},
{
@@ -126,8 +126,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacency,
wantMoranI: -0.8565268969272998,
wantZ: -27.027057520918113,
wantMoranI: -0.8587138204405251,
wantZ: -27.09614459007475,
wantSegs: 0,
},
{
@@ -150,8 +150,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacencyBand,
wantMoranI: -0.0019631298955953233,
wantZ: -0.03039477405151108,
wantMoranI: -0.04387221370785312,
wantZ: -1.3543515772206267,
wantSegs: 0,
},
{
@@ -176,8 +176,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacencyBand,
wantMoranI: 0.031195199553564902,
wantZ: 1.0171161514080056,
wantMoranI: 0.0259414094549987,
wantZ: 0.8511426395944303,
wantSegs: 0,
},
{
@@ -190,8 +190,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacencyBand,
wantMoranI: -0.016245135637562223,
wantZ: -0.48157993864993476,
wantMoranI: -0.0003533345592575677,
wantZ: 0.0204605353504713,
wantSegs: 0,
},
{
@@ -204,8 +204,8 @@ var spatialTests = []struct {
},
locality: simpleAdjacencyBand,
wantMoranI: -0.8565268969272998,
wantZ: -27.027057520918113,
wantMoranI: -0.8587138204405251,
wantZ: -27.09614459007475,
wantSegs: 0,
},
{