From bc349ecfab9259ddaea7e9f6bf2c65cfd24f61a8 Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Thu, 2 Jan 2025 12:07:22 +1030 Subject: [PATCH] all: replace internal rand shim with math/rand/v2 --- blas/gonum/level1cmplx128_bench_test.go | 5 +- blas/gonum/level1float64_bench_test.go | 2 +- blas/gonum/level2cmplx128_bench_test.go | 4 +- blas/gonum/pardgemm_test.go | 4 +- .../autogen_bench_level1double.go | 2 +- blas/testblas/common.go | 2 +- blas/testblas/common_test.go | 4 +- blas/testblas/dgemmbench.go | 2 +- blas/testblas/dtrmvbench.go | 4 +- blas/testblas/dtrsm.go | 4 +- blas/testblas/dzasum.go | 8 +-- blas/testblas/dznrm2.go | 4 +- blas/testblas/izamax.go | 7 +- blas/testblas/level2bench.go | 2 +- blas/testblas/zcopy.go | 5 +- blas/testblas/zgbmv.go | 4 +- blas/testblas/zgemm.go | 4 +- blas/testblas/zhbmv.go | 4 +- blas/testblas/zhemm.go | 4 +- blas/testblas/zher2k.go | 4 +- blas/testblas/zherk.go | 4 +- blas/testblas/zswap.go | 5 +- blas/testblas/zsymm.go | 4 +- blas/testblas/zsyr2k.go | 4 +- blas/testblas/zsyrk.go | 4 +- blas/testblas/ztbmv.go | 4 +- blas/testblas/ztbsv.go | 4 +- blas/testblas/ztpsv.go | 4 +- blas/testblas/ztrmm.go | 4 +- blas/testblas/ztrsm.go | 4 +- blas/testblas/ztrsv.go | 4 +- cmplxs/cmplxs_test.go | 28 ++++---- diff/fd/gradient_test.go | 4 +- diff/fd/jacobian_test.go | 4 +- dsp/fourier/fourier_test.go | 20 +++--- dsp/fourier/radix24_test.go | 12 ++-- floats/floats_test.go | 36 +++++----- graph/coloring/coloring.go | 2 +- graph/coloring/coloring_test.go | 6 +- graph/community/bisect.go | 2 +- graph/community/bisect_example_test.go | 10 +-- graph/community/bisect_test.go | 5 +- graph/community/louvain_common.go | 6 +- graph/community/louvain_directed.go | 8 +-- graph/community/louvain_directed_multiplex.go | 8 +-- .../louvain_directed_multiplex_test.go | 8 +-- graph/community/louvain_directed_test.go | 15 ++-- graph/community/louvain_test.go | 4 +- graph/community/louvain_undirected.go | 8 +-- .../community/louvain_undirected_multiplex.go | 8 +-- .../louvain_undirected_multiplex_test.go | 8 +-- graph/community/louvain_undirected_test.go | 8 +-- graph/complement_test.go | 12 ++-- graph/encoding/dot/bench_test.go | 6 +- graph/flow/control_flow_bench_test.go | 16 ++--- graph/formats/rdf/graph_test.go | 10 +-- graph/formats/rdf/iso_canonical_test.go | 5 +- graph/formats/rdf/query_test.go | 10 +-- graph/graphs/gen/batagelj_brandes.go | 24 +++---- graph/graphs/gen/duplication.go | 6 +- graph/graphs/gen/holme_kim.go | 8 +-- graph/graphs/gen/small_world.go | 2 +- graph/layout/eades.go | 2 +- graph/layout/eades_test.go | 16 ++--- graph/multi/directed_test.go | 10 +-- graph/multi/undirected_test.go | 10 +-- graph/multi/weighted_directed_test.go | 10 +-- graph/multi/weighted_undirected_test.go | 10 +-- graph/network/page.go | 2 +- graph/path/johnson_apsp.go | 4 +- graph/path/shortest.go | 8 +-- graph/path/shortest_test.go | 10 +-- graph/product/product_test.go | 12 ++-- graph/set/uid/uid_test.go | 7 +- graph/simple/densegraph_test.go | 18 ++--- graph/simple/directed_test.go | 10 +-- graph/simple/undirected_test.go | 10 +-- graph/simple/weighted_directed_test.go | 10 +-- graph/simple/weighted_undirected_test.go | 10 +-- graph/testgraph/testgraph.go | 32 ++++----- graph/topo/bench_test.go | 6 +- integrate/simpsons_test.go | 4 +- integrate/trapezoidal_test.go | 4 +- internal/asm/f64/asm_test.go | 2 +- internal/asm/f64/dot_test.go | 2 +- internal/asm/f64/scal_test.go | 6 +- internal/testrand/extreme.go | 71 +++++++++---------- internal/testrand/extreme_test.go | 5 +- internal/testrand/rand.go | 27 ++++--- lapack/testlapack/dbdsqr.go | 4 +- lapack/testlapack/dgebak.go | 14 ++-- lapack/testlapack/dgebal.go | 4 +- lapack/testlapack/dgebd2.go | 5 +- lapack/testlapack/dgebrd.go | 4 +- lapack/testlapack/dgecon.go | 4 +- lapack/testlapack/dgeev.go | 8 +-- lapack/testlapack/dgeev_bench.go | 4 +- lapack/testlapack/dgehd2.go | 8 +-- lapack/testlapack/dgehrd.go | 8 +-- lapack/testlapack/dgelq2.go | 4 +- lapack/testlapack/dgelqf.go | 4 +- lapack/testlapack/dgels.go | 4 +- lapack/testlapack/dgeql2.go | 4 +- lapack/testlapack/dgeqp3.go | 6 +- lapack/testlapack/dgeqr2.go | 4 +- lapack/testlapack/dgeqrf.go | 4 +- lapack/testlapack/dgerq2.go | 4 +- lapack/testlapack/dgerqf.go | 4 +- lapack/testlapack/dgesc2.go | 4 +- lapack/testlapack/dgesv.go | 4 +- lapack/testlapack/dgesvd.go | 4 +- lapack/testlapack/dgetc2.go | 6 +- lapack/testlapack/dgetf2.go | 4 +- lapack/testlapack/dgetrf.go | 5 +- lapack/testlapack/dgetri.go | 4 +- lapack/testlapack/dgetrs.go | 4 +- lapack/testlapack/dgghrd.go | 4 +- lapack/testlapack/dggsvd3.go | 4 +- lapack/testlapack/dggsvp3.go | 4 +- lapack/testlapack/dgtsv.go | 4 +- lapack/testlapack/dlabrd.go | 5 +- lapack/testlapack/dlacn2.go | 4 +- lapack/testlapack/dlacpy.go | 4 +- lapack/testlapack/dlaev2.go | 5 +- lapack/testlapack/dlaexc.go | 6 +- lapack/testlapack/dlag2.go | 4 +- lapack/testlapack/dlags2.go | 4 +- lapack/testlapack/dlagtm.go | 4 +- lapack/testlapack/dlahqr.go | 12 ++-- lapack/testlapack/dlahr2.go | 4 +- lapack/testlapack/dlaln2.go | 5 +- lapack/testlapack/dlangb.go | 6 +- lapack/testlapack/dlangb_bench.go | 4 +- lapack/testlapack/dlange.go | 4 +- lapack/testlapack/dlangt.go | 6 +- lapack/testlapack/dlanhs.go | 4 +- lapack/testlapack/dlansb.go | 4 +- lapack/testlapack/dlanst.go | 4 +- lapack/testlapack/dlansy.go | 4 +- lapack/testlapack/dlantb.go | 6 +- lapack/testlapack/dlantb_bench.go | 4 +- lapack/testlapack/dlantr.go | 4 +- lapack/testlapack/dlanv2.go | 5 +- lapack/testlapack/dlapll.go | 4 +- lapack/testlapack/dlapmr.go | 6 +- lapack/testlapack/dlapy2.go | 4 +- lapack/testlapack/dlaqp2.go | 4 +- lapack/testlapack/dlaqps.go | 4 +- lapack/testlapack/dlaqr04.go | 12 ++-- lapack/testlapack/dlaqr1.go | 4 +- lapack/testlapack/dlaqr23.go | 20 +++--- lapack/testlapack/dlaqr5.go | 8 +-- lapack/testlapack/dlaqr5_bench.go | 5 +- lapack/testlapack/dlarf.go | 4 +- lapack/testlapack/dlarfb.go | 4 +- lapack/testlapack/dlarfg.go | 4 +- lapack/testlapack/dlarft.go | 4 +- lapack/testlapack/dlarfx.go | 4 +- lapack/testlapack/dlascl.go | 4 +- lapack/testlapack/dlaset.go | 4 +- lapack/testlapack/dlasq1.go | 4 +- lapack/testlapack/dlasq2.go | 4 +- lapack/testlapack/dlasr.go | 4 +- lapack/testlapack/dlassq.go | 4 +- lapack/testlapack/dlasv2.go | 4 +- lapack/testlapack/dlasy2.go | 4 +- lapack/testlapack/dlatbs.go | 4 +- lapack/testlapack/dlatrd.go | 4 +- lapack/testlapack/dlatrs.go | 4 +- lapack/testlapack/dlauu2.go | 4 +- lapack/testlapack/dorg2l.go | 4 +- lapack/testlapack/dorg2r.go | 4 +- lapack/testlapack/dorgbr.go | 4 +- lapack/testlapack/dorghr.go | 8 +-- lapack/testlapack/dorgl2.go | 4 +- lapack/testlapack/dorglq.go | 4 +- lapack/testlapack/dorgql.go | 10 +-- lapack/testlapack/dorgqr.go | 4 +- lapack/testlapack/dorgr2.go | 4 +- lapack/testlapack/dorgtr.go | 4 +- lapack/testlapack/dorm2r.go | 4 +- lapack/testlapack/dormbr.go | 4 +- lapack/testlapack/dormhr.go | 8 +-- lapack/testlapack/dorml2.go | 4 +- lapack/testlapack/dormlq.go | 4 +- lapack/testlapack/dormqr.go | 4 +- lapack/testlapack/dormr2.go | 4 +- lapack/testlapack/dpbcon.go | 4 +- lapack/testlapack/dpbtf2.go | 4 +- lapack/testlapack/dpbtrf.go | 4 +- lapack/testlapack/dpbtrs.go | 4 +- lapack/testlapack/dpocon.go | 4 +- lapack/testlapack/dpotrf.go | 4 +- lapack/testlapack/dpotri.go | 4 +- lapack/testlapack/dpotrs.go | 4 +- lapack/testlapack/dpstf2.go | 4 +- lapack/testlapack/dpstrf.go | 4 +- lapack/testlapack/dptcon.go | 4 +- lapack/testlapack/dptsv.go | 5 +- lapack/testlapack/dpttrf.go | 4 +- lapack/testlapack/dpttrs.go | 4 +- lapack/testlapack/dsteqr.go | 4 +- lapack/testlapack/dsterf.go | 4 +- lapack/testlapack/dsyev.go | 4 +- lapack/testlapack/dsytd2.go | 4 +- lapack/testlapack/dsytrd.go | 4 +- lapack/testlapack/dtbtrs.go | 6 +- lapack/testlapack/dtgsja.go | 4 +- lapack/testlapack/dtrcon.go | 4 +- lapack/testlapack/dtrevc3.go | 4 +- lapack/testlapack/dtrexc.go | 8 +-- lapack/testlapack/dtrti2.go | 4 +- lapack/testlapack/dtrtri.go | 4 +- lapack/testlapack/dtrtrs.go | 6 +- lapack/testlapack/general.go | 6 +- lapack/testlapack/matgen.go | 2 +- lapack/testlapack/matgen_test.go | 8 +-- lapack/testlapack/test_matrices.go | 2 +- mat/cdense_test.go | 5 +- mat/cholesky_test.go | 26 +++---- mat/dense_test.go | 24 +++---- mat/diagonal_test.go | 2 +- mat/eigen_test.go | 4 +- mat/gsvd_test.go | 4 +- mat/hogsvd_test.go | 5 +- mat/inner_test.go | 4 +- mat/list_test.go | 10 +-- mat/lq_test.go | 9 ++- mat/lu_test.go | 11 ++- mat/matrix_test.go | 4 +- mat/mul_test.go | 4 +- mat/pool_test.go | 7 +- mat/product_test.go | 7 +- mat/qr_test.go | 8 +-- mat/shadow_test.go | 13 ++-- mat/solve_test.go | 7 +- mat/svd_test.go | 8 +-- mat/symmetric_test.go | 14 ++-- mat/triangular_test.go | 22 +++--- mat/tridiag_test.go | 6 +- mat/vector_test.go | 14 ++-- mathext/ell_carlson_test.go | 7 +- mathext/internal/amos/amos_fortran_test.go | 20 +++--- mathext/internal/amos/amos_test.go | 28 ++++---- mathext/prng/mt19937_64_test.go | 3 +- mathext/prng/mt19937_test.go | 3 +- mathext/prng/prng_di_unimi_test.go | 3 +- optimize/cmaes.go | 2 +- optimize/cmaes_test.go | 4 +- optimize/convex/lp/simplex_test.go | 8 +-- optimize/listsearch_test.go | 6 +- spatial/barneshut/barneshut2_test.go | 10 +-- spatial/barneshut/barneshut3_test.go | 10 +-- spatial/barneshut/galaxy_example_test.go | 4 +- spatial/curve/hilbert_test.go | 7 +- spatial/kdtree/kdtree_test.go | 15 ++-- spatial/kdtree/medians.go | 5 +- spatial/kdtree/medians_test.go | 27 ++++--- spatial/r2/box_test.go | 19 +++-- spatial/r2/triangle_test.go | 11 ++- spatial/r2/vector_test.go | 2 +- spatial/r3/box_test.go | 19 +++-- spatial/r3/mat_test.go | 28 ++++---- spatial/r3/triangle_test.go | 13 ++-- spatial/r3/vector_test.go | 6 +- spatial/vptree/vptree.go | 6 +- spatial/vptree/vptree_test.go | 24 +++---- stat/card/card_test.go | 12 ++-- stat/distmat/permutation.go | 3 +- stat/distmat/permutation_test.go | 4 +- stat/distmat/unit_vector.go | 3 +- stat/distmat/unit_vector_example_test.go | 11 +-- stat/distmat/unit_vector_test.go | 6 +- stat/distmat/wishart.go | 2 +- stat/distmat/wishart_test.go | 4 +- stat/distmv/dirichlet.go | 2 +- stat/distmv/dirichlet_test.go | 8 +-- stat/distmv/normal.go | 2 +- stat/distmv/normal_test.go | 52 +++++++------- stat/distmv/normalbench_test.go | 16 ++--- stat/distmv/statdist_test.go | 18 ++--- stat/distmv/studentst.go | 2 +- stat/distmv/studentst_test.go | 12 ++-- stat/distmv/uniform.go | 2 +- stat/distmv/uniform_test.go | 5 +- stat/distuv/alphastable.go | 3 +- stat/distuv/alphastable_test.go | 12 ++-- stat/distuv/bernoulli.go | 3 +- stat/distuv/bernoulli_test.go | 5 +- stat/distuv/beta.go | 2 +- stat/distuv/beta_test.go | 6 +- stat/distuv/binomial.go | 2 +- stat/distuv/binomial_test.go | 4 +- stat/distuv/categorical.go | 3 +- stat/distuv/categorical_test.go | 18 ++--- stat/distuv/chi.go | 2 +- stat/distuv/chi_test.go | 4 +- stat/distuv/chisquared.go | 2 +- stat/distuv/chisquared_test.go | 4 +- stat/distuv/exponential.go | 2 +- stat/distuv/exponential_test.go | 7 +- stat/distuv/f.go | 2 +- stat/distuv/f_test.go | 4 +- stat/distuv/gamma.go | 2 +- stat/distuv/gamma_test.go | 6 +- stat/distuv/gumbel.go | 3 +- stat/distuv/gumbel_test.go | 4 +- stat/distuv/inversegamma.go | 2 +- stat/distuv/inversegamma_test.go | 4 +- stat/distuv/laplace.go | 2 +- stat/distuv/laplace_test.go | 6 +- stat/distuv/lognormal.go | 3 +- stat/distuv/lognormal_test.go | 5 +- stat/distuv/norm.go | 2 +- stat/distuv/norm_test.go | 4 +- stat/distuv/pareto.go | 3 +- stat/distuv/pareto_test.go | 6 +- stat/distuv/poisson.go | 2 +- stat/distuv/poisson_test.go | 6 +- stat/distuv/statdist_test.go | 14 ++-- stat/distuv/studentst.go | 2 +- stat/distuv/studentst_test.go | 4 +- stat/distuv/triangle.go | 3 +- stat/distuv/triangle_test.go | 5 +- stat/distuv/uniform.go | 3 +- stat/distuv/uniform_test.go | 4 +- stat/distuv/weibull.go | 3 +- stat/distuv/weibull_test.go | 5 +- stat/moments_bench_test.go | 3 +- stat/roc_test.go | 7 +- stat/samplemv/halton.go | 2 +- stat/samplemv/halton_test.go | 4 +- stat/samplemv/metropolishastings.go | 2 +- stat/samplemv/sample_test.go | 18 ++--- stat/samplemv/samplemv.go | 2 +- stat/sampleuv/sample.go | 2 +- stat/sampleuv/sample_test.go | 25 ++++--- stat/sampleuv/weighted.go | 2 +- stat/sampleuv/weighted_test.go | 51 +++++++------ stat/sampleuv/withoutreplacement.go | 7 +- stat/sampleuv/withoutreplacement_test.go | 6 +- stat/spatial/spatial_test.go | 6 +- stat/stat_example_test.go | 5 +- stat/stat_test.go | 4 +- stat/statmat_test.go | 2 +- 345 files changed, 1165 insertions(+), 1214 deletions(-) diff --git a/blas/gonum/level1cmplx128_bench_test.go b/blas/gonum/level1cmplx128_bench_test.go index c788c714..c41b02a4 100644 --- a/blas/gonum/level1cmplx128_bench_test.go +++ b/blas/gonum/level1cmplx128_bench_test.go @@ -5,13 +5,12 @@ package gonum import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func benchmarkZdscal(b *testing.B, n, inc int) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) alpha := rnd.NormFloat64() x := make([]complex128, (n-1)*inc+1) for i := range x { diff --git a/blas/gonum/level1float64_bench_test.go b/blas/gonum/level1float64_bench_test.go index 96810ab6..121beb3b 100644 --- a/blas/gonum/level1float64_bench_test.go +++ b/blas/gonum/level1float64_bench_test.go @@ -7,10 +7,10 @@ package gonum import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) const ( diff --git a/blas/gonum/level2cmplx128_bench_test.go b/blas/gonum/level2cmplx128_bench_test.go index 5d1eaeab..ba4f40a0 100644 --- a/blas/gonum/level2cmplx128_bench_test.go +++ b/blas/gonum/level2cmplx128_bench_test.go @@ -6,10 +6,10 @@ package gonum import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) var benchSinkZ []complex128 @@ -26,7 +26,7 @@ func BenchmarkZher(b *testing.B) { func benchmarkZher(b *testing.B, uplo blas.Uplo, n, inc int) { b.Run(fmt.Sprintf("Uplo%d-N%d-Inc%d", uplo, n, inc), func(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) alpha := rnd.NormFloat64() x := make([]complex128, (n-1)*inc+1) for i := range x { diff --git a/blas/gonum/pardgemm_test.go b/blas/gonum/pardgemm_test.go index 4b82c821..fed5c531 100644 --- a/blas/gonum/pardgemm_test.go +++ b/blas/gonum/pardgemm_test.go @@ -5,15 +5,15 @@ package gonum import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) func TestDgemmParallel(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, test := range []struct { m int n int diff --git a/blas/testblas/benchautogen/autogen_bench_level1double.go b/blas/testblas/benchautogen/autogen_bench_level1double.go index e7226866..bd6d0601 100644 --- a/blas/testblas/benchautogen/autogen_bench_level1double.go +++ b/blas/testblas/benchautogen/autogen_bench_level1double.go @@ -22,10 +22,10 @@ var copyrightnotice = []byte(`// Copyright ©2014 The Gonum Authors. All rights var autogen = []byte("// Code generated by \"go run $GOPATH/src/gonum.org/v1/gonum/blas/testblas/benchautogen/autogen_bench_level1double.go\"; DO NOT EDIT.\n") var imports = []byte(`import( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" )`) var randomSliceFunction = []byte(`func randomSlice(l, idx int) ([]float64) { diff --git a/blas/testblas/common.go b/blas/testblas/common.go index a308761c..d41e8a98 100644 --- a/blas/testblas/common.go +++ b/blas/testblas/common.go @@ -7,11 +7,11 @@ package testblas import ( "math" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) // throwPanic will throw unexpected panics if true, or will just report them as errors if false diff --git a/blas/testblas/common_test.go b/blas/testblas/common_test.go index 4a904e18..d8bdf26d 100644 --- a/blas/testblas/common_test.go +++ b/blas/testblas/common_test.go @@ -7,11 +7,11 @@ package testblas import ( "math" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) func TestFlattenBanded(t *testing.T) { @@ -193,7 +193,7 @@ func TestFlattenTriangular(t *testing.T) { } func TestPackUnpackAsHermitian(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, n := range []int{1, 2, 5, 50} { for _, lda := range []int{max(1, n), n + 11} { diff --git a/blas/testblas/dgemmbench.go b/blas/testblas/dgemmbench.go index 99060028..8475d221 100644 --- a/blas/testblas/dgemmbench.go +++ b/blas/testblas/dgemmbench.go @@ -5,10 +5,10 @@ package testblas import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) func DgemmBenchmark(b *testing.B, dgemm Dgemmer, m, n, k int, tA, tB blas.Transpose) { diff --git a/blas/testblas/dtrmvbench.go b/blas/testblas/dtrmvbench.go index df42ba21..bfa3de7f 100644 --- a/blas/testblas/dtrmvbench.go +++ b/blas/testblas/dtrmvbench.go @@ -5,14 +5,14 @@ package testblas import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) func DtrmvBenchmark(b *testing.B, dtrmv Dtrmver, n, lda, incX int, ul blas.Uplo, tA blas.Transpose, d blas.Diag) { - rnd := rand.New(rand.NewSource(0)) + rnd := rand.New(rand.NewPCG(0, 0)) a := make([]float64, n*lda) for i := range a { a[i] = rnd.Float64() diff --git a/blas/testblas/dtrsm.go b/blas/testblas/dtrsm.go index 9ab116e5..240665ec 100644 --- a/blas/testblas/dtrsm.go +++ b/blas/testblas/dtrsm.go @@ -5,11 +5,11 @@ package testblas import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dtrsmer interface { @@ -18,7 +18,7 @@ type Dtrsmer interface { } func DtrsmTest(t *testing.T, impl Dtrsmer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, test := range []struct { s blas.Side ul blas.Uplo diff --git a/blas/testblas/dzasum.go b/blas/testblas/dzasum.go index fccde21c..31b2b3f5 100644 --- a/blas/testblas/dzasum.go +++ b/blas/testblas/dzasum.go @@ -5,10 +5,10 @@ package testblas import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dzasumer interface { @@ -17,7 +17,7 @@ type Dzasumer interface { func DzasumTest(t *testing.T, impl Dzasumer) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 50, 100} { for _, incX := range []int{-5, 1, 2, 10} { aincX := abs(incX) @@ -30,11 +30,11 @@ func DzasumTest(t *testing.T, impl Dzasumer) { } for i := 0; i < n; i++ { re := float64(2*i + 1) - if rnd.Intn(2) == 0 { + if rnd.IntN(2) == 0 { re *= -1 } im := float64(2 * (i + 1)) - if rnd.Intn(2) == 0 { + if rnd.IntN(2) == 0 { im *= -1 } x[i*aincX] = complex(re, im) diff --git a/blas/testblas/dznrm2.go b/blas/testblas/dznrm2.go index c8672969..6b7d2f84 100644 --- a/blas/testblas/dznrm2.go +++ b/blas/testblas/dznrm2.go @@ -7,10 +7,10 @@ package testblas import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dznrm2er interface { @@ -105,7 +105,7 @@ func Dznrm2Test(t *testing.T, impl Dznrm2er) { } tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{10, 50, 100} { for _, incX := range []int{1, 2, 10} { re := make([]float64, n) diff --git a/blas/testblas/izamax.go b/blas/testblas/izamax.go index cc44f7e1..798deb41 100644 --- a/blas/testblas/izamax.go +++ b/blas/testblas/izamax.go @@ -5,9 +5,8 @@ package testblas import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Izamaxer interface { @@ -15,7 +14,7 @@ type Izamaxer interface { } func IzamaxTest(t *testing.T, impl Izamaxer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 50, 100} { for _, incX := range []int{-5, 1, 2, 10} { aincX := abs(incX) @@ -34,7 +33,7 @@ func IzamaxTest(t *testing.T, impl Izamaxer) { want := -1 if incX > 0 && n > 0 { - want = rnd.Intn(n) + want = rnd.IntN(n) x[want*incX] = 10 + 10i } got := impl.Izamax(n, x, incX) diff --git a/blas/testblas/level2bench.go b/blas/testblas/level2bench.go index b5f20520..d1b3256e 100644 --- a/blas/testblas/level2bench.go +++ b/blas/testblas/level2bench.go @@ -5,10 +5,10 @@ package testblas import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) func DgemvBenchmark(b *testing.B, impl Dgemver, tA blas.Transpose, m, n, incX, incY int) { diff --git a/blas/testblas/zcopy.go b/blas/testblas/zcopy.go index e681baee..88d586bd 100644 --- a/blas/testblas/zcopy.go +++ b/blas/testblas/zcopy.go @@ -6,9 +6,8 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Zcopyer interface { @@ -16,7 +15,7 @@ type Zcopyer interface { } func ZcopyTest(t *testing.T, impl Zcopyer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 0; n <= 20; n++ { for _, inc := range allPairs([]int{-7, -3, 1, 13}, []int{-11, -5, 1, 17}) { incX := inc[0] diff --git a/blas/testblas/zgbmv.go b/blas/testblas/zgbmv.go index 75d1f4ed..e4c9c303 100644 --- a/blas/testblas/zgbmv.go +++ b/blas/testblas/zgbmv.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zgbmver interface { @@ -19,7 +19,7 @@ type Zgbmver interface { } func ZgbmvTest(t *testing.T, impl Zgbmver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { // Generate all possible size combinations. for _, mn := range allPairs([]int{1, 2, 3, 5}, []int{1, 2, 3, 5}) { diff --git a/blas/testblas/zgemm.go b/blas/testblas/zgemm.go index 16fa8fc8..b05f5d80 100644 --- a/blas/testblas/zgemm.go +++ b/blas/testblas/zgemm.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zgemmer interface { @@ -36,7 +36,7 @@ func ZgemmTest(t *testing.T, impl Zgemmer) { func zgemmTest(t *testing.T, impl Zgemmer, tA, tB blas.Transpose, m, n, k int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) rowA, colA := m, k if tA != blas.NoTrans { diff --git a/blas/testblas/zhbmv.go b/blas/testblas/zhbmv.go index b808c781..8f5cf2ed 100644 --- a/blas/testblas/zhbmv.go +++ b/blas/testblas/zhbmv.go @@ -7,10 +7,10 @@ package testblas import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zhbmver interface { @@ -20,7 +20,7 @@ type Zhbmver interface { } func ZhbmvTest(t *testing.T, impl Zhbmver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, n := range []int{0, 1, 2, 3, 5} { for k := 0; k < n; k++ { diff --git a/blas/testblas/zhemm.go b/blas/testblas/zhemm.go index bc488aea..8ed0f571 100644 --- a/blas/testblas/zhemm.go +++ b/blas/testblas/zhemm.go @@ -7,10 +7,10 @@ package testblas import ( "fmt" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zhemmer interface { @@ -35,7 +35,7 @@ func ZhemmTest(t *testing.T, impl Zhemmer) { func zhemmTest(t *testing.T, impl Zhemmer, side blas.Side, uplo blas.Uplo, m, n int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) nA := m if side == blas.Right { diff --git a/blas/testblas/zher2k.go b/blas/testblas/zher2k.go index d96901aa..b3e310e1 100644 --- a/blas/testblas/zher2k.go +++ b/blas/testblas/zher2k.go @@ -7,10 +7,10 @@ package testblas import ( "fmt" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zher2ker interface { @@ -35,7 +35,7 @@ func Zher2kTest(t *testing.T, impl Zher2ker) { func zher2kTest(t *testing.T, impl Zher2ker, uplo blas.Uplo, trans blas.Transpose, n, k int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) row, col := n, k if trans == blas.ConjTrans { diff --git a/blas/testblas/zherk.go b/blas/testblas/zherk.go index 68bd5085..6c7e7b7f 100644 --- a/blas/testblas/zherk.go +++ b/blas/testblas/zherk.go @@ -7,10 +7,10 @@ package testblas import ( "fmt" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zherker interface { @@ -35,7 +35,7 @@ func ZherkTest(t *testing.T, impl Zherker) { func zherkTest(t *testing.T, impl Zherker, uplo blas.Uplo, trans blas.Transpose, n, k int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) rowA, colA := n, k if trans == blas.ConjTrans { diff --git a/blas/testblas/zswap.go b/blas/testblas/zswap.go index cbcf40b7..b781f2c3 100644 --- a/blas/testblas/zswap.go +++ b/blas/testblas/zswap.go @@ -6,9 +6,8 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Zswaper interface { @@ -16,7 +15,7 @@ type Zswaper interface { } func ZswapTest(t *testing.T, impl Zswaper) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 0; n < 20; n++ { for _, inc := range allPairs([]int{-5, -1, 1, 2, 5, 10}, []int{-3, -1, 1, 3, 7, 12}) { incX := inc[0] diff --git a/blas/testblas/zsymm.go b/blas/testblas/zsymm.go index 6225dbf5..c0d7739a 100644 --- a/blas/testblas/zsymm.go +++ b/blas/testblas/zsymm.go @@ -7,10 +7,10 @@ package testblas import ( "fmt" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zsymmer interface { @@ -35,7 +35,7 @@ func ZsymmTest(t *testing.T, impl Zsymmer) { func zsymmTest(t *testing.T, impl Zsymmer, side blas.Side, uplo blas.Uplo, m, n int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) nA := m if side == blas.Right { diff --git a/blas/testblas/zsyr2k.go b/blas/testblas/zsyr2k.go index e2aec618..5f01e9b6 100644 --- a/blas/testblas/zsyr2k.go +++ b/blas/testblas/zsyr2k.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zsyr2ker interface { @@ -34,7 +34,7 @@ func Zsyr2kTest(t *testing.T, impl Zsyr2ker) { func zsyr2kTest(t *testing.T, impl Zsyr2ker, uplo blas.Uplo, trans blas.Transpose, n, k int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) row, col := n, k if trans == blas.Trans { diff --git a/blas/testblas/zsyrk.go b/blas/testblas/zsyrk.go index e07dcb9b..a670c877 100644 --- a/blas/testblas/zsyrk.go +++ b/blas/testblas/zsyrk.go @@ -7,10 +7,10 @@ package testblas import ( "fmt" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Zsyrker interface { @@ -35,7 +35,7 @@ func ZsyrkTest(t *testing.T, impl Zsyrker) { func zsyrkTest(t *testing.T, impl Zsyrker, uplo blas.Uplo, trans blas.Transpose, n, k int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) rowA, colA := n, k if trans == blas.Trans { diff --git a/blas/testblas/ztbmv.go b/blas/testblas/ztbmv.go index 0ba6b315..74e87819 100644 --- a/blas/testblas/ztbmv.go +++ b/blas/testblas/ztbmv.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Ztbmver interface { @@ -19,7 +19,7 @@ type Ztbmver interface { } func ZtbmvTest(t *testing.T, impl Ztbmver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { diff --git a/blas/testblas/ztbsv.go b/blas/testblas/ztbsv.go index 4c4bacb4..c5d914cf 100644 --- a/blas/testblas/ztbsv.go +++ b/blas/testblas/ztbsv.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Ztbsver interface { @@ -19,7 +19,7 @@ type Ztbsver interface { } func ZtbsvTest(t *testing.T, impl Ztbsver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { diff --git a/blas/testblas/ztpsv.go b/blas/testblas/ztpsv.go index ef775d94..7ac01a95 100644 --- a/blas/testblas/ztpsv.go +++ b/blas/testblas/ztpsv.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Ztpsver interface { @@ -19,7 +19,7 @@ type Ztpsver interface { } func ZtpsvTest(t *testing.T, impl Ztpsver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { diff --git a/blas/testblas/ztrmm.go b/blas/testblas/ztrmm.go index 5072e170..7a3df566 100644 --- a/blas/testblas/ztrmm.go +++ b/blas/testblas/ztrmm.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Ztrmmer interface { @@ -38,7 +38,7 @@ func ZtrmmTest(t *testing.T, impl Ztrmmer) { func ztrmmTest(t *testing.T, impl Ztrmmer, side blas.Side, uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, m, n int) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) nA := m if side == blas.Right { diff --git a/blas/testblas/ztrsm.go b/blas/testblas/ztrsm.go index 0aa896dc..d2cecd7b 100644 --- a/blas/testblas/ztrsm.go +++ b/blas/testblas/ztrsm.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Ztrsmer interface { @@ -38,7 +38,7 @@ func ZtrsmTest(t *testing.T, impl Ztrsmer) { func ztrsmTest(t *testing.T, impl Ztrsmer, side blas.Side, uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, m, n int) { const tol = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) nA := m if side == blas.Right { diff --git a/blas/testblas/ztrsv.go b/blas/testblas/ztrsv.go index 933844ad..0ac99c2f 100644 --- a/blas/testblas/ztrsv.go +++ b/blas/testblas/ztrsv.go @@ -6,10 +6,10 @@ package testblas import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Ztrsver interface { @@ -19,7 +19,7 @@ type Ztrsver interface { } func ZtrsvTest(t *testing.T, impl Ztrsver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { diff --git a/cmplxs/cmplxs_test.go b/cmplxs/cmplxs_test.go index cff4679e..ccf9ed01 100644 --- a/cmplxs/cmplxs_test.go +++ b/cmplxs/cmplxs_test.go @@ -8,12 +8,12 @@ import ( "fmt" "math" "math/cmplx" + "math/rand/v2" "strconv" "testing" "gonum.org/v1/gonum/cmplxs/cscalar" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) const ( @@ -1201,7 +1201,7 @@ func randomSlice(l int, src rand.Source) []complex128 { } func benchmarkAdd(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) b.ResetTimer() @@ -1215,7 +1215,7 @@ func BenchmarkAddLarge(b *testing.B) { benchmarkAdd(b, Large) } func BenchmarkAddHuge(b *testing.B) { benchmarkAdd(b, Huge) } func benchmarkAddTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) dst := randomSlice(size, src) @@ -1230,7 +1230,7 @@ func BenchmarkAddToLarge(b *testing.B) { benchmarkAddTo(b, Large) } func BenchmarkAddToHuge(b *testing.B) { benchmarkAddTo(b, Huge) } func benchmarkCumProd(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) dst := randomSlice(size, src) b.ResetTimer() @@ -1244,7 +1244,7 @@ func BenchmarkCumProdLarge(b *testing.B) { benchmarkCumProd(b, Large) } func BenchmarkCumProdHuge(b *testing.B) { benchmarkCumProd(b, Huge) } func benchmarkCumSum(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) dst := randomSlice(size, src) b.ResetTimer() @@ -1258,7 +1258,7 @@ func BenchmarkCumSumLarge(b *testing.B) { benchmarkCumSum(b, Large) } func BenchmarkCumSumHuge(b *testing.B) { benchmarkCumSum(b, Huge) } func benchmarkDiv(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) dst := randomSlice(size, src) b.ResetTimer() @@ -1272,7 +1272,7 @@ func BenchmarkDivLarge(b *testing.B) { benchmarkDiv(b, Large) } func BenchmarkDivHuge(b *testing.B) { benchmarkDiv(b, Huge) } func benchmarkDivTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) dst := randomSlice(size, src) @@ -1287,7 +1287,7 @@ func BenchmarkDivToLarge(b *testing.B) { benchmarkDivTo(b, Large) } func BenchmarkDivToHuge(b *testing.B) { benchmarkDivTo(b, Huge) } func benchmarkSub(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) b.ResetTimer() @@ -1301,7 +1301,7 @@ func BenchmarkSubLarge(b *testing.B) { benchmarkSub(b, Large) } func BenchmarkSubHuge(b *testing.B) { benchmarkSub(b, Huge) } func benchmarkSubTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) dst := randomSlice(size, src) @@ -1316,7 +1316,7 @@ func BenchmarkSubToLarge(b *testing.B) { benchmarkSubTo(b, Large) } func BenchmarkSubToHuge(b *testing.B) { benchmarkSubTo(b, Huge) } func benchmarkDot(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) b.ResetTimer() @@ -1330,7 +1330,7 @@ func BenchmarkDotLarge(b *testing.B) { benchmarkDot(b, Large) } func BenchmarkDotHuge(b *testing.B) { benchmarkDot(b, Huge) } func benchmarkAddScaledTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) dst := randomSlice(size, src) y := randomSlice(size, src) s := randomSlice(size, src) @@ -1345,7 +1345,7 @@ func BenchmarkAddScaledToLarge(b *testing.B) { benchmarkAddScaledTo(b, Large) } func BenchmarkAddScaledToHuge(b *testing.B) { benchmarkAddScaledTo(b, Huge) } func benchmarkScale(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) dst := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i += 2 { @@ -1359,7 +1359,7 @@ func BenchmarkScaleLarge(b *testing.B) { benchmarkScale(b, Large) } func BenchmarkScaleHuge(b *testing.B) { benchmarkScale(b, Huge) } func benchmarkNorm2(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -1372,7 +1372,7 @@ func BenchmarkNorm2Large(b *testing.B) { benchmarkNorm2(b, Large) } func BenchmarkNorm2Huge(b *testing.B) { benchmarkNorm2(b, Huge) } func benchmarkReverse(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/diff/fd/gradient_test.go b/diff/fd/gradient_test.go index 4541e49d..a3ba1f97 100644 --- a/diff/fd/gradient_test.go +++ b/diff/fd/gradient_test.go @@ -6,10 +6,10 @@ package fd import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Rosenbrock struct { @@ -42,7 +42,7 @@ func (r Rosenbrock) FDf(x []float64, deriv []float64) (sum float64) { func TestGradient(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, test := range []struct { nDim int tol float64 diff --git a/diff/fd/jacobian_test.go b/diff/fd/jacobian_test.go index 0fa97081..5a10d878 100644 --- a/diff/fd/jacobian_test.go +++ b/diff/fd/jacobian_test.go @@ -6,10 +6,10 @@ package fd import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -56,7 +56,7 @@ func vecFunc43Jac(jac *mat.Dense, x []float64) { func TestJacobian(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Test with default settings. for tc, test := range []struct { diff --git a/dsp/fourier/fourier_test.go b/dsp/fourier/fourier_test.go index 1244cdf5..ec9e79d1 100644 --- a/dsp/fourier/fourier_test.go +++ b/dsp/fourier/fourier_test.go @@ -6,17 +6,17 @@ package fourier import ( "fmt" + "math/rand/v2" "reflect" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) func TestFFT(t *testing.T) { t.Parallel() const tol = 1e-10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t.Run("NewFFT", func(t *testing.T) { for n := 1; n <= 200; n++ { fft := NewFFT(n) @@ -122,7 +122,7 @@ func TestFFT(t *testing.T) { func TestCmplxFFT(t *testing.T) { const tol = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t.Run("NewFFT", func(t *testing.T) { for n := 1; n <= 200; n++ { fft := NewCmplxFFT(n) @@ -220,7 +220,7 @@ func TestCmplxFFT(t *testing.T) { func TestDCT(t *testing.T) { t.Parallel() const tol = 1e-10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t.Run("NewDCT", func(t *testing.T) { for n := 2; n <= 200; n++ { dct := NewDCT(n) @@ -263,7 +263,7 @@ func TestDCT(t *testing.T) { func TestDST(t *testing.T) { t.Parallel() const tol = 1e-10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t.Run("NewDST", func(t *testing.T) { for n := 1; n <= 200; n++ { dst := NewDST(n) @@ -306,7 +306,7 @@ func TestDST(t *testing.T) { func TestQuarterWaveFFT(t *testing.T) { t.Parallel() const tol = 1e-10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t.Run("NewQuarterWaveFFT", func(t *testing.T) { for n := 1; n <= 200; n++ { qw := NewQuarterWaveFFT(n) @@ -397,7 +397,7 @@ func BenchmarkRealFFTCoefficients(b *testing.B) { sizes = append(sizes, 100, 4000, 1e6) for _, n := range sizes { fft := NewFFT(n) - seq := randFloats(n, rand.NewSource(1)) + seq := randFloats(n, rand.NewPCG(1, 1)) dst := make([]complex128, n/2+1) b.Run(fmt.Sprint(n), func(b *testing.B) { @@ -416,7 +416,7 @@ func BenchmarkRealFFTSequence(b *testing.B) { sizes = append(sizes, 100, 4000, 1e6) for _, n := range sizes { fft := NewFFT(n) - coeff := randComplexes(n/2+1, rand.NewSource(1)) + coeff := randComplexes(n/2+1, rand.NewPCG(1, 1)) dst := make([]float64, n) b.Run(fmt.Sprint(n), func(b *testing.B) { @@ -435,7 +435,7 @@ func BenchmarkCmplxFFTCoefficients(b *testing.B) { sizes = append(sizes, 100, 4000, 1e6) for _, n := range sizes { fft := NewCmplxFFT(n) - d := randComplexes(n, rand.NewSource(1)) + d := randComplexes(n, rand.NewPCG(1, 1)) b.Run(fmt.Sprint(n), func(b *testing.B) { for i := 0; i < b.N; i++ { @@ -453,7 +453,7 @@ func BenchmarkCmplxFFTSequence(b *testing.B) { sizes = append(sizes, 100, 4000, 1e6) for _, n := range sizes { fft := NewCmplxFFT(n) - d := randComplexes(n, rand.NewSource(1)) + d := randComplexes(n, rand.NewPCG(1, 1)) b.Run(fmt.Sprint(n), func(b *testing.B) { for i := 0; i < b.N; i++ { diff --git a/dsp/fourier/radix24_test.go b/dsp/fourier/radix24_test.go index 49f02bc4..6dc8fae9 100644 --- a/dsp/fourier/radix24_test.go +++ b/dsp/fourier/radix24_test.go @@ -8,19 +8,19 @@ import ( "bytes" "fmt" "math/bits" + "math/rand/v2" "slices" "strconv" "testing" "unsafe" "gonum.org/v1/gonum/cmplxs" - "gonum.org/v1/gonum/internal/rand" ) func TestCoefficients(t *testing.T) { const tol = 1e-8 - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for n := 4; n < 1<<20; n <<= 1 { for i := 0; i < 10; i++ { t.Run(fmt.Sprintf("Radix2/%d", n), func(t *testing.T) { @@ -73,7 +73,7 @@ func TestCoefficients(t *testing.T) { func TestSequence(t *testing.T) { const tol = 1e-10 - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for n := 4; n < 1<<20; n <<= 1 { for i := 0; i < 10; i++ { t.Run(fmt.Sprintf("Radix2/%d", n), func(t *testing.T) { @@ -185,7 +185,7 @@ func TestBitPairReversePermute(t *testing.T) { } func TestReversePairs(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 1000; i++ { x := uint(rnd.Uint64()) got := reversePairs(x) @@ -254,7 +254,7 @@ func TestTrimRadix4(t *testing.T) { func BenchmarkCoefficients(b *testing.B) { for n := 16; n < 1<<24; n <<= 3 { - d := randComplexes(n, rand.NewSource(1)) + d := randComplexes(n, rand.NewPCG(1, 1)) b.Run(fmt.Sprintf("Radix2/%d", n), func(b *testing.B) { for i := 0; i < b.N; i++ { CoefficientsRadix2(d) @@ -273,7 +273,7 @@ func BenchmarkCoefficients(b *testing.B) { func BenchmarkSequence(b *testing.B) { for n := 16; n < 1<<24; n <<= 3 { - d := randComplexes(n, rand.NewSource(1)) + d := randComplexes(n, rand.NewPCG(1, 1)) b.Run(fmt.Sprintf("Radix2/%d", n), func(b *testing.B) { for i := 0; i < b.N; i++ { SequenceRadix2(d) diff --git a/floats/floats_test.go b/floats/floats_test.go index a6871f93..0eb75251 100644 --- a/floats/floats_test.go +++ b/floats/floats_test.go @@ -7,12 +7,12 @@ package floats import ( "fmt" "math" + "math/rand/v2" "sort" "strconv" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) const ( @@ -1609,7 +1609,7 @@ func randomSlice(l int, src rand.Source) []float64 { } func benchmarkMin(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -1622,7 +1622,7 @@ func BenchmarkMinLarge(b *testing.B) { benchmarkMin(b, Large) } func BenchmarkMinHuge(b *testing.B) { benchmarkMin(b, Huge) } func benchmarkAdd(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) b.ResetTimer() @@ -1636,7 +1636,7 @@ func BenchmarkAddLarge(b *testing.B) { benchmarkAdd(b, Large) } func BenchmarkAddHuge(b *testing.B) { benchmarkAdd(b, Huge) } func benchmarkAddTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) dst := randomSlice(size, src) @@ -1651,7 +1651,7 @@ func BenchmarkAddToLarge(b *testing.B) { benchmarkAddTo(b, Large) } func BenchmarkAddToHuge(b *testing.B) { benchmarkAddTo(b, Huge) } func benchmarkCumProd(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) dst := randomSlice(size, src) b.ResetTimer() @@ -1665,7 +1665,7 @@ func BenchmarkCumProdLarge(b *testing.B) { benchmarkCumProd(b, Large) } func BenchmarkCumProdHuge(b *testing.B) { benchmarkCumProd(b, Huge) } func benchmarkCumSum(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) dst := randomSlice(size, src) b.ResetTimer() @@ -1679,7 +1679,7 @@ func BenchmarkCumSumLarge(b *testing.B) { benchmarkCumSum(b, Large) } func BenchmarkCumSumHuge(b *testing.B) { benchmarkCumSum(b, Huge) } func benchmarkDiv(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) dst := randomSlice(size, src) b.ResetTimer() @@ -1693,7 +1693,7 @@ func BenchmarkDivLarge(b *testing.B) { benchmarkDiv(b, Large) } func BenchmarkDivHuge(b *testing.B) { benchmarkDiv(b, Huge) } func benchmarkDivTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) dst := randomSlice(size, src) @@ -1708,7 +1708,7 @@ func BenchmarkDivToLarge(b *testing.B) { benchmarkDivTo(b, Large) } func BenchmarkDivToHuge(b *testing.B) { benchmarkDivTo(b, Huge) } func benchmarkSub(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) b.ResetTimer() @@ -1722,7 +1722,7 @@ func BenchmarkSubLarge(b *testing.B) { benchmarkSub(b, Large) } func BenchmarkSubHuge(b *testing.B) { benchmarkSub(b, Huge) } func benchmarkSubTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) dst := randomSlice(size, src) @@ -1737,7 +1737,7 @@ func BenchmarkSubToLarge(b *testing.B) { benchmarkSubTo(b, Large) } func BenchmarkSubToHuge(b *testing.B) { benchmarkSubTo(b, Huge) } func benchmarkLogSumExp(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -1750,7 +1750,7 @@ func BenchmarkLogSumExpLarge(b *testing.B) { benchmarkLogSumExp(b, Large) } func BenchmarkLogSumExpHuge(b *testing.B) { benchmarkLogSumExp(b, Huge) } func benchmarkDot(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s1 := randomSlice(size, src) s2 := randomSlice(size, src) b.ResetTimer() @@ -1764,7 +1764,7 @@ func BenchmarkDotLarge(b *testing.B) { benchmarkDot(b, Large) } func BenchmarkDotHuge(b *testing.B) { benchmarkDot(b, Huge) } func benchmarkAddScaledTo(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) dst := randomSlice(size, src) y := randomSlice(size, src) s := randomSlice(size, src) @@ -1779,7 +1779,7 @@ func BenchmarkAddScaledToLarge(b *testing.B) { benchmarkAddScaledTo(b, Large) } func BenchmarkAddScaledToHuge(b *testing.B) { benchmarkAddScaledTo(b, Huge) } func benchmarkScale(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) dst := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i += 2 { @@ -1793,7 +1793,7 @@ func BenchmarkScaleLarge(b *testing.B) { benchmarkScale(b, Large) } func BenchmarkScaleHuge(b *testing.B) { benchmarkScale(b, Huge) } func benchmarkNorm2(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -1806,7 +1806,7 @@ func BenchmarkNorm2Large(b *testing.B) { benchmarkNorm2(b, Large) } func BenchmarkNorm2Huge(b *testing.B) { benchmarkNorm2(b, Huge) } func benchmarkSumCompensated(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -1820,7 +1820,7 @@ func BenchmarkSumCompensatedLarge(b *testing.B) { benchmarkSumCompensated(b, La func BenchmarkSumCompensatedHuge(b *testing.B) { benchmarkSumCompensated(b, Huge) } func benchmarkSum(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -1834,7 +1834,7 @@ func BenchmarkSumLarge(b *testing.B) { benchmarkSum(b, Large) } func BenchmarkSumHuge(b *testing.B) { benchmarkSum(b, Huge) } func benchmarkReverse(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) s := randomSlice(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/graph/coloring/coloring.go b/graph/coloring/coloring.go index dd7ba9f6..804cbb62 100644 --- a/graph/coloring/coloring.go +++ b/graph/coloring/coloring.go @@ -9,6 +9,7 @@ package coloring import ( "errors" + "math/rand/v2" "slices" "sort" @@ -16,7 +17,6 @@ import ( "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/topo" - "gonum.org/v1/gonum/internal/rand" ) // ErrInvalidPartialColoring is returned when a partial coloring diff --git a/graph/coloring/coloring_test.go b/graph/coloring/coloring_test.go index 5c4308cd..6b30b346 100644 --- a/graph/coloring/coloring_test.go +++ b/graph/coloring/coloring_test.go @@ -7,6 +7,7 @@ package coloring import ( "context" "flag" + "math/rand/v2" "testing" "time" @@ -14,7 +15,6 @@ import ( "gonum.org/v1/gonum/graph/encoding/graph6" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" ) var runLong = flag.Bool("color.long", false, "run long exact coloring tests") @@ -511,7 +511,7 @@ func TestRandomized(t *testing.T) { for seed := uint64(1); seed <= 1000; seed++ { for _, test := range coloringTests { for _, partial := range []map[int64]int{nil, test.partial} { - k, colors, err := Randomized(test.g, partial, rand.NewSource(seed)) + k, colors, err := Randomized(test.g, partial, rand.NewPCG(seed, seed)) if partial == nil && k != test.colors && !test.randomized.Has(k) { t.Errorf("unexpected chromatic number for %q with seed=%d: got:%d want:%d or in %v\ncolors:%v", @@ -767,7 +767,7 @@ func BenchmarkColoring(b *testing.B) { }) } b.Run("Randomized", func(b *testing.B) { - rnd := rand.NewSource(1) + rnd := rand.NewPCG(1, 1) b.ResetTimer() for i := 0; i < b.N; i++ { _, _, err := Randomized(bench.g, nil, rnd) diff --git a/graph/community/bisect.go b/graph/community/bisect.go index 4a20d5f7..b694e178 100644 --- a/graph/community/bisect.go +++ b/graph/community/bisect.go @@ -8,9 +8,9 @@ import ( "errors" "fmt" "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" - "gonum.org/v1/gonum/internal/rand" ) // Interval is an interval of resolutions with a common score. diff --git a/graph/community/bisect_example_test.go b/graph/community/bisect_example_test.go index 6692e777..cdcc6851 100644 --- a/graph/community/bisect_example_test.go +++ b/graph/community/bisect_example_test.go @@ -7,11 +7,11 @@ package community_test import ( "fmt" "log" + "math/rand/v2" "gonum.org/v1/gonum/graph/community" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) func ExampleProfile_simple() { @@ -19,7 +19,7 @@ func ExampleProfile_simple() { // Since this is a randomized algorithm we use a defined random source to ensure // consistency between test runs. In practice, results will not differ greatly // between runs with different PRNG seeds. - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) // Create dumbell graph: // @@ -173,7 +173,7 @@ func ExampleProfile_multiplex() { // algorithm. Since this is a randomized algorithm we use a defined random source // to ensure consistency between test runs. In practice, results will not differ // greatly between runs with different PRNG seeds. - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) // The undirected graphs, friends and enemies, are the political relationships // in the Middle East as described in the Slate article: @@ -209,10 +209,10 @@ func ExampleProfile_multiplex() { // 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.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=[11 25.2] + // Low:1.2 High:1.6 Score:10 Communities:[[0 3 4 5 6 10] [1 7 9 12] [2 8 11]] Q=[10.7 26] // 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] + // Low:1.8 High:2.3 Score:-6 Communities:[[0 2 3 4 5 6 8 10 11] [1 7 9 12]] Q=[-5.02 57.5] // Low:2.3 High:2.4 Score:-10 Communities:[[0 1 2 6 7 8 9 11 12] [3 4 5 10]] Q=[-11.2 79] // Low:2.4 High:4.3 Score:-52 Communities:[[0 1 2 3 4 5 6 7 8 9 10 11 12]] Q=[-46.1 117] // Low:4.3 High:10 Score:-54 Communities:[[0 1 2 3 4 6 7 8 9 10 11 12] [5]] Q=[-82 254] diff --git a/graph/community/bisect_test.go b/graph/community/bisect_test.go index b7eee994..8611647a 100644 --- a/graph/community/bisect_test.go +++ b/graph/community/bisect_test.go @@ -5,6 +5,7 @@ package community import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" @@ -46,7 +47,7 @@ func TestProfileWeightedUndirected(t *testing.T) { } func testProfileUndirected(t *testing.T, test communityUndirectedQTest, g graph.Undirected) { - fn := ModularScore(g, Weight, 10, nil) + fn := ModularScore(g, Weight, 10, rand.NewPCG(1, 1)) p, err := Profile(fn, true, 1e-3, 0.1, 10) if err != nil { t.Errorf("%s: unexpected error: %v", test.name, err) @@ -105,7 +106,7 @@ func TestProfileWeightedDirected(t *testing.T) { } func testProfileDirected(t *testing.T, test communityDirectedQTest, g graph.Directed) { - fn := ModularScore(g, Weight, 10, nil) + fn := ModularScore(g, Weight, 10, rand.NewPCG(1, 1)) p, err := Profile(fn, true, 1e-3, 0.1, 10) if err != nil { t.Errorf("%s: unexpected error: %v", test.name, err) diff --git a/graph/community/louvain_common.go b/graph/community/louvain_common.go index 7d80459e..b2edf944 100644 --- a/graph/community/louvain_common.go +++ b/graph/community/louvain_common.go @@ -6,11 +6,11 @@ package community import ( "fmt" + "math/rand/v2" "slices" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" - "gonum.org/v1/gonum/internal/rand" ) // Q returns the modularity Q score of the graph g subdivided into the @@ -71,7 +71,7 @@ type ReducedGraph interface { } // Modularize returns the hierarchical modularization of g at the given resolution -// using the Louvain algorithm. If src is nil, rand.Intn is used as the random +// using the Louvain algorithm. If src is nil, rand.IntN is used as the random // generator. Modularize will panic if g has any edge with negative edge weight. // // If g is undirected it is modularised to minimise @@ -186,7 +186,7 @@ type ReducedMultiplex interface { // ModularizeMultiplex returns the hierarchical modularization of g at the given resolution // using the Louvain algorithm. If all is true and g have negatively weighted layers, all -// communities will be searched during the modularization. If src is nil, rand.Intn is +// communities will be searched during the modularization. If src is nil, rand.IntN is // used as the random generator. ModularizeMultiplex will panic if g has any edge with // edge weight that does not sign-match the layer weight. // diff --git a/graph/community/louvain_directed.go b/graph/community/louvain_directed.go index 3c5241ca..8f8aa8e3 100644 --- a/graph/community/louvain_directed.go +++ b/graph/community/louvain_directed.go @@ -6,13 +6,13 @@ package community import ( "math" + "math/rand/v2" "slices" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) // qDirected returns the modularity Q score of the graph g subdivided into the @@ -77,7 +77,7 @@ func qDirected(g graph.Directed, communities [][]graph.Node, resolution float64) } // louvainDirected returns the hierarchical modularization of g at the given -// resolution using the Louvain algorithm. If src is nil, rand.Intn is used +// resolution using the Louvain algorithm. If src is nil, rand.IntN is used // as the random generator. louvainDirected will panic if g has any edge with negative // edge weight. func louvainDirected(g graph.Directed, resolution float64, src rand.Source) ReducedGraph { @@ -85,9 +85,9 @@ func louvainDirected(g graph.Directed, resolution float64, src rand.Source) Redu // of the algorithm used here. c := reduceDirected(g, nil) - rnd := rand.Intn + rnd := rand.IntN if src != nil { - rnd = rand.New(src).Intn + rnd = rand.New(src).IntN } for { l := newDirectedLocalMover(c, c.communities, resolution) diff --git a/graph/community/louvain_directed_multiplex.go b/graph/community/louvain_directed_multiplex.go index 8d56f04b..7118848a 100644 --- a/graph/community/louvain_directed_multiplex.go +++ b/graph/community/louvain_directed_multiplex.go @@ -7,12 +7,12 @@ package community import ( "fmt" "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) // DirectedMultiplex is a directed multiplex graph. @@ -166,7 +166,7 @@ func (g DirectedLayers) Layer(l int) graph.Directed { return g[l] } // louvainDirectedMultiplex returns the hierarchical modularization of g at the given resolution // using the Louvain algorithm. If all is true and g has negatively weighted layers, all -// communities will be searched during the modularization. If src is nil, rand.Intn is +// communities will be searched during the modularization. If src is nil, rand.IntN is // used as the random generator. louvainDirectedMultiplex will panic if g has any edge with // edge weight that does not sign-match the layer weight. // @@ -183,9 +183,9 @@ func louvainDirectedMultiplex(g DirectedMultiplex, weights, resolutions []float6 // of the algorithm used here. c := reduceDirectedMultiplex(g, nil, weights) - rnd := rand.Intn + rnd := rand.IntN if src != nil { - rnd = rand.New(src).Intn + rnd = rand.New(src).IntN } for { l := newDirectedMultiplexLocalMover(c, c.communities, weights, resolutions, all) diff --git a/graph/community/louvain_directed_multiplex_test.go b/graph/community/louvain_directed_multiplex_test.go index 3dd71bc8..55719b14 100644 --- a/graph/community/louvain_directed_multiplex_test.go +++ b/graph/community/louvain_directed_multiplex_test.go @@ -7,6 +7,7 @@ package community import ( "fmt" "math" + "math/rand/v2" "reflect" "slices" "testing" @@ -16,7 +17,6 @@ import ( "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) var communityDirectedMultiplexQTests = []struct { @@ -326,7 +326,7 @@ tests: continue } - rnd := rand.New(rand.NewSource(1)).Intn + rnd := rand.New(rand.NewPCG(1, 1)).IntN for _, structure := range test.structures { communityOf := make(map[int64]int) communities := make([][]graph.Node, len(structure.memberships)) @@ -588,7 +588,7 @@ func TestLouvainDirectedMultiplex(t *testing.T) { ) // Modularize is randomised so we do this to // ensure the level tests are consistent. - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < louvainIterations; i++ { r := ModularizeMultiplex(g, weights, nil, true, src).(*ReducedDirectedMultiplex) if q := floats.Sum(QMultiplex(r, nil, weights, nil)); q > bestQ || math.IsNaN(q) { @@ -689,7 +689,7 @@ func TestNonContiguousWeightedDirectedMultiplex(t *testing.T) { } func BenchmarkLouvainDirectedMultiplex(b *testing.B) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < b.N; i++ { ModularizeMultiplex(DirectedLayers{dupGraphDirected}, nil, nil, true, src) } diff --git a/graph/community/louvain_directed_test.go b/graph/community/louvain_directed_test.go index 8f576444..1b57d7af 100644 --- a/graph/community/louvain_directed_test.go +++ b/graph/community/louvain_directed_test.go @@ -6,6 +6,7 @@ package community import ( "math" + "math/rand/v2" "reflect" "slices" "testing" @@ -14,7 +15,6 @@ import ( "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) type communityDirectedQTest struct { @@ -90,13 +90,12 @@ var communityDirectedQTests = []communityDirectedQTest{ }, }, { - q: 0.3911232174331037, + q: 0.4037814452812049, 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(30)}, - {simple.Node(9), simple.Node(14), simple.Node(15), simple.Node(18), simple.Node(20), simple.Node(22), simple.Node(32), simple.Node(33)}, + {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(24), simple.Node(25), simple.Node(27), simple.Node(28), simple.Node(31)}, {simple.Node(26), simple.Node(29)}, }, @@ -166,7 +165,7 @@ var communityDirectedQTests = []communityDirectedQTest{ }, }, { - q: 0.3405612244897959, + q: 0.34056122448979587, 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)}, @@ -295,7 +294,7 @@ func TestCommunityDeltaQWeightedDirected(t *testing.T) { } func testCommunityDeltaQDirected(t *testing.T, test communityDirectedQTest, g graph.Directed) { - rnd := rand.New(rand.NewSource(1)).Intn + rnd := rand.New(rand.NewPCG(1, 1)).IntN for _, structure := range test.structures { communityOf := make(map[int64]int) communities := make([][]graph.Node, len(structure.memberships)) @@ -632,7 +631,7 @@ func testModularizeDirected(t *testing.T, test communityDirectedQTest, g graph.D ) // Modularize is randomised so we do this to // ensure the level tests are consistent. - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < louvainIterations; i++ { r := Modularize(g, 1, src).(*ReducedDirected) if q := Q(r, nil, 1); q > bestQ || math.IsNaN(q) { @@ -732,7 +731,7 @@ func TestNonContiguousWeightedDirected(t *testing.T) { } func BenchmarkLouvainDirected(b *testing.B) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < b.N; i++ { Modularize(dupGraphDirected, 1, src) } diff --git a/graph/community/louvain_test.go b/graph/community/louvain_test.go index cdf01dca..fbe67175 100644 --- a/graph/community/louvain_test.go +++ b/graph/community/louvain_test.go @@ -6,11 +6,11 @@ package community import ( "fmt" + "math/rand/v2" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/graphs/gen" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" ) // intset is an integer set. @@ -228,7 +228,7 @@ var ( ) func init() { - err := gen.Duplication(dupGraph, 1000, 0.8, 0.1, 0.5, rand.New(rand.NewSource(1))) + err := gen.Duplication(dupGraph, 1000, 0.8, 0.1, 0.5, rand.New(rand.NewPCG(1, 1))) if err != nil { panic(err) } diff --git a/graph/community/louvain_undirected.go b/graph/community/louvain_undirected.go index ad17cc52..c141a2f6 100644 --- a/graph/community/louvain_undirected.go +++ b/graph/community/louvain_undirected.go @@ -6,13 +6,13 @@ package community import ( "math" + "math/rand/v2" "slices" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) // qUndirected returns the modularity Q score of the graph g subdivided into the @@ -73,7 +73,7 @@ func qUndirected(g graph.Undirected, communities [][]graph.Node, resolution floa } // louvainUndirected returns the hierarchical modularization of g at the given -// resolution using the Louvain algorithm. If src is nil, rand.Intn is used as +// resolution using the Louvain algorithm. If src is nil, rand.IntN is used as // the random generator. louvainUndirected will panic if g has any edge with negative edge // weight. // @@ -83,9 +83,9 @@ func louvainUndirected(g graph.Undirected, resolution float64, src rand.Source) // of the algorithm used here. c := reduceUndirected(g, nil) - rnd := rand.Intn + rnd := rand.IntN if src != nil { - rnd = rand.New(src).Intn + rnd = rand.New(src).IntN } for { l := newUndirectedLocalMover(c, c.communities, resolution) diff --git a/graph/community/louvain_undirected_multiplex.go b/graph/community/louvain_undirected_multiplex.go index 90e040a3..d611ead0 100644 --- a/graph/community/louvain_undirected_multiplex.go +++ b/graph/community/louvain_undirected_multiplex.go @@ -7,12 +7,12 @@ package community import ( "fmt" "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) // UndirectedMultiplex is an undirected multiplex graph. @@ -162,7 +162,7 @@ func (g UndirectedLayers) Layer(l int) graph.Undirected { return g[l] } // louvainUndirectedMultiplex returns the hierarchical modularization of g at the given resolution // using the Louvain algorithm. If all is true and g has negatively weighted layers, all -// communities will be searched during the modularization. If src is nil, rand.Intn is +// communities will be searched during the modularization. If src is nil, rand.IntN is // used as the random generator. louvainUndirectedMultiplex will panic if g has any edge with // edge weight that does not sign-match the layer weight. // @@ -179,9 +179,9 @@ func louvainUndirectedMultiplex(g UndirectedMultiplex, weights, resolutions []fl // of the algorithm used here. c := reduceUndirectedMultiplex(g, nil, weights) - rnd := rand.Intn + rnd := rand.IntN if src != nil { - rnd = rand.New(src).Intn + rnd = rand.New(src).IntN } for { l := newUndirectedMultiplexLocalMover(c, c.communities, weights, resolutions, all) diff --git a/graph/community/louvain_undirected_multiplex_test.go b/graph/community/louvain_undirected_multiplex_test.go index da3c18c3..2360ff8e 100644 --- a/graph/community/louvain_undirected_multiplex_test.go +++ b/graph/community/louvain_undirected_multiplex_test.go @@ -7,6 +7,7 @@ package community import ( "fmt" "math" + "math/rand/v2" "reflect" "slices" "testing" @@ -16,7 +17,6 @@ import ( "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) var communityUndirectedMultiplexQTests = []struct { @@ -295,7 +295,7 @@ tests: continue } - rnd := rand.New(rand.NewSource(1)).Intn + rnd := rand.New(rand.NewPCG(1, 1)).IntN for _, structure := range test.structures { communityOf := make(map[int64]int) communities := make([][]graph.Node, len(structure.memberships)) @@ -557,7 +557,7 @@ func TestLouvainMultiplex(t *testing.T) { ) // Modularize is randomised so we do this to // ensure the level tests are consistent. - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < louvainIterations; i++ { r := ModularizeMultiplex(g, weights, nil, true, src).(*ReducedUndirectedMultiplex) if q := floats.Sum(QMultiplex(r, nil, weights, nil)); q > bestQ || math.IsNaN(q) { @@ -658,7 +658,7 @@ func TestNonContiguousWeightedUndirectedMultiplex(t *testing.T) { } func BenchmarkLouvainMultiplex(b *testing.B) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < b.N; i++ { ModularizeMultiplex(UndirectedLayers{dupGraph}, nil, nil, true, src) } diff --git a/graph/community/louvain_undirected_test.go b/graph/community/louvain_undirected_test.go index 82647ccf..f3f636c7 100644 --- a/graph/community/louvain_undirected_test.go +++ b/graph/community/louvain_undirected_test.go @@ -6,6 +6,7 @@ package community import ( "math" + "math/rand/v2" "reflect" "slices" "testing" @@ -14,7 +15,6 @@ import ( "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) type communityUndirectedQTest struct { @@ -356,7 +356,7 @@ func TestCommunityDeltaQWeightedUndirected(t *testing.T) { } func testCommunityDeltaQUndirected(t *testing.T, test communityUndirectedQTest, g graph.Undirected) { - rnd := rand.New(rand.NewSource(1)).Intn + rnd := rand.New(rand.NewPCG(1, 1)).IntN for _, structure := range test.structures { communityOf := make(map[int64]int) communities := make([][]graph.Node, len(structure.memberships)) @@ -693,7 +693,7 @@ func testModularizeUndirected(t *testing.T, test communityUndirectedQTest, g gra ) // Modularize is randomised so we do this to // ensure the level tests are consistent. - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < louvainIterations; i++ { r := Modularize(g, 1, src).(*ReducedUndirected) if q := Q(r, nil, 1); q > bestQ || math.IsNaN(q) { @@ -793,7 +793,7 @@ func TestNonContiguousWeightedUndirected(t *testing.T) { } func BenchmarkLouvain(b *testing.B) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i := 0; i < b.N; i++ { Modularize(dupGraph, 1, src) } diff --git a/graph/complement_test.go b/graph/complement_test.go index d8295f4f..8102c0bc 100644 --- a/graph/complement_test.go +++ b/graph/complement_test.go @@ -6,23 +6,23 @@ package graph_test import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/graphs/gen" "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" ) var complementTests = []struct { g graph.Graph }{ - {g: gnp(100, 0, rand.NewSource(1))}, - {g: gnp(100, 0.05, rand.NewSource(1))}, - {g: gnp(100, 0.5, rand.NewSource(1))}, - {g: gnp(100, 0.95, rand.NewSource(1))}, - {g: gnp(100, 1, rand.NewSource(1))}, + {g: gnp(100, 0, rand.NewPCG(1, 1))}, + {g: gnp(100, 0.05, rand.NewPCG(1, 1))}, + {g: gnp(100, 0.5, rand.NewPCG(1, 1))}, + {g: gnp(100, 0.95, rand.NewPCG(1, 1))}, + {g: gnp(100, 1, rand.NewPCG(1, 1))}, } func TestComplement(t *testing.T) { diff --git a/graph/encoding/dot/bench_test.go b/graph/encoding/dot/bench_test.go index b7a82a51..c6b0e93c 100644 --- a/graph/encoding/dot/bench_test.go +++ b/graph/encoding/dot/bench_test.go @@ -6,13 +6,13 @@ package dot import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/graphs/gen" "gonum.org/v1/gonum/graph/multi" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" ) var ( @@ -33,7 +33,7 @@ var ( func gnpDirected(n int, p float64) graph.Directed { g := simple.NewDirectedGraph() - err := gen.Gnp(g, n, p, rand.NewSource(1)) + err := gen.Gnp(g, n, p, rand.NewPCG(1, 1)) if err != nil { panic(fmt.Sprintf("dot: bad test: %v", err)) } @@ -42,7 +42,7 @@ func gnpDirected(n int, p float64) graph.Directed { func powerLawMultiDirected(n, d int) graph.DirectedMultigraph { g := multi.NewDirectedGraph() - err := gen.PowerLaw(g, n, d, rand.NewSource(1)) + err := gen.PowerLaw(g, n, d, rand.NewPCG(1, 1)) if err != nil { panic(fmt.Sprintf("dot: bad test: %v", err)) } diff --git a/graph/flow/control_flow_bench_test.go b/graph/flow/control_flow_bench_test.go index 5ac8d0d1..216ed433 100644 --- a/graph/flow/control_flow_bench_test.go +++ b/graph/flow/control_flow_bench_test.go @@ -8,6 +8,7 @@ import ( "flag" "fmt" "math" + "math/rand/v2" "os" "path/filepath" "strings" @@ -20,7 +21,6 @@ import ( "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/graph/topo" - "gonum.org/v1/gonum/internal/rand" ) var slta = flag.Bool("slta", false, "specify DominatorsSLT benchmark") @@ -165,7 +165,7 @@ func BenchmarkRandomGraphDominators(b *testing.B) { } for _, test := range tests { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) g := test.g() // Guess a maximally expensive entry to the graph. @@ -177,7 +177,7 @@ func BenchmarkRandomGraphDominators(b *testing.B) { // in the first position of the error. Pick one // of the nodes at random. unordered := err.(topo.Unorderable) - root = unordered[0][rnd.Intn(len(unordered[0]))] + root = unordered[0][rnd.IntN(len(unordered[0]))] } if root == nil { b.Error("no entry node label for graph") @@ -198,11 +198,11 @@ func BenchmarkRandomGraphDominators(b *testing.B) { for i, v := range sort[1:] { u := sort[i] if u == nil { - u = unordered[ui][rnd.Intn(len(unordered[ui]))] + u = unordered[ui][rnd.IntN(len(unordered[ui]))] ui++ } if v == nil { - v = unordered[ui][rnd.Intn(len(unordered[ui]))] + v = unordered[ui][rnd.IntN(len(unordered[ui]))] } if !g.HasEdgeFromTo(u.ID(), v.ID()) { g.SetEdge(g.NewEdge(u, v)) @@ -225,7 +225,7 @@ func BenchmarkRandomGraphDominators(b *testing.B) { func gnm(n, m int) func() *simple.DirectedGraph { return func() *simple.DirectedGraph { dg := simple.NewDirectedGraph() - err := gen.Gnm(dg, n, m, rand.New(rand.NewSource(1))) + err := gen.Gnm(dg, n, m, rand.New(rand.NewPCG(1, 1))) if err != nil { panic(err) } @@ -238,13 +238,13 @@ func gnm(n, m int) func() *simple.DirectedGraph { func duplication(n int, delta, alpha, sigma float64) func() *simple.DirectedGraph { return func() *simple.DirectedGraph { g := undirected{simple.NewDirectedGraph()} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) err := gen.Duplication(g, n, delta, alpha, sigma, rnd) if err != nil { panic(err) } for _, e := range graph.EdgesOf(g.Edges()) { - if rnd.Intn(2) == 0 { + if rnd.IntN(2) == 0 { g.RemoveEdge(e.From().ID(), e.To().ID()) } } diff --git a/graph/formats/rdf/graph_test.go b/graph/formats/rdf/graph_test.go index 0cc2cb47..89190ad8 100644 --- a/graph/formats/rdf/graph_test.go +++ b/graph/formats/rdf/graph_test.go @@ -7,6 +7,7 @@ package rdf_test import ( "io" "math" + "math/rand/v2" "slices" "strings" "testing" @@ -19,7 +20,6 @@ import ( "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/multi" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) func graphBuilder(nodes []graph.Node, edges []testgraph.WeightedLine, _, _ float64) (g graph.Graph, n []graph.Node, e []testgraph.Edge, s, a float64, ok bool) { @@ -88,10 +88,10 @@ func TestGraph(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -116,10 +116,10 @@ func TestGraph(t *testing.T) { } it.Reset() var lines []graph.Line - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/formats/rdf/iso_canonical_test.go b/graph/formats/rdf/iso_canonical_test.go index ce68ae2d..467f879c 100644 --- a/graph/formats/rdf/iso_canonical_test.go +++ b/graph/formats/rdf/iso_canonical_test.go @@ -11,6 +11,7 @@ import ( "fmt" "hash" "io" + "math/rand/v2" "os" "path/filepath" "reflect" @@ -19,8 +20,6 @@ import ( "testing" "text/tabwriter" "time" - - "gonum.org/v1/gonum/internal/rand" ) var ( @@ -53,7 +52,7 @@ func TestIsoCanonicalHashes(t *testing.T) { for _, path := range glob { name := filepath.Base(path) t.Run(name, func(t *testing.T) { - src := rand.NewSource(seed) + src := rand.NewPCG(seed, seed) f, err := os.Open(path) if err != nil { diff --git a/graph/formats/rdf/query_test.go b/graph/formats/rdf/query_test.go index 46b59267..3df90ee9 100644 --- a/graph/formats/rdf/query_test.go +++ b/graph/formats/rdf/query_test.go @@ -6,12 +6,12 @@ package rdf import ( "io" + "math/rand/v2" "reflect" "strings" "testing" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) var andTests = []struct { @@ -52,7 +52,7 @@ var andTests = []struct { } func TestQueryAnd(t *testing.T) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, test := range andTests { for i := 0; i < 10; i++ { a := Query{terms: permutedTerms(test.a, src)} @@ -108,7 +108,7 @@ var orTests = []struct { } func TestQueryOr(t *testing.T) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, test := range orTests { for i := 0; i < 10; i++ { a := Query{terms: permutedTerms(test.a, src)} @@ -164,7 +164,7 @@ var notTests = []struct { } func TestQueryNot(t *testing.T) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, test := range notTests { for i := 0; i < 10; i++ { a := Query{terms: permutedTerms(test.a, src)} @@ -271,7 +271,7 @@ var uniqueTests = []struct { } func TestQueryUnique(t *testing.T) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, test := range uniqueTests { for i := 0; i < 10; i++ { a := Query{terms: permutedTerms(test.in, src)} diff --git a/graph/graphs/gen/batagelj_brandes.go b/graph/graphs/gen/batagelj_brandes.go index af449bf0..643e583b 100644 --- a/graph/graphs/gen/batagelj_brandes.go +++ b/graph/graphs/gen/batagelj_brandes.go @@ -10,9 +10,9 @@ package gen import ( "fmt" "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" - "gonum.org/v1/gonum/internal/rand" ) // Gnp constructs a Gilbert’s model subgraph in the destination, dst, of order n. Edges @@ -77,7 +77,7 @@ func Gnp(dst graph.Builder, n int, p float64, src rand.Source) error { // Gnm constructs a Erdős-Rényi model subgraph in the destination, dst, of // order n and size m. If src is not nil it is used as the random source, -// otherwise rand.Intn is used. The graph is constructed in O(m) expected +// otherwise rand.IntN is used. The graph is constructed in O(m) expected // time for m ≤ (n choose 2)/2. func Gnm(dst GraphBuilder, n, m int, src rand.Source) error { if m == 0 { @@ -101,9 +101,9 @@ func Gnm(dst GraphBuilder, n, m int, src rand.Source) error { var rnd func(int) int if src == nil { - rnd = rand.Intn + rnd = rand.IntN } else { - rnd = rand.New(src).Intn + rnd = rand.New(src).IntN } nodes := make([]graph.Node, n) @@ -166,11 +166,11 @@ func SmallWorldsBB(dst GraphBuilder, n, d int, p float64, src rand.Source) error ) if src == nil { rnd = rand.Float64 - rndN = rand.Intn + rndN = rand.IntN } else { r := rand.New(src) rnd = r.Float64 - rndN = r.Intn + rndN = r.IntN } hasEdge := dst.HasEdgeBetween @@ -309,7 +309,7 @@ func edgeNodesFor(i int, nodes []graph.Node) (v, w graph.Node) { // PowerLaw constructs a power-law degree graph by preferential attachment in dst // with n nodes and minimum degree d. PowerLaw does not consider nodes in dst prior -// to the call. If src is not nil it is used as the random source, otherwise rand.Intn +// to the call. If src is not nil it is used as the random source, otherwise rand.IntN // is used. // The graph is constructed in O(nd) — O(n+m) — time. // @@ -320,9 +320,9 @@ func PowerLaw(dst graph.MultigraphBuilder, n, d int, src rand.Source) error { } var rnd func(int) int if src == nil { - rnd = rand.Intn + rnd = rand.IntN } else { - rnd = rand.New(src).Intn + rnd = rand.New(src).IntN } m := make([]graph.Node, 2*n*d) @@ -345,7 +345,7 @@ func PowerLaw(dst graph.MultigraphBuilder, n, d int, src rand.Source) error { // BipartitePowerLaw constructs a bipartite power-law degree graph by preferential attachment // in dst with 2×n nodes and minimum degree d. BipartitePowerLaw does not consider nodes in // dst prior to the call. The two partitions are returned in p1 and p2. If src is not nil it is -// used as the random source, otherwise rand.Intn is used. +// used as the random source, otherwise rand.IntN is used. // The graph is constructed in O(nd) — O(n+m) — time. // // The algorithm used is described in http://algo.uni-konstanz.de/publications/bb-eglrn-05.pdf @@ -355,9 +355,9 @@ func BipartitePowerLaw(dst graph.MultigraphBuilder, n, d int, src rand.Source) ( } var rnd func(int) int if src == nil { - rnd = rand.Intn + rnd = rand.IntN } else { - rnd = rand.New(src).Intn + rnd = rand.New(src).IntN } p := make([]graph.Node, 2*n) diff --git a/graph/graphs/gen/duplication.go b/graph/graphs/gen/duplication.go index 0efcd94c..f1d1eeb9 100644 --- a/graph/graphs/gen/duplication.go +++ b/graph/graphs/gen/duplication.go @@ -7,10 +7,10 @@ package gen import ( "fmt" "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) // UndirectedMutator is an undirected graph builder that can remove edges. @@ -47,11 +47,11 @@ func Duplication(dst UndirectedMutator, n int, delta, alpha, sigma float64, src ) if src == nil { rnd = rand.Float64 - rndN = rand.Intn + rndN = rand.IntN } else { r := rand.New(src) rnd = r.Float64 - rndN = r.Intn + rndN = r.IntN } nodes := graph.NodesOf(dst.Nodes()) diff --git a/graph/graphs/gen/holme_kim.go b/graph/graphs/gen/holme_kim.go index 74500541..ada55203 100644 --- a/graph/graphs/gen/holme_kim.go +++ b/graph/graphs/gen/holme_kim.go @@ -7,10 +7,10 @@ package gen import ( "errors" "fmt" + "math/rand/v2" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat/sampleuv" ) @@ -20,7 +20,7 @@ import ( // additional edges joining existing nodes with probability proportional to the nodes' // degrees. The edges are formed as a triad with probability, p. // If src is not nil it is used as the random source, otherwise rand.Float64 and -// rand.Intn are used for the random number generators. +// rand.IntN are used for the random number generators. // // The algorithm is essentially as described in http://arxiv.org/abs/cond-mat/0110452. func TunableClusteringScaleFree(dst graph.UndirectedBuilder, n, m int, p float64, src rand.Source) error { @@ -37,11 +37,11 @@ func TunableClusteringScaleFree(dst graph.UndirectedBuilder, n, m int, p float64 ) if src == nil { rnd = rand.Float64 - rndN = rand.Intn + rndN = rand.IntN } else { r := rand.New(src) rnd = r.Float64 - rndN = r.Intn + rndN = r.IntN } // Initial condition. diff --git a/graph/graphs/gen/small_world.go b/graph/graphs/gen/small_world.go index 404d9d31..626db5d8 100644 --- a/graph/graphs/gen/small_world.go +++ b/graph/graphs/gen/small_world.go @@ -8,9 +8,9 @@ import ( "errors" "fmt" "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat/sampleuv" ) diff --git a/graph/layout/eades.go b/graph/layout/eades.go index ae14918a..bc14a51e 100644 --- a/graph/layout/eades.go +++ b/graph/layout/eades.go @@ -6,9 +6,9 @@ package layout import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/spatial/barneshut" "gonum.org/v1/gonum/spatial/r2" ) diff --git a/graph/layout/eades_test.go b/graph/layout/eades_test.go index 049f95f9..7aa8cdd8 100644 --- a/graph/layout/eades_test.go +++ b/graph/layout/eades_test.go @@ -5,12 +5,12 @@ package layout_test import ( + "math/rand/v2" "path/filepath" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/spatial/r2" "gonum.org/v1/plot" "gonum.org/v1/plot/vg" @@ -37,7 +37,7 @@ func TestEadesR2(t *testing.T) { } return orderedGraph{g} }(), - param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewSource(1)}, + param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewPCG(1, 1)}, wantIters: 100, }, { @@ -55,7 +55,7 @@ func TestEadesR2(t *testing.T) { } return orderedGraph{g} }(), - param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewSource(1)}, + param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewPCG(1, 1)}, wantIters: 100, }, { @@ -75,7 +75,7 @@ func TestEadesR2(t *testing.T) { } return orderedGraph{g} }(), - param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewSource(1)}, + param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewPCG(1, 1)}, wantIters: 100, }, { @@ -101,7 +101,7 @@ func TestEadesR2(t *testing.T) { } return orderedGraph{g} }(), - param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewSource(1)}, + param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewPCG(1, 1)}, wantIters: 100, }, { @@ -130,7 +130,7 @@ func TestEadesR2(t *testing.T) { } return orderedGraph{g} }(), - param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewSource(1)}, + param: EadesR2{Repulsion: 1, Rate: 0.1, Updates: 100, Theta: 0.1, Src: rand.NewPCG(1, 1)}, wantIters: 100, }, { @@ -161,7 +161,7 @@ func TestEadesR2(t *testing.T) { } return orderedGraph{g} }(), - param: EadesR2{Repulsion: 1, Rate: 1, Updates: 100, Theta: 0.1, Src: rand.NewSource(1)}, + param: EadesR2{Repulsion: 1, Rate: 1, Updates: 100, Theta: 0.1, Src: rand.NewPCG(1, 1)}, wantIters: 96, }, @@ -191,7 +191,7 @@ func TestEadesR2(t *testing.T) { } return orderedGraph{g} }(), - param: EadesR2{Repulsion: 1, Rate: 0.01, Updates: 100, Theta: 0.1, Src: rand.NewSource(1)}, + param: EadesR2{Repulsion: 1, Rate: 0.01, Updates: 100, Theta: 0.1, Src: rand.NewPCG(1, 1)}, wantIters: 100, }, } diff --git a/graph/multi/directed_test.go b/graph/multi/directed_test.go index 73f79af4..11e7da00 100644 --- a/graph/multi/directed_test.go +++ b/graph/multi/directed_test.go @@ -6,6 +6,7 @@ package multi_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" @@ -13,7 +14,6 @@ import ( "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/multi" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) func directedBuilder(nodes []graph.Node, edges []testgraph.WeightedLine, _, _ float64) (g graph.Graph, n []graph.Node, e []testgraph.Edge, s, a float64, ok bool) { @@ -86,10 +86,10 @@ func TestDirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -114,10 +114,10 @@ func TestDirected(t *testing.T) { } it.Reset() var lines []graph.Line - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/multi/undirected_test.go b/graph/multi/undirected_test.go index 78c602b8..73f7163f 100644 --- a/graph/multi/undirected_test.go +++ b/graph/multi/undirected_test.go @@ -6,6 +6,7 @@ package multi_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" @@ -13,7 +14,6 @@ import ( "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/multi" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) const ( @@ -91,10 +91,10 @@ func TestUndirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -119,10 +119,10 @@ func TestUndirected(t *testing.T) { } it.Reset() var lines []graph.Line - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/multi/weighted_directed_test.go b/graph/multi/weighted_directed_test.go index dec55d39..4e916e1a 100644 --- a/graph/multi/weighted_directed_test.go +++ b/graph/multi/weighted_directed_test.go @@ -5,6 +5,7 @@ package multi_test import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" @@ -12,7 +13,6 @@ import ( "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/multi" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) func weightedDirectedBuilder(nodes []graph.Node, edges []testgraph.WeightedLine, self, absent float64) (g graph.Graph, n []graph.Node, e []testgraph.Edge, s, a float64, ok bool) { @@ -102,10 +102,10 @@ func TestWeightedDirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -131,10 +131,10 @@ func TestWeightedDirected(t *testing.T) { } it.Reset() var lines []graph.Line - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/multi/weighted_undirected_test.go b/graph/multi/weighted_undirected_test.go index 251a4a1c..3f42c786 100644 --- a/graph/multi/weighted_undirected_test.go +++ b/graph/multi/weighted_undirected_test.go @@ -5,6 +5,7 @@ package multi_test import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" @@ -12,7 +13,6 @@ import ( "gonum.org/v1/gonum/graph/iterator" "gonum.org/v1/gonum/graph/multi" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) func weightedUndirectedBuilder(nodes []graph.Node, edges []testgraph.WeightedLine, self, absent float64) (g graph.Graph, n []graph.Node, e []testgraph.Edge, s, a float64, ok bool) { @@ -102,10 +102,10 @@ func TestWeightedUndirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -131,10 +131,10 @@ func TestWeightedUndirected(t *testing.T) { } it.Reset() var lines []graph.Line - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/network/page.go b/graph/network/page.go index 34e1c6b0..8f06c82d 100644 --- a/graph/network/page.go +++ b/graph/network/page.go @@ -6,10 +6,10 @@ package network import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/graph" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) diff --git a/graph/path/johnson_apsp.go b/graph/path/johnson_apsp.go index 2a3d03e3..5008b764 100644 --- a/graph/path/johnson_apsp.go +++ b/graph/path/johnson_apsp.go @@ -6,10 +6,10 @@ package path import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" ) // JohnsonAllPaths returns a shortest-path tree for shortest paths in the graph g. @@ -32,7 +32,7 @@ func JohnsonAllPaths(g graph.Graph) (paths AllShortest, ok bool) { for { // Choose a random node ID until we find // one that is not in g. - q = sign * rand.Int63() + q = sign * rand.Int64() if _, exists := paths.indexOf[q]; !exists { break } diff --git a/graph/path/shortest.go b/graph/path/shortest.go index 5de03a3a..d8138d67 100644 --- a/graph/path/shortest.go +++ b/graph/path/shortest.go @@ -6,12 +6,12 @@ package path import ( "math" + "math/rand/v2" "slices" "gonum.org/v1/gonum/floats/scalar" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -354,7 +354,7 @@ func (p ShortestAlts) To(vid int64) (path []graph.Node, weight float64, unique b var next int if len(c) != 1 { unique = false - next = c[rand.Intn(len(c))] + next = c[rand.IntN(len(c))] } else { next = c[0] } @@ -382,7 +382,7 @@ func (p ShortestAlts) To(vid int64) (path []graph.Node, weight float64, unique b c := p.next[to] if len(c) != 1 { unique = false - next = c[rand.Intn(len(c))] + next = c[rand.IntN(len(c))] } else { next = c[0] } @@ -659,7 +659,7 @@ func (p AllShortest) Between(uid, vid int64) (path []graph.Node, weight float64, c := p.at(from, to) if len(c) != 1 { unique = false - next = c[rand.Intn(len(c))] + next = c[rand.IntN(len(c))] } else { next = c[0] } diff --git a/graph/path/shortest_test.go b/graph/path/shortest_test.go index 7c3d204e..5563fef1 100644 --- a/graph/path/shortest_test.go +++ b/graph/path/shortest_test.go @@ -7,6 +7,7 @@ package path import ( "fmt" "math" + "math/rand/v2" "reflect" "slices" "testing" @@ -15,7 +16,6 @@ import ( "gonum.org/v1/gonum/graph/graphs/gen" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) var shortestTests = []struct { @@ -35,7 +35,7 @@ func TestShortestAlts(t *testing.T) { for _, test := range shortestTests { t.Run(fmt.Sprintf("AllTo_%d×%d|%v", test.n, test.d, test.p), func(t *testing.T) { g := simple.NewDirectedGraph() - gen.SmallWorldsBB(g, test.n, test.d, test.p, rand.New(rand.NewSource(test.seed))) + gen.SmallWorldsBB(g, test.n, test.d, test.p, rand.New(rand.NewPCG(test.seed, test.seed))) all := allShortest(DijkstraAllPaths(g)) for uid := int64(0); uid < int64(test.n); uid++ { @@ -82,7 +82,7 @@ func TestAllShortest(t *testing.T) { for _, test := range shortestTests { t.Run(fmt.Sprintf("AllBetween_%d×%d|%v", test.n, test.d, test.p), func(t *testing.T) { g := simple.NewDirectedGraph() - gen.SmallWorldsBB(g, test.n, test.d, test.p, rand.New(rand.NewSource(test.seed))) + gen.SmallWorldsBB(g, test.n, test.d, test.p, rand.New(rand.NewPCG(test.seed, test.seed))) p := DijkstraAllPaths(g) for uid := int64(0); uid < int64(test.n); uid++ { @@ -221,7 +221,7 @@ var shortestBenchmarks = []struct { func BenchmarkShortestAlts(b *testing.B) { for _, bench := range shortestBenchmarks { g := simple.NewDirectedGraph() - gen.SmallWorldsBB(g, bench.n, bench.d, bench.p, rand.New(rand.NewSource(bench.seed))) + gen.SmallWorldsBB(g, bench.n, bench.d, bench.p, rand.New(rand.NewPCG(bench.seed, bench.seed))) // Find the widest path set. var ( @@ -282,7 +282,7 @@ func BenchmarkAllShortest(b *testing.B) { for _, bench := range shortestBenchmarks { for _, f := range shortestPathAlgs { g := simple.NewDirectedGraph() - gen.SmallWorldsBB(g, bench.n, bench.d, bench.p, rand.New(rand.NewSource(bench.seed))) + gen.SmallWorldsBB(g, bench.n, bench.d, bench.p, rand.New(rand.NewPCG(bench.seed, bench.seed))) p := f.fn(g) // Find the widest path set. diff --git a/graph/product/product_test.go b/graph/product/product_test.go index b1fa537f..4b8020dd 100644 --- a/graph/product/product_test.go +++ b/graph/product/product_test.go @@ -7,13 +7,13 @@ package product import ( "bytes" "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/encoding/dot" "gonum.org/v1/gonum/graph/graphs/gen" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" ) func (n Node) DOTID() string { return fmt.Sprintf("(%d,%d)", n.A.ID(), n.B.ID()) } @@ -69,10 +69,10 @@ var productTests = []struct { {name: "paths", a: path(-1), b: path(1)}, {name: "wp_mp", a: path(-2), b: path(2)}, {name: "wp_gp", a: left(), b: right()}, - {name: "gnp_2×2", a: gnp(2, 0.5, rand.NewSource(1)), b: gnp(2, 0.5, rand.NewSource(2))}, - {name: "gnp_2×3", a: gnp(2, 0.5, rand.NewSource(1)), b: gnp(3, 0.5, rand.NewSource(2))}, - {name: "gnp_3×3", a: gnp(3, 0.5, rand.NewSource(1)), b: gnp(3, 0.5, rand.NewSource(2))}, - {name: "gnp_4×4", a: gnp(4, 0.5, rand.NewSource(1)), b: gnp(4, 0.5, rand.NewSource(2))}, + {name: "gnp_2×2", a: gnp(2, 0.5, rand.NewPCG(1, 1)), b: gnp(2, 0.5, rand.NewPCG(2, 2))}, + {name: "gnp_2×3", a: gnp(2, 0.5, rand.NewPCG(1, 1)), b: gnp(3, 0.5, rand.NewPCG(2, 2))}, + {name: "gnp_3×3", a: gnp(3, 0.5, rand.NewPCG(1, 1)), b: gnp(3, 0.5, rand.NewPCG(2, 2))}, + {name: "gnp_4×4", a: gnp(4, 0.5, rand.NewPCG(1, 1)), b: gnp(4, 0.5, rand.NewPCG(2, 2))}, } func TestCartesian(t *testing.T) { @@ -373,7 +373,7 @@ func BenchmarkProduct(b *testing.B) { } { for _, p := range []float64{0.05, 0.25, 0.5, 0.75, 0.95} { for _, n := range bench.len { - src := rand.NewSource(uint64(seed)) + src := rand.NewPCG(uint64(seed), uint64(seed)) b.Run(fmt.Sprintf("%s %d-%.2f", bench.name, n, p), func(b *testing.B) { g1 := gnp(n, p, src) g2 := gnp(n, p, src) diff --git a/graph/set/uid/uid_test.go b/graph/set/uid/uid_test.go index 3e247b83..e8699058 100644 --- a/graph/set/uid/uid_test.go +++ b/graph/set/uid/uid_test.go @@ -7,13 +7,12 @@ package uid import ( "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestSetChurn(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) set := NewSet() @@ -29,7 +28,7 @@ func TestSetChurn(t *testing.T) { set.Use(id) seen[id] = true if rnd.Float64() < 0.01 { - j := rnd.Intn(10) + j := rnd.IntN(10) for id := range seen { set.Release(id) delete(seen, id) diff --git a/graph/simple/densegraph_test.go b/graph/simple/densegraph_test.go index 8ad0d3dc..b703fcfa 100644 --- a/graph/simple/densegraph_test.go +++ b/graph/simple/densegraph_test.go @@ -6,6 +6,7 @@ package simple_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" @@ -13,7 +14,6 @@ import ( "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/graph/testgraph" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) func isZeroContiguousSet(nodes []graph.Node) bool { @@ -129,11 +129,11 @@ func TestDirectedMatrix(t *testing.T) { }) t.Run("RemoveEdges", func(t *testing.T) { g := newEdgeShimDir{simple.NewDirectedMatrix(100, 0, 1, 0)} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) it := g.Nodes() for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -250,11 +250,11 @@ func TestDirectedMatrixFrom(t *testing.T) { }) t.Run("RemoveEdges", func(t *testing.T) { g := newEdgeShimDir{simple.NewDirectedMatrixFrom(makeNodes(numNodes), 0, 1, 0)} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) it := g.Nodes() for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -380,11 +380,11 @@ func TestUnirectedMatrix(t *testing.T) { }) t.Run("RemoveEdges", func(t *testing.T) { g := newEdgeShimUndir{simple.NewUndirectedMatrix(100, 0, 1, 0)} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) it := g.Nodes() for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -501,11 +501,11 @@ func TestUndirectedMatrixFrom(t *testing.T) { }) t.Run("RemoveEdges", func(t *testing.T) { g := newEdgeShimUndir{simple.NewUndirectedMatrixFrom(makeNodes(numNodes), 0, 1, 0)} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) it := g.Nodes() for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/simple/directed_test.go b/graph/simple/directed_test.go index f9d5436a..77fadb8b 100644 --- a/graph/simple/directed_test.go +++ b/graph/simple/directed_test.go @@ -6,13 +6,13 @@ package simple_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) func directedBuilder(nodes []graph.Node, edges []testgraph.WeightedLine, _, _ float64) (g graph.Graph, n []graph.Node, e []testgraph.Edge, s, a float64, ok bool) { @@ -91,10 +91,10 @@ func TestDirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -128,10 +128,10 @@ func TestDirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/simple/undirected_test.go b/graph/simple/undirected_test.go index ef5dcf42..eb1e6b7e 100644 --- a/graph/simple/undirected_test.go +++ b/graph/simple/undirected_test.go @@ -6,13 +6,13 @@ package simple_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) const ( @@ -96,10 +96,10 @@ func TestUndirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -133,10 +133,10 @@ func TestUndirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/simple/weighted_directed_test.go b/graph/simple/weighted_directed_test.go index 78ae2783..a4fa098b 100644 --- a/graph/simple/weighted_directed_test.go +++ b/graph/simple/weighted_directed_test.go @@ -6,13 +6,13 @@ package simple_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) func weightedDirectedBuilder(nodes []graph.Node, edges []testgraph.WeightedLine, self, absent float64) (g graph.Graph, n []graph.Node, e []testgraph.Edge, s, a float64, ok bool) { @@ -100,10 +100,10 @@ func TestWeightedDirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -139,10 +139,10 @@ func TestWeightedDirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/simple/weighted_undirected_test.go b/graph/simple/weighted_undirected_test.go index d3556c8e..c8dbf64e 100644 --- a/graph/simple/weighted_undirected_test.go +++ b/graph/simple/weighted_undirected_test.go @@ -6,13 +6,13 @@ package simple_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/graph/simple" "gonum.org/v1/gonum/graph/testgraph" - "gonum.org/v1/gonum/internal/rand" ) func weightedUndirectedBuilder(nodes []graph.Node, edges []testgraph.WeightedLine, self, absent float64) (g graph.Graph, n []graph.Node, e []testgraph.Edge, s, a float64, ok bool) { @@ -116,10 +116,10 @@ func TestWeightedUndirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() @@ -139,10 +139,10 @@ func TestWeightedUndirected(t *testing.T) { g.AddNode(it.Node()) } it.Reset() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for it.Next() { u := it.Node() - d := rnd.Intn(5) + d := rnd.IntN(5) vit := g.Nodes() for d >= 0 && vit.Next() { v := vit.Node() diff --git a/graph/testgraph/testgraph.go b/graph/testgraph/testgraph.go index cb7fab5c..dd7fe77a 100644 --- a/graph/testgraph/testgraph.go +++ b/graph/testgraph/testgraph.go @@ -9,6 +9,7 @@ package testgraph // import "gonum.org/v1/gonum/graph/testgraph" import ( "cmp" "fmt" + "math/rand/v2" "reflect" "slices" "testing" @@ -17,7 +18,6 @@ import ( "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/internal/set" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -1607,12 +1607,12 @@ func AddEdges(t *testing.T, n int, g EdgeAdder, newNode func(id int64) graph.Nod graph.Node } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < n; i++ { - u := newNode(rnd.Int63n(int64(n))) + u := newNode(rnd.Int64N(int64(n))) var v graph.Node for { - v = newNode(rnd.Int63n(int64(n))) + v = newNode(rnd.Int64N(int64(n))) if g.Edge(u.ID(), v.ID()) != nil { continue } @@ -1674,12 +1674,12 @@ func AddWeightedEdges(t *testing.T, n int, g WeightedEdgeAdder, w float64, newNo graph.Node } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < n; i++ { - u := newNode(rnd.Int63n(int64(n))) + u := newNode(rnd.Int64N(int64(n))) var v graph.Node for { - v = newNode(rnd.Int63n(int64(n))) + v = newNode(rnd.Int64N(int64(n))) if g.Edge(u.ID(), v.ID()) != nil { continue } @@ -1797,11 +1797,11 @@ func AddLines(t *testing.T, n int, g LineAdder, newNode func(id int64) graph.Nod graph.Node } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) seen := make(tripleInt64s) for i := 0; i < n; i++ { - u := newNode(rnd.Int63n(int64(n))) - v := newNode(rnd.Int63n(int64(n))) + u := newNode(rnd.Int64N(int64(n))) + v := newNode(rnd.Int64N(int64(n))) prev := g.Lines(u.ID(), v.ID()) l := g.NewLine(u, v) if seen.has(u.ID(), v.ID(), l.ID()) { @@ -1861,11 +1861,11 @@ func AddWeightedLines(t *testing.T, n int, g WeightedLineAdder, w float64, newNo graph.Node } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) seen := make(tripleInt64s) for i := 0; i < n; i++ { - u := newNode(rnd.Int63n(int64(n))) - v := newNode(rnd.Int63n(int64(n))) + u := newNode(rnd.Int64N(int64(n))) + v := newNode(rnd.Int64N(int64(n))) prev := g.Lines(u.ID(), v.ID()) l := g.NewWeightedLine(u, v, w) if seen.has(u.ID(), v.ID(), l.ID()) { @@ -2113,7 +2113,7 @@ func NewRandomNodes(n int, seed uint64, new func(id int64) graph.Node) *RandomNo seed: seed, newNode: new, - state: rand.New(rand.NewSource(seed)), + state: rand.New(rand.NewPCG(seed, seed)), seen: make(set.Ints[int64]), count: 0, } @@ -2135,7 +2135,7 @@ func (n *RandomNodes) Next() bool { if n.state.Float64() < 0.5 { sign *= -1 } - n.curr = sign * n.state.Int63() + n.curr = sign * n.state.Int64() if !n.seen.Has(n.curr) { n.seen.Add(n.curr) return true @@ -2154,7 +2154,7 @@ func (n *RandomNodes) Node() graph.Node { // Reset returns the iterator to its initial state. func (n *RandomNodes) Reset() { - n.state = rand.New(rand.NewSource(n.seed)) + n.state = rand.New(rand.NewPCG(n.seed, n.seed)) n.seen = make(set.Ints[int64]) n.count = 0 } diff --git a/graph/topo/bench_test.go b/graph/topo/bench_test.go index 57612577..888da5bc 100644 --- a/graph/topo/bench_test.go +++ b/graph/topo/bench_test.go @@ -6,12 +6,12 @@ package topo import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/graphs/gen" "gonum.org/v1/gonum/graph/simple" - "gonum.org/v1/gonum/internal/rand" ) var ( @@ -34,7 +34,7 @@ var ( func gnpDirected(n int, p float64) graph.Directed { g := simple.NewDirectedGraph() - err := gen.Gnp(g, n, p, rand.NewSource(1)) + err := gen.Gnp(g, n, p, rand.NewPCG(1, 1)) if err != nil { panic(fmt.Sprintf("topo: bad test: %v", err)) } @@ -43,7 +43,7 @@ func gnpDirected(n int, p float64) graph.Directed { func gnpUndirected(n int, p float64) graph.Undirected { g := simple.NewUndirectedGraph() - err := gen.Gnp(g, n, p, rand.NewSource(1)) + err := gen.Gnp(g, n, p, rand.NewPCG(1, 1)) if err != nil { panic(fmt.Sprintf("topo: bad test: %v", err)) } diff --git a/integrate/simpsons_test.go b/integrate/simpsons_test.go index bb8ff0e9..4a551b0d 100644 --- a/integrate/simpsons_test.go +++ b/integrate/simpsons_test.go @@ -6,15 +6,15 @@ package integrate import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/integrate/testquad" - "gonum.org/v1/gonum/internal/rand" ) func TestSimpsons(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, test := range []struct { integral testquad.Integral n int diff --git a/integrate/trapezoidal_test.go b/integrate/trapezoidal_test.go index 0c0a2f8b..cf51a5ee 100644 --- a/integrate/trapezoidal_test.go +++ b/integrate/trapezoidal_test.go @@ -6,15 +6,15 @@ package integrate import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/integrate/testquad" - "gonum.org/v1/gonum/internal/rand" ) func TestTrapezoidal(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, test := range []struct { integral testquad.Integral n int diff --git a/internal/asm/f64/asm_test.go b/internal/asm/f64/asm_test.go index bd7a9737..6cf8dc6f 100644 --- a/internal/asm/f64/asm_test.go +++ b/internal/asm/f64/asm_test.go @@ -6,10 +6,10 @@ package f64_test import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) const ( diff --git a/internal/asm/f64/dot_test.go b/internal/asm/f64/dot_test.go index 3a2dc8c1..a4e72376 100644 --- a/internal/asm/f64/dot_test.go +++ b/internal/asm/f64/dot_test.go @@ -7,10 +7,10 @@ package f64_test import ( "fmt" "math" + "math/rand/v2" "testing" . "gonum.org/v1/gonum/internal/asm/f64" - "gonum.org/v1/gonum/internal/rand" ) func TestDotUnitary(t *testing.T) { diff --git a/internal/asm/f64/scal_test.go b/internal/asm/f64/scal_test.go index 4ef6dc40..e3e94e5a 100644 --- a/internal/asm/f64/scal_test.go +++ b/internal/asm/f64/scal_test.go @@ -6,11 +6,11 @@ package f64_test import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" . "gonum.org/v1/gonum/internal/asm/f64" - "gonum.org/v1/gonum/internal/rand" ) var scalTests = []struct { @@ -100,7 +100,7 @@ func TestScalUnitary(t *testing.T) { func TestScalUnitaryTo(t *testing.T) { const xGdVal, dstGdVal = -1, 0.5 - rng := rand.New(rand.NewSource(42)) + rng := rand.New(rand.NewPCG(42, 42)) for i, test := range scalTests { n := len(test.x) for _, align := range align2 { @@ -155,7 +155,7 @@ func TestScalInc(t *testing.T) { func TestScalIncTo(t *testing.T) { const xGdVal, dstGdVal = -1, 0.5 gdLn := 4 - rng := rand.New(rand.NewSource(42)) + rng := rand.New(rand.NewPCG(42, 42)) for i, test := range scalTests { n := len(test.x) for _, inc := range newIncSet(1, 2, 3, 4, 7, 10) { diff --git a/internal/testrand/extreme.go b/internal/testrand/extreme.go index 67cec79f..d9b60ccf 100644 --- a/internal/testrand/extreme.go +++ b/internal/testrand/extreme.go @@ -6,8 +6,7 @@ package testrand import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // extreme is a pseudo-random number generator that has high probability of returning extreme values. @@ -28,12 +27,6 @@ func newExtreme(p, nan float64, rnd Rand) *extreme { // Perm returns a permutation of integers [0, n). func (e *extreme) Perm(n int) []int { return e.rnd.Perm(n) } -// Read generates len(p) pseudo-random bytes. -func (e *extreme) Read(p []byte) (n int, err error) { return e.rnd.Read(p) } - -// Seed reseeds the pseudo-random generator. -func (e *extreme) Seed(seed uint64) { e.rnd.Seed(seed) } - // Shuffle shuffles n items using the swap callback. func (e *extreme) Shuffle(n int, swap func(i, j int)) { e.rnd.Shuffle(n, swap) } @@ -57,7 +50,7 @@ func (e *extreme) nan() bool { func (e *extreme) ExpFloat64() float64 { switch { case e.p(): - return extremeFloat64Exp[e.rnd.Intn(len(extremeFloat64Exp))] + return extremeFloat64Exp[e.rnd.IntN(len(extremeFloat64Exp))] case e.nan(): return math.NaN() } @@ -69,7 +62,7 @@ func (e *extreme) ExpFloat64() float64 { func (e *extreme) Float32() float32 { switch { case e.p(): - return extremeFloat32Unit[e.rnd.Intn(len(extremeFloat32Unit))] + return extremeFloat32Unit[e.rnd.IntN(len(extremeFloat32Unit))] case e.nan(): return float32(math.NaN()) } @@ -81,7 +74,7 @@ func (e *extreme) Float32() float32 { func (e *extreme) Float64() float64 { switch { case e.p(): - return extremeFloat64Unit[e.rnd.Intn(len(extremeFloat64Unit))] + return extremeFloat64Unit[e.rnd.IntN(len(extremeFloat64Unit))] case e.nan(): return math.NaN() } @@ -92,23 +85,23 @@ func (e *extreme) Float64() float64 { // Int returns a non-negative pseudo-random int. func (e *extreme) Int() int { if e.p() { - return extremeInt[e.rnd.Intn(len(extremeInt))] + return extremeInt[e.rnd.IntN(len(extremeInt))] } return e.rnd.Int() } -// Int31 returns a non-negative pseudo-random int32. -func (e *extreme) Int31() int32 { +// Int32 returns a non-negative pseudo-random int32. +func (e *extreme) Int32() int32 { if e.p() { - return extremeInt31[e.rnd.Intn(len(extremeInt31))] + return extremeInt31[e.rnd.IntN(len(extremeInt31))] } - return e.rnd.Int31() + return e.rnd.Int32() } -// Int31n returns a non-negative pseudo-random int32 from range [0, n). -func (e *extreme) Int31n(n int32) int32 { +// Int32N returns a non-negative pseudo-random int32 from range [0, n). +func (e *extreme) Int32N(n int32) int32 { if e.p() { - switch rand.Intn(4) { + switch rand.IntN(4) { case 0: return 0 case 1: @@ -119,21 +112,21 @@ func (e *extreme) Int31n(n int32) int32 { return n - 1 } } - return e.rnd.Int31n(n) + return e.rnd.Int32N(n) } -// Int63 returns a non-negative pseudo-random int64. -func (e *extreme) Int63() int64 { +// Int64 returns a non-negative pseudo-random int64. +func (e *extreme) Int64() int64 { if e.p() { - return extremeInt63[e.rnd.Intn(len(extremeInt63))] + return extremeInt63[e.rnd.IntN(len(extremeInt63))] } - return e.rnd.Int63() + return e.rnd.Int64() } -// Int63n returns a non-negative pseudo-random int from range [0, n). -func (e *extreme) Int63n(n int64) int64 { +// Int64N returns a non-negative pseudo-random int from range [0, n). +func (e *extreme) Int64N(n int64) int64 { if e.p() { - switch rand.Intn(4) { + switch rand.IntN(4) { case 0: return 0 case 1: @@ -144,13 +137,13 @@ func (e *extreme) Int63n(n int64) int64 { return n - 1 } } - return e.rnd.Int63n(n) + return e.rnd.Int64N(n) } -// Int returns a non-negative pseudo-random int from range [0, n). -func (e *extreme) Intn(n int) int { +// IntN returns a non-negative pseudo-random int from range [0, n). +func (e *extreme) IntN(n int) int { if e.p() { - switch rand.Intn(4) { + switch rand.IntN(4) { case 0: return 0 case 1: @@ -161,14 +154,14 @@ func (e *extreme) Intn(n int) int { return n - 1 } } - return e.rnd.Intn(n) + return e.rnd.IntN(n) } // NormFloat64 returns a normally distributed pseudo-random float64 in range [-math.MaxFloat64, math.MaxFloat64]. func (e *extreme) NormFloat64() float64 { switch { case e.p(): - return extremeFloat64Norm[e.rnd.Intn(len(extremeFloat64Norm))] + return extremeFloat64Norm[e.rnd.IntN(len(extremeFloat64Norm))] case e.nan(): return math.NaN() } @@ -179,7 +172,7 @@ func (e *extreme) NormFloat64() float64 { // Uint32 returns a pseudo-random uint32. func (e *extreme) Uint32() uint32 { if e.p() { - return extremeUint32[e.rnd.Intn(len(extremeUint32))] + return extremeUint32[e.rnd.IntN(len(extremeUint32))] } return e.rnd.Uint32() } @@ -187,15 +180,15 @@ func (e *extreme) Uint32() uint32 { // Uint64 returns a pseudo-random uint64. func (e *extreme) Uint64() uint64 { if e.p() { - return extremeUint64[e.rnd.Intn(len(extremeUint64))] + return extremeUint64[e.rnd.IntN(len(extremeUint64))] } return e.rnd.Uint64() } -// Uint64n returns a pseudo-random uint64 from range [0, n). -func (e *extreme) Uint64n(n uint64) uint64 { +// Uint64N returns a pseudo-random uint64 from range [0, n). +func (e *extreme) Uint64N(n uint64) uint64 { if e.p() { - switch rand.Intn(4) { + switch rand.IntN(4) { case 0: return 0 case 1: @@ -206,5 +199,5 @@ func (e *extreme) Uint64n(n uint64) uint64 { return n - 1 } } - return e.rnd.Uint64n(n) + return e.rnd.Uint64N(n) } diff --git a/internal/testrand/extreme_test.go b/internal/testrand/extreme_test.go index 7f3ce755..bf7c9ef5 100644 --- a/internal/testrand/extreme_test.go +++ b/internal/testrand/extreme_test.go @@ -6,13 +6,12 @@ package testrand import ( "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestExtreme_NaN(t *testing.T) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) rnd := rand.New(src) ext := newExtreme(0, 1, rnd) diff --git a/internal/testrand/rand.go b/internal/testrand/rand.go index 50845651..e26851d3 100644 --- a/internal/testrand/rand.go +++ b/internal/testrand/rand.go @@ -7,8 +7,7 @@ package testrand import ( "flag" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) var ( @@ -25,25 +24,23 @@ type TB interface { // Source corresponds to the interface in golang.org/x/exp/rand.Source. type Source = rand.Source -// Rand corresponds to golang.org/x/exp/rand.Rand. +// Rand corresponds to math/rand/v2.Rand. type Rand interface { ExpFloat64() float64 Float32() float32 Float64() float64 Int() int - Int31() int32 - Int31n(n int32) int32 - Int63() int64 - Int63n(n int64) int64 - Intn(n int) int + Int32() int32 + Int32N(n int32) int32 + Int64() int64 + Int64N(n int64) int64 + IntN(n int) int NormFloat64() float64 Perm(n int) []int - Read(p []byte) (n int, err error) - Seed(seed uint64) Shuffle(n int, swap func(i, j int)) Uint32() uint32 Uint64() uint64 - Uint64n(n uint64) uint64 + Uint64N(n uint64) uint64 } // New returns a new random number generator using the global flags. @@ -55,13 +52,13 @@ func New(tb TB) Rand { // Don't log the default case. if seed == 1 && *extremeFlag == 0 && *nanFlag == 0 { - base := rand.New(rand.NewSource(seed)) + base := rand.New(rand.NewPCG(seed, seed)) return base } tb.Logf("seed=%d, prob=%.2f, nan=%.2f", seed, *extremeFlag, *nanFlag) - base := rand.New(rand.NewSource(seed)) + base := rand.New(rand.NewPCG(seed, seed)) if *extremeFlag <= 0 && *nanFlag <= 0 { return base } @@ -78,9 +75,9 @@ func NewSource(tb TB) Source { // Don't log the default case. if seed == 1 { - return rand.NewSource(seed) + return rand.NewPCG(seed, seed) } tb.Logf("seed %d", seed) - return rand.NewSource(seed) + return rand.NewPCG(seed, seed) } diff --git a/lapack/testlapack/dbdsqr.go b/lapack/testlapack/dbdsqr.go index 711de72f..e477e652 100644 --- a/lapack/testlapack/dbdsqr.go +++ b/lapack/testlapack/dbdsqr.go @@ -6,6 +6,7 @@ package testlapack import ( "fmt" + "math/rand/v2" "sort" "testing" @@ -13,7 +14,6 @@ import ( "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dbdsqrer interface { @@ -21,7 +21,7 @@ type Dbdsqrer interface { } func DbdsqrTest(t *testing.T, impl Dbdsqrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, test := range []struct { diff --git a/lapack/testlapack/dgebak.go b/lapack/testlapack/dgebak.go index f6369a07..27a1bda4 100644 --- a/lapack/testlapack/dgebak.go +++ b/lapack/testlapack/dgebak.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,19 +19,19 @@ type Dgebaker interface { } func DgebakTest(t *testing.T, impl Dgebaker) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, job := range []lapack.BalanceJob{lapack.BalanceNone, lapack.Permute, lapack.Scale, lapack.PermuteScale} { for _, side := range []lapack.EVSide{lapack.EVLeft, lapack.EVRight} { for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { for _, extra := range []int{0, 11} { for cas := 0; cas < 100; cas++ { - m := rnd.Intn(n + 1) + m := rnd.IntN(n + 1) v := randomGeneral(n, m, m+extra, rnd) var ilo, ihi int if v.Rows > 0 { - ihi = rnd.Intn(n) - ilo = rnd.Intn(ihi + 1) + ihi = rnd.IntN(n) + ilo = rnd.IntN(ihi + 1) } else { ihi = -1 } @@ -70,12 +70,12 @@ func testDgebak(t *testing.T, impl Dgebaker, job lapack.BalanceJob, side lapack. if job == lapack.Permute || job == lapack.PermuteScale { // Make up some random permutations. for i := n - 1; i > ihi; i-- { - scale[i] = float64(rnd.Intn(i + 1)) + scale[i] = float64(rnd.IntN(i + 1)) blas64.Swap(blas64.Vector{N: n, Data: p.Data[i:], Inc: p.Stride}, blas64.Vector{N: n, Data: p.Data[int(scale[i]):], Inc: p.Stride}) } for i := 0; i < ilo; i++ { - scale[i] = float64(i + rnd.Intn(ihi-i+1)) + scale[i] = float64(i + rnd.IntN(ihi-i+1)) blas64.Swap(blas64.Vector{N: n, Data: p.Data[i:], Inc: p.Stride}, blas64.Vector{N: n, Data: p.Data[int(scale[i]):], Inc: p.Stride}) } diff --git a/lapack/testlapack/dgebal.go b/lapack/testlapack/dgebal.go index 4c2d196a..ef802c57 100644 --- a/lapack/testlapack/dgebal.go +++ b/lapack/testlapack/dgebal.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dgebaler interface { } func DgebalTest(t *testing.T, impl Dgebaler) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, job := range []lapack.BalanceJob{lapack.BalanceNone, lapack.Permute, lapack.Scale, lapack.PermuteScale} { for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 10, 18, 31, 53, 100} { diff --git a/lapack/testlapack/dgebd2.go b/lapack/testlapack/dgebd2.go index e2d9c795..98fd5d78 100644 --- a/lapack/testlapack/dgebd2.go +++ b/lapack/testlapack/dgebd2.go @@ -5,9 +5,8 @@ package testlapack import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Dgebd2er interface { @@ -15,7 +14,7 @@ type Dgebd2er interface { } func Dgebd2Test(t *testing.T, impl Dgebd2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dgebrd.go b/lapack/testlapack/dgebrd.go index 179080bb..ae075d9e 100644 --- a/lapack/testlapack/dgebrd.go +++ b/lapack/testlapack/dgebrd.go @@ -6,10 +6,10 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgebrder interface { @@ -18,7 +18,7 @@ type Dgebrder interface { } func DgebrdTest(t *testing.T, impl Dgebrder) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dgecon.go b/lapack/testlapack/dgecon.go index bc267051..24889ece 100644 --- a/lapack/testlapack/dgecon.go +++ b/lapack/testlapack/dgecon.go @@ -7,10 +7,10 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dgeconer interface { } func DgeconTest(t *testing.T, impl Dgeconer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { for _, lda := range []int{max(1, n), n + 3} { dgeconTest(t, impl, rnd, n, lda) diff --git a/lapack/testlapack/dgeev.go b/lapack/testlapack/dgeev.go index e5f0db68..fb0af8c5 100644 --- a/lapack/testlapack/dgeev.go +++ b/lapack/testlapack/dgeev.go @@ -8,12 +8,12 @@ import ( "fmt" "math" "math/cmplx" + "math/rand/v2" "strconv" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -30,7 +30,7 @@ type dgeevTest struct { } func DgeevTest(t *testing.T, impl Dgeever) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, test := range []dgeevTest{ { @@ -488,7 +488,7 @@ func DgeevTest(t *testing.T, impl Dgeever) { re := rnd.NormFloat64() if i == n-1 || rnd.Float64() < 0.5 { // Real eigenvalue. - nb := rnd.Intn(min(4, n-i)) + 1 + nb := rnd.IntN(min(4, n-i)) + 1 for k := 0; k < nb; k++ { tmat.Data[i*tmat.Stride+i] = re ev[i] = complex(re, 0) @@ -498,7 +498,7 @@ func DgeevTest(t *testing.T, impl Dgeever) { } // Complex eigenvalue. im := rnd.NormFloat64() - nb := rnd.Intn(min(4, (n-i)/2)) + 1 + nb := rnd.IntN(min(4, (n-i)/2)) + 1 for k := 0; k < nb; k++ { // 2×2 block for the complex eigenvalue. tmat.Data[i*tmat.Stride+i] = re diff --git a/lapack/testlapack/dgeev_bench.go b/lapack/testlapack/dgeev_bench.go index 03996c83..14d3b205 100644 --- a/lapack/testlapack/dgeev_bench.go +++ b/lapack/testlapack/dgeev_bench.go @@ -5,16 +5,16 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) func DgeevBenchmark(b *testing.B, impl Dgeever) { var resultGeneral blas64.General - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) benchmarks := []struct { name string a blas64.General diff --git a/lapack/testlapack/dgehd2.go b/lapack/testlapack/dgehd2.go index fad1bd01..6eca28bc 100644 --- a/lapack/testlapack/dgehd2.go +++ b/lapack/testlapack/dgehd2.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dgehd2er interface { @@ -19,7 +19,7 @@ type Dgehd2er interface { } func Dgehd2Test(t *testing.T, impl Dgehd2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 7, 10, 30} { for _, extra := range []int{0, 1, 13} { for cas := 0; cas < 100; cas++ { @@ -32,8 +32,8 @@ func Dgehd2Test(t *testing.T, impl Dgehd2er) { func testDgehd2(t *testing.T, impl Dgehd2er, n, extra int, rnd *rand.Rand) { const tol = 1e-14 - ilo := rnd.Intn(n) - ihi := rnd.Intn(n) + ilo := rnd.IntN(n) + ihi := rnd.IntN(n) if ilo > ihi { ilo, ihi = ihi, ilo } diff --git a/lapack/testlapack/dgehrd.go b/lapack/testlapack/dgehrd.go index 3952e485..9ecaf1e9 100644 --- a/lapack/testlapack/dgehrd.go +++ b/lapack/testlapack/dgehrd.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dgehrder interface { @@ -21,7 +21,7 @@ type Dgehrder interface { } func DgehrdTest(t *testing.T, impl Dgehrder) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Randomized tests for small matrix sizes that will most likely // use the unblocked algorithm. @@ -29,8 +29,8 @@ func DgehrdTest(t *testing.T, impl Dgehrder) { for _, extra := range []int{0, 13} { for _, optwork := range []bool{true, false} { for cas := 0; cas < 10; cas++ { - ilo := rnd.Intn(n) - ihi := rnd.Intn(n) + ilo := rnd.IntN(n) + ihi := rnd.IntN(n) if ilo > ihi { ilo, ihi = ihi, ilo } diff --git a/lapack/testlapack/dgelq2.go b/lapack/testlapack/dgelq2.go index bb9a27cb..a56b548c 100644 --- a/lapack/testlapack/dgelq2.go +++ b/lapack/testlapack/dgelq2.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgelq2er interface { @@ -20,7 +20,7 @@ type Dgelq2er interface { func Dgelq2Test(t *testing.T, impl Dgelq2er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for c, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dgelqf.go b/lapack/testlapack/dgelqf.go index 63dbfe64..e1548ef4 100644 --- a/lapack/testlapack/dgelqf.go +++ b/lapack/testlapack/dgelqf.go @@ -5,10 +5,10 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgelqfer interface { @@ -18,7 +18,7 @@ type Dgelqfer interface { func DgelqfTest(t *testing.T, impl Dgelqfer) { const tol = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for c, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dgels.go b/lapack/testlapack/dgels.go index 3f2c9a29..233712ad 100644 --- a/lapack/testlapack/dgels.go +++ b/lapack/testlapack/dgels.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgelser interface { @@ -18,7 +18,7 @@ type Dgelser interface { } func DgelsTest(t *testing.T, impl Dgelser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { for _, test := range []struct { m, n, nrhs, lda, ldb int diff --git a/lapack/testlapack/dgeql2.go b/lapack/testlapack/dgeql2.go index d90a71dc..03622196 100644 --- a/lapack/testlapack/dgeql2.go +++ b/lapack/testlapack/dgeql2.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgeql2er interface { @@ -20,7 +20,7 @@ type Dgeql2er interface { func Dgeql2Test(t *testing.T, impl Dgeql2er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // TODO(btracey): Add tests for m < n. for _, test := range []struct { m, n, lda int diff --git a/lapack/testlapack/dgeqp3.go b/lapack/testlapack/dgeqp3.go index 86313bf6..f4764d4f 100644 --- a/lapack/testlapack/dgeqp3.go +++ b/lapack/testlapack/dgeqp3.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dgeqp3er interface { } func Dgeqp3Test(t *testing.T, impl Dgeqp3er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, m := range []int{0, 1, 2, 3, 4, 5, 12, 23, 129} { for _, n := range []int{0, 1, 2, 3, 4, 5, 12, 23, 129} { for _, lda := range []int{max(1, n), n + 3} { @@ -55,7 +55,7 @@ func dgeqp3Test(t *testing.T, impl Dgeqp3er, rnd *rand.Rand, m, n, lda int) { name += "free=all" case some: // Some columns are free, some are leading columns. - jpvt[j] = rnd.Intn(2) - 1 // -1 or 0 + jpvt[j] = rnd.IntN(2) - 1 // -1 or 0 name += "free=some" case none: // All columns are leading. diff --git a/lapack/testlapack/dgeqr2.go b/lapack/testlapack/dgeqr2.go index 87518a4a..aae54c81 100644 --- a/lapack/testlapack/dgeqr2.go +++ b/lapack/testlapack/dgeqr2.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dgeqr2er interface { } func Dgeqr2Test(t *testing.T, impl Dgeqr2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, m := range []int{0, 1, 2, 3, 4, 5, 6, 12, 23} { for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 12, 23} { for _, lda := range []int{max(1, n), n + 4} { diff --git a/lapack/testlapack/dgeqrf.go b/lapack/testlapack/dgeqrf.go index 579076db..75bdee1e 100644 --- a/lapack/testlapack/dgeqrf.go +++ b/lapack/testlapack/dgeqrf.go @@ -5,10 +5,10 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgeqrfer interface { @@ -18,7 +18,7 @@ type Dgeqrfer interface { func DgeqrfTest(t *testing.T, impl Dgeqrfer) { const tol = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for c, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dgerq2.go b/lapack/testlapack/dgerq2.go index a6f11197..6712eb81 100644 --- a/lapack/testlapack/dgerq2.go +++ b/lapack/testlapack/dgerq2.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dgerq2er interface { } func Dgerq2Test(t *testing.T, impl Dgerq2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, m := range []int{0, 1, 2, 3, 4, 5, 6, 12, 23} { for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 12, 23} { for _, lda := range []int{max(1, n), n + 4} { diff --git a/lapack/testlapack/dgerqf.go b/lapack/testlapack/dgerqf.go index e63717e2..93c94439 100644 --- a/lapack/testlapack/dgerqf.go +++ b/lapack/testlapack/dgerqf.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dgerqfer interface { } func DgerqfTest(t *testing.T, impl Dgerqfer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, m := range []int{0, 1, 2, 3, 4, 5, 6, 12, 129, 160} { for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 12, 129, 160} { for _, lda := range []int{max(1, n), n + 4} { diff --git a/lapack/testlapack/dgesc2.go b/lapack/testlapack/dgesc2.go index 485b6e4a..66a602e6 100644 --- a/lapack/testlapack/dgesc2.go +++ b/lapack/testlapack/dgesc2.go @@ -7,12 +7,12 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -23,7 +23,7 @@ type Dgesc2er interface { } func Dgesc2Test(t *testing.T, impl Dgesc2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50} { for _, lda := range []int{n, n + 3} { testDgesc2(t, impl, rnd, n, lda, false) diff --git a/lapack/testlapack/dgesv.go b/lapack/testlapack/dgesv.go index 5097a7ff..0032ff5d 100644 --- a/lapack/testlapack/dgesv.go +++ b/lapack/testlapack/dgesv.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dgesver interface { } func DgesvTest(t *testing.T, impl Dgesver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50, 100} { for _, nrhs := range []int{0, 1, 2, 5} { for _, lda := range []int{max(1, n), n + 5} { diff --git a/lapack/testlapack/dgesvd.go b/lapack/testlapack/dgesvd.go index 16360464..176dfce4 100644 --- a/lapack/testlapack/dgesvd.go +++ b/lapack/testlapack/dgesvd.go @@ -7,13 +7,13 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -47,7 +47,7 @@ func DgesvdTest(t *testing.T, impl Dgesvder, tol float64) { func dgesvdTest(t *testing.T, impl Dgesvder, m, n, mtype int, tol float64) { const tolOrtho = 1e-15 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Use a fixed leading dimension to reduce testing time. lda := n + 3 diff --git a/lapack/testlapack/dgetc2.go b/lapack/testlapack/dgetc2.go index ba2c7f7b..8fa1fc53 100644 --- a/lapack/testlapack/dgetc2.go +++ b/lapack/testlapack/dgetc2.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dgetc2er interface { } func Dgetc2Test(t *testing.T, impl Dgetc2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20} { for _, lda := range []int{n, n + 5} { dgetc2Test(t, impl, rnd, n, lda, false) @@ -52,7 +52,7 @@ func dgetc2Test(t *testing.T, impl Dgetc2er, rnd *rand.Rand, n, lda int, perturb } if perturb && n > 0 { // Make U singular by randomly placing a zero on the diagonal. - i := rnd.Intn(n) + i := rnd.IntN(n) u.Data[i*u.Stride+i] = 0 } diff --git a/lapack/testlapack/dgetf2.go b/lapack/testlapack/dgetf2.go index 6443bad1..22f4a395 100644 --- a/lapack/testlapack/dgetf2.go +++ b/lapack/testlapack/dgetf2.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgetf2er interface { @@ -18,7 +18,7 @@ type Dgetf2er interface { } func Dgetf2Test(t *testing.T, impl Dgetf2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dgetrf.go b/lapack/testlapack/dgetrf.go index efcc472e..9030ea9a 100644 --- a/lapack/testlapack/dgetrf.go +++ b/lapack/testlapack/dgetrf.go @@ -5,9 +5,8 @@ package testlapack import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Dgetrfer interface { @@ -15,7 +14,7 @@ type Dgetrfer interface { } func DgetrfTest(t *testing.T, impl Dgetrfer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dgetri.go b/lapack/testlapack/dgetri.go index 28a6d17f..78724b53 100644 --- a/lapack/testlapack/dgetri.go +++ b/lapack/testlapack/dgetri.go @@ -5,11 +5,11 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dgetrier interface { @@ -19,7 +19,7 @@ type Dgetrier interface { func DgetriTest(t *testing.T, impl Dgetrier) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() for _, test := range []struct { n, lda int diff --git a/lapack/testlapack/dgetrs.go b/lapack/testlapack/dgetrs.go index 00e242dc..c4c50810 100644 --- a/lapack/testlapack/dgetrs.go +++ b/lapack/testlapack/dgetrs.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dgetrser interface { @@ -19,7 +19,7 @@ type Dgetrser interface { } func DgetrsTest(t *testing.T, impl Dgetrser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // TODO(btracey): Put more thought into creating more regularized matrices // and what correct tolerances should be. Consider also seeding the random // number in this test to make it more robust to code changes in other diff --git a/lapack/testlapack/dgghrd.go b/lapack/testlapack/dgghrd.go index 8ee6410c..6e9b4a85 100644 --- a/lapack/testlapack/dgghrd.go +++ b/lapack/testlapack/dgghrd.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dgghrder interface { } func DgghrdTest(t *testing.T, impl Dgghrder) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) comps := []lapack.OrthoComp{lapack.OrthoExplicit, lapack.OrthoNone, lapack.OrthoPostmul} for _, compq := range comps { for _, compz := range comps { diff --git a/lapack/testlapack/dggsvd3.go b/lapack/testlapack/dggsvd3.go index 3bbfa097..99be8794 100644 --- a/lapack/testlapack/dggsvd3.go +++ b/lapack/testlapack/dggsvd3.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -21,7 +21,7 @@ type Dggsvd3er interface { func Dggsvd3Test(t *testing.T, impl Dggsvd3er) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { m, p, n, lda, ldb, ldu, ldv, ldq int diff --git a/lapack/testlapack/dggsvp3.go b/lapack/testlapack/dggsvp3.go index 56258f76..329a1ee8 100644 --- a/lapack/testlapack/dggsvp3.go +++ b/lapack/testlapack/dggsvp3.go @@ -5,11 +5,11 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -21,7 +21,7 @@ type Dggsvp3er interface { func Dggsvp3Test(t *testing.T, impl Dggsvp3er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { m, p, n, lda, ldb, ldu, ldv, ldq int }{ diff --git a/lapack/testlapack/dgtsv.go b/lapack/testlapack/dgtsv.go index ee8488e7..fd25242f 100644 --- a/lapack/testlapack/dgtsv.go +++ b/lapack/testlapack/dgtsv.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dgtsver interface { } func DgtsvTest(t *testing.T, impl Dgtsver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 25, 50} { for _, nrhs := range []int{0, 1, 2, 3, 4, 10} { for _, ldb := range []int{max(1, nrhs), nrhs + 3} { diff --git a/lapack/testlapack/dlabrd.go b/lapack/testlapack/dlabrd.go index 89d97813..8db7cd72 100644 --- a/lapack/testlapack/dlabrd.go +++ b/lapack/testlapack/dlabrd.go @@ -6,9 +6,8 @@ package testlapack import ( "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Dlabrder interface { @@ -16,7 +15,7 @@ type Dlabrder interface { } func DlabrdTest(t *testing.T, impl Dlabrder) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, nb, lda, ldx, ldy int }{ diff --git a/lapack/testlapack/dlacn2.go b/lapack/testlapack/dlacn2.go index 162c64db..6c4171da 100644 --- a/lapack/testlapack/dlacn2.go +++ b/lapack/testlapack/dlacn2.go @@ -6,11 +6,11 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlacn2er interface { @@ -18,7 +18,7 @@ type Dlacn2er interface { } func Dlacn2Test(t *testing.T, impl Dlacn2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 7, 10, 15, 20, 100} { for cas := 0; cas < 10; cas++ { a := randomGeneral(n, n, n, rnd) diff --git a/lapack/testlapack/dlacpy.go b/lapack/testlapack/dlacpy.go index 1e3c2acd..118914df 100644 --- a/lapack/testlapack/dlacpy.go +++ b/lapack/testlapack/dlacpy.go @@ -6,10 +6,10 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Dlacpyer interface { @@ -17,7 +17,7 @@ type Dlacpyer interface { } func DlacpyTest(t *testing.T, impl Dlacpyer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower, blas.All} { for _, test := range []struct { m, n, lda, ldb int diff --git a/lapack/testlapack/dlaev2.go b/lapack/testlapack/dlaev2.go index a3118b17..08446f5d 100644 --- a/lapack/testlapack/dlaev2.go +++ b/lapack/testlapack/dlaev2.go @@ -6,9 +6,8 @@ package testlapack import ( "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Dlaev2er interface { @@ -16,7 +15,7 @@ type Dlaev2er interface { } func Dlaev2Test(t *testing.T, impl Dlaev2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for trial := 0; trial < 100; trial++ { a := rnd.NormFloat64() b := rnd.NormFloat64() diff --git a/lapack/testlapack/dlaexc.go b/lapack/testlapack/dlaexc.go index 453833cf..02a6b6ab 100644 --- a/lapack/testlapack/dlaexc.go +++ b/lapack/testlapack/dlaexc.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dlaexcer interface { } func DlaexcTest(t *testing.T, impl Dlaexcer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { for _, extra := range []int{0, 3} { @@ -38,7 +38,7 @@ func testDlaexc(t *testing.T, impl Dlaexcer, rnd *rand.Rand, n, extra int) { tmatCopy := cloneGeneral(tmat) // Randomly pick the index of the first block. - j1 := rnd.Intn(n) + j1 := rnd.IntN(n) if j1 > 0 && tmat.Data[j1*tmat.Stride+j1-1] != 0 { // Adjust j1 if it points to the second row of a 2x2 block. j1-- diff --git a/lapack/testlapack/dlag2.go b/lapack/testlapack/dlag2.go index 5bc87388..e2d56830 100644 --- a/lapack/testlapack/dlag2.go +++ b/lapack/testlapack/dlag2.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dlag2er interface { @@ -19,7 +19,7 @@ type Dlag2er interface { } func Dlag2Test(t *testing.T, impl Dlag2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, lda := range []int{2, 5} { for _, ldb := range []int{2, 5} { for aKind := 0; aKind <= 20; aKind++ { diff --git a/lapack/testlapack/dlags2.go b/lapack/testlapack/dlags2.go index 04dd1dc1..91712469 100644 --- a/lapack/testlapack/dlags2.go +++ b/lapack/testlapack/dlags2.go @@ -6,12 +6,12 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dlags2er interface { @@ -19,7 +19,7 @@ type Dlags2er interface { } func Dlags2Test(t *testing.T, impl Dlags2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, upper := range []bool{true, false} { for i := 0; i < 100; i++ { // Generate randomly the elements of a 2×2 matrix A diff --git a/lapack/testlapack/dlagtm.go b/lapack/testlapack/dlagtm.go index 22a0472f..c098868e 100644 --- a/lapack/testlapack/dlagtm.go +++ b/lapack/testlapack/dlagtm.go @@ -6,12 +6,12 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dlagtmer interface { } func DlagtmTest(t *testing.T, impl Dlagtmer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { t.Run(transToString(trans), func(t *testing.T) { for _, m := range []int{0, 1, 2, 3, 4, 5, 10} { diff --git a/lapack/testlapack/dlahqr.go b/lapack/testlapack/dlahqr.go index 267da311..cdca8c24 100644 --- a/lapack/testlapack/dlahqr.go +++ b/lapack/testlapack/dlahqr.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlahqrer interface { @@ -28,7 +28,7 @@ type dlahqrTest struct { } func DlahqrTest(t *testing.T, impl Dlahqrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Tests that choose the [ilo:ihi+1,ilo:ihi+1] and // [iloz:ihiz+1,ilo:ihi+1] blocks randomly. @@ -37,13 +37,13 @@ func DlahqrTest(t *testing.T, impl Dlahqrer) { for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { for _, extra := range []int{0, 1, 11} { for cas := 0; cas < 100; cas++ { - ilo := rnd.Intn(n) - ihi := rnd.Intn(n) + ilo := rnd.IntN(n) + ihi := rnd.IntN(n) if ilo > ihi { ilo, ihi = ihi, ilo } - iloz := rnd.Intn(ilo + 1) - ihiz := ihi + rnd.Intn(n-ihi) + iloz := rnd.IntN(ilo + 1) + ihiz := ihi + rnd.IntN(n-ihi) h := randomHessenberg(n, n+extra, rnd) if ilo-1 >= 0 { h.Data[ilo*h.Stride+ilo-1] = 0 diff --git a/lapack/testlapack/dlahr2.go b/lapack/testlapack/dlahr2.go index d5ea60c8..66928617 100644 --- a/lapack/testlapack/dlahr2.go +++ b/lapack/testlapack/dlahr2.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlahr2er interface { @@ -21,7 +21,7 @@ type Dlahr2er interface { func Dlahr2Test(t *testing.T, impl Dlahr2er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { n, k, nb int }{ diff --git a/lapack/testlapack/dlaln2.go b/lapack/testlapack/dlaln2.go index a76db20c..4caddd5e 100644 --- a/lapack/testlapack/dlaln2.go +++ b/lapack/testlapack/dlaln2.go @@ -8,9 +8,8 @@ import ( "fmt" "math" "math/cmplx" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Dlaln2er interface { @@ -18,7 +17,7 @@ type Dlaln2er interface { } func Dlaln2Test(t *testing.T, impl Dlaln2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []bool{true, false} { for _, na := range []int{1, 2} { for _, nw := range []int{1, 2} { diff --git a/lapack/testlapack/dlangb.go b/lapack/testlapack/dlangb.go index af86dcc9..b573c289 100644 --- a/lapack/testlapack/dlangb.go +++ b/lapack/testlapack/dlangb.go @@ -7,10 +7,10 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dlangber interface { } func DlangbTest(t *testing.T, impl Dlangber) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxRowSum, lapack.MaxColumnSum, lapack.Frobenius} { t.Run(normToString(norm), func(t *testing.T) { for _, n := range []int{0, 1, 2, 3, 4, 5, 10} { @@ -46,7 +46,7 @@ func dlangbTest(t *testing.T, impl Dlangber, rnd *rand.Rand, norm lapack.MatrixN ab := randomSlice(m*ldab, rnd) // Sometimes put a NaN into the matrix. if m > 0 && n > 0 && rnd.Float64() < 0.5 { - i := rnd.Intn(m) + i := rnd.IntN(m) ab[i*ldab+kl] = math.NaN() } abCopy := make([]float64, len(ab)) diff --git a/lapack/testlapack/dlangb_bench.go b/lapack/testlapack/dlangb_bench.go index 0419314b..65bd7ae9 100644 --- a/lapack/testlapack/dlangb_bench.go +++ b/lapack/testlapack/dlangb_bench.go @@ -7,15 +7,15 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) func DlangbBenchmark(b *testing.B, impl Dlangber) { var result float64 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, bm := range []struct { n, k int }{ diff --git a/lapack/testlapack/dlange.go b/lapack/testlapack/dlange.go index 20216786..7579face 100644 --- a/lapack/testlapack/dlange.go +++ b/lapack/testlapack/dlange.go @@ -6,10 +6,10 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -18,7 +18,7 @@ type Dlanger interface { } func DlangeTest(t *testing.T, impl Dlanger) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dlangt.go b/lapack/testlapack/dlangt.go index 26b0807c..f0beb0e9 100644 --- a/lapack/testlapack/dlangt.go +++ b/lapack/testlapack/dlangt.go @@ -7,10 +7,10 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dlangter interface { } func DlangtTest(t *testing.T, impl Dlangter) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxRowSum, lapack.MaxColumnSum, lapack.Frobenius} { t.Run(normToString(norm), func(t *testing.T) { for _, n := range []int{0, 1, 2, 3, 4, 5, 10} { @@ -47,7 +47,7 @@ func dlangtTest(t *testing.T, impl Dlangter, rnd *rand.Rand, norm lapack.MatrixN d := randomSlice(n+1+extra, rnd) // Sometimes put a NaN into the matrix. if n > 0 && rnd.Float64() < 0.5 { - d[rnd.Intn(n)] = math.NaN() + d[rnd.IntN(n)] = math.NaN() } dCopy := make([]float64, len(d)) copy(dCopy, d) diff --git a/lapack/testlapack/dlanhs.go b/lapack/testlapack/dlanhs.go index bf64114d..1922aecb 100644 --- a/lapack/testlapack/dlanhs.go +++ b/lapack/testlapack/dlanhs.go @@ -6,9 +6,9 @@ package testlapack import ( "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -18,7 +18,7 @@ type Dlanhser interface { func DlanhsTest(t *testing.T, impl Dlanhser) { const tol = 1e-15 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 4, 9} { for _, lda := range []int{max(1, n), n + 5} { a := randomGeneral(n, n, lda, rnd) diff --git a/lapack/testlapack/dlansb.go b/lapack/testlapack/dlansb.go index f4881e37..7f92f547 100644 --- a/lapack/testlapack/dlansb.go +++ b/lapack/testlapack/dlansb.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dlansber interface { } func DlansbTest(t *testing.T, impl Dlansber) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10} { for _, kd := range []int{0, (n + 1) / 4, (3*n - 1) / 4, (5*n + 1) / 4} { for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { diff --git a/lapack/testlapack/dlanst.go b/lapack/testlapack/dlanst.go index 63016776..acc639db 100644 --- a/lapack/testlapack/dlanst.go +++ b/lapack/testlapack/dlanst.go @@ -6,9 +6,9 @@ package testlapack import ( "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -18,7 +18,7 @@ type Dlanster interface { } func DlanstTest(t *testing.T, impl Dlanster) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxColumnSum, lapack.MaxRowSum, lapack.Frobenius} { for _, n := range []int{1, 3, 10, 100} { for cas := 0; cas < 100; cas++ { diff --git a/lapack/testlapack/dlansy.go b/lapack/testlapack/dlansy.go index 74034cf1..0850a4af 100644 --- a/lapack/testlapack/dlansy.go +++ b/lapack/testlapack/dlansy.go @@ -6,10 +6,10 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dlansyer interface { } func DlansyTest(t *testing.T, impl Dlansyer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxColumnSum, lapack.MaxRowSum, lapack.Frobenius} { for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { for _, test := range []struct { diff --git a/lapack/testlapack/dlantb.go b/lapack/testlapack/dlantb.go index 0b641066..40d1ccd6 100644 --- a/lapack/testlapack/dlantb.go +++ b/lapack/testlapack/dlantb.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dlantber interface { } func DlantbTest(t *testing.T, impl Dlantber) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, norm := range []lapack.MatrixNorm{lapack.MaxAbs, lapack.MaxRowSum, lapack.MaxColumnSum, lapack.Frobenius} { for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { @@ -71,7 +71,7 @@ func dlantbTest(t *testing.T, impl Dlantber, rnd *rand.Rand, norm lapack.MatrixN } // Sometimes put a NaN into A. if rnd.Float64() < 0.5 { - a[rnd.Intn(len(a))] = math.NaN() + a[rnd.IntN(len(a))] = math.NaN() } // Make a copy of A for later comparison. aCopy := make([]float64, len(a)) diff --git a/lapack/testlapack/dlantb_bench.go b/lapack/testlapack/dlantb_bench.go index e0e49de4..6cea9d67 100644 --- a/lapack/testlapack/dlantb_bench.go +++ b/lapack/testlapack/dlantb_bench.go @@ -7,16 +7,16 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) func DlantbBenchmark(b *testing.B, impl Dlantber) { var result float64 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, bm := range []struct { n, k int }{ diff --git a/lapack/testlapack/dlantr.go b/lapack/testlapack/dlantr.go index c5b30746..5c8c575b 100644 --- a/lapack/testlapack/dlantr.go +++ b/lapack/testlapack/dlantr.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -21,7 +21,7 @@ type Dlantrer interface { } func DlantrTest(t *testing.T, impl Dlantrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, m := range []int{0, 1, 2, 3, 4, 5, 10} { for _, n := range []int{0, 1, 2, 3, 4, 5, 10} { for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { diff --git a/lapack/testlapack/dlanv2.go b/lapack/testlapack/dlanv2.go index e4d76ec8..cd10a1dc 100644 --- a/lapack/testlapack/dlanv2.go +++ b/lapack/testlapack/dlanv2.go @@ -7,9 +7,8 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Dlanv2er interface { @@ -17,7 +16,7 @@ type Dlanv2er interface { } func Dlanv2Test(t *testing.T, impl Dlanv2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t.Run("UpperTriangular", func(t *testing.T) { for i := 0; i < 10; i++ { a := rnd.NormFloat64() diff --git a/lapack/testlapack/dlapll.go b/lapack/testlapack/dlapll.go index 0f56e950..7eb6d780 100644 --- a/lapack/testlapack/dlapll.go +++ b/lapack/testlapack/dlapll.go @@ -5,10 +5,10 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -18,7 +18,7 @@ type Dlapller interface { } func DlapllTest(t *testing.T, impl Dlapller) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, m := range []int{5, 6, 9, 300, 400, 600} { n := 2 lda := n diff --git a/lapack/testlapack/dlapmr.go b/lapack/testlapack/dlapmr.go index ce98b808..20ed12c1 100644 --- a/lapack/testlapack/dlapmr.go +++ b/lapack/testlapack/dlapmr.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlapmrer interface { @@ -18,7 +18,7 @@ type Dlapmrer interface { } func DlapmrTest(t *testing.T, impl Dlapmrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, fwd := range []bool{true, false} { for _, m := range []int{0, 1, 2, 3, 4, 5, 10} { for _, n := range []int{0, 1, 4} { @@ -42,7 +42,7 @@ func dlapmrTest(t *testing.T, impl Dlapmrer, rnd *rand.Rand, fwd bool, m, n, ldx } p := eye(m, m) for i := 0; i < m-1; i++ { - j := i + rnd.Intn(m-i) + j := i + rnd.IntN(m-i) k[i], k[j] = k[j], k[i] bi.Dswap(m, p.Data[i*p.Stride:], 1, p.Data[j*p.Stride:], 1) } diff --git a/lapack/testlapack/dlapy2.go b/lapack/testlapack/dlapy2.go index 279d60a7..cd477d68 100644 --- a/lapack/testlapack/dlapy2.go +++ b/lapack/testlapack/dlapy2.go @@ -6,10 +6,10 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dlapy2er interface { @@ -17,7 +17,7 @@ type Dlapy2er interface { } func Dlapy2Test(t *testing.T, impl Dlapy2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 10; i++ { x := math.Abs(1e200 * rnd.NormFloat64()) y := math.Abs(1e200 * rnd.NormFloat64()) diff --git a/lapack/testlapack/dlaqp2.go b/lapack/testlapack/dlaqp2.go index 9be86691..ab807e6f 100644 --- a/lapack/testlapack/dlaqp2.go +++ b/lapack/testlapack/dlaqp2.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dlaqp2er interface { func Dlaqp2Test(t *testing.T, impl Dlaqp2er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for ti, test := range []struct { m, n, offset int }{ diff --git a/lapack/testlapack/dlaqps.go b/lapack/testlapack/dlaqps.go index e9903297..dae8b174 100644 --- a/lapack/testlapack/dlaqps.go +++ b/lapack/testlapack/dlaqps.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dlaqpser interface { func DlaqpsTest(t *testing.T, impl Dlaqpser) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for ti, test := range []struct { m, n, nb, offset int }{ diff --git a/lapack/testlapack/dlaqr04.go b/lapack/testlapack/dlaqr04.go index c4298a27..60bcebfa 100644 --- a/lapack/testlapack/dlaqr04.go +++ b/lapack/testlapack/dlaqr04.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlaqr04er interface { @@ -30,7 +30,7 @@ type dlaqr04Test struct { } func Dlaqr04Test(t *testing.T, impl Dlaqr04er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Tests for small matrices that choose the ilo,ihi and iloz,ihiz pairs // randomly. @@ -40,13 +40,13 @@ func Dlaqr04Test(t *testing.T, impl Dlaqr04er) { for _, extra := range []int{0, 11} { for recur := 0; recur <= 2; recur++ { for cas := 0; cas < n; cas++ { - ilo := rnd.Intn(n) - ihi := rnd.Intn(n) + ilo := rnd.IntN(n) + ihi := rnd.IntN(n) if ilo > ihi { ilo, ihi = ihi, ilo } - iloz := rnd.Intn(ilo + 1) - ihiz := ihi + rnd.Intn(n-ihi) + iloz := rnd.IntN(ilo + 1) + ihiz := ihi + rnd.IntN(n-ihi) h := randomHessenberg(n, n+extra, rnd) if ilo-1 >= 0 { h.Data[ilo*h.Stride+ilo-1] = 0 diff --git a/lapack/testlapack/dlaqr1.go b/lapack/testlapack/dlaqr1.go index 0a07e798..d670a10b 100644 --- a/lapack/testlapack/dlaqr1.go +++ b/lapack/testlapack/dlaqr1.go @@ -6,10 +6,10 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dlaqr1er interface { @@ -17,7 +17,7 @@ type Dlaqr1er interface { } func Dlaqr1Test(t *testing.T, impl Dlaqr1er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{2, 3} { for _, ldh := range []int{n, n + 1, n + 10} { diff --git a/lapack/testlapack/dlaqr23.go b/lapack/testlapack/dlaqr23.go index dfc92fc5..0ad52b81 100644 --- a/lapack/testlapack/dlaqr23.go +++ b/lapack/testlapack/dlaqr23.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -34,11 +34,11 @@ func newDlaqr23TestCase(wantt, wantz bool, n, ldh int, rnd *rand.Rand) dlaqr23Te if n <= 75 { // For small matrices any window size works because they will // always use Dlahrq inside Dlaqr23. - nw = rnd.Intn(n) + 1 + nw = rnd.IntN(n) + 1 } else { // For sufficiently large matrices generate a large enough // window to assure that the Dlaqr4 path is taken. - nw = 76 + rnd.Intn(n-75) + nw = 76 + rnd.IntN(n-75) } // Generate a random Hessenberg matrix. h := randomHessenberg(n, ldh, rnd) @@ -46,9 +46,9 @@ func newDlaqr23TestCase(wantt, wantz bool, n, ldh int, rnd *rand.Rand) dlaqr23Te // the restriction // 0 <= nw <= kbot-ktop+1 // is satisfied. - ktop := rnd.Intn(n - nw + 1) + ktop := rnd.IntN(n - nw + 1) kbot := ktop + nw - 1 - kbot += rnd.Intn(n - kbot) + kbot += rnd.IntN(n - kbot) // Make the block isolated by zeroing out the sub-diagonal elements. if ktop-1 >= 0 { h.Data[ktop*h.Stride+ktop-1] = 0 @@ -58,8 +58,8 @@ func newDlaqr23TestCase(wantt, wantz bool, n, ldh int, rnd *rand.Rand) dlaqr23Te } // Generate the rows of Z to which transformations will be applied if // wantz is true. - iloz := rnd.Intn(ktop + 1) - ihiz := kbot + rnd.Intn(n-kbot) + iloz := rnd.IntN(ktop + 1) + ihiz := kbot + rnd.IntN(n-kbot) return dlaqr23Test{ wantt: wantt, wantz: wantz, @@ -73,7 +73,7 @@ func newDlaqr23TestCase(wantt, wantz bool, n, ldh int, rnd *rand.Rand) dlaqr23Te } func Dlaqr23Test(t *testing.T, impl Dlaqr23er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Randomized tests. for _, wantt := range []bool{true, false} { @@ -267,12 +267,12 @@ func testDlaqr23(t *testing.T, impl Dlaqr23er, test dlaqr23Test, opt bool, recur v := randomGeneral(nw, nw, nw+extra, rnd) var nh int if nw > 0 { - nh = nw + rnd.Intn(nw) // nh must be at least nw. + nh = nw + rnd.IntN(nw) // nh must be at least nw. } tmat := randomGeneral(nw, nh, nh+extra, rnd) var nv int if nw > 0 { - nv = rnd.Intn(nw) + 1 + nv = rnd.IntN(nw) + 1 } wv := randomGeneral(nv, nw, nw+extra, rnd) diff --git a/lapack/testlapack/dlaqr5.go b/lapack/testlapack/dlaqr5.go index 0d5b3c67..eaeb695d 100644 --- a/lapack/testlapack/dlaqr5.go +++ b/lapack/testlapack/dlaqr5.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dlaqr5er interface { } func Dlaqr5Test(t *testing.T, impl Dlaqr5er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 6, 10, 30} { for _, extra := range []int{0, 1, 20} { for _, kacc22 := range []int{0, 1, 2} { @@ -52,8 +52,8 @@ func testDlaqr5(t *testing.T, impl Dlaqr5er, n, extra, kacc22 int, rnd *rand.Ran si[i], si[i+1] = im, -im i += 2 } - ktop := rnd.Intn(n) - kbot := rnd.Intn(n) + ktop := rnd.IntN(n) + kbot := rnd.IntN(n) if kbot < ktop { ktop, kbot = kbot, ktop } diff --git a/lapack/testlapack/dlaqr5_bench.go b/lapack/testlapack/dlaqr5_bench.go index 066483ff..f952b625 100644 --- a/lapack/testlapack/dlaqr5_bench.go +++ b/lapack/testlapack/dlaqr5_bench.go @@ -6,9 +6,8 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func Dlaqr5Benchmark(b *testing.B, impl Dlaqr5er) { @@ -17,7 +16,7 @@ func Dlaqr5Benchmark(b *testing.B, impl Dlaqr5er) { iplusj laplacian ) - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, typ := range []int{random, iplusj, laplacian} { for _, n := range []int{100, 200, 500, 1000} { h := zeros(n, n, n) diff --git a/lapack/testlapack/dlarf.go b/lapack/testlapack/dlarf.go index be190fe8..aa3bddf2 100644 --- a/lapack/testlapack/dlarf.go +++ b/lapack/testlapack/dlarf.go @@ -6,12 +6,12 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -29,7 +29,7 @@ func DlarfTest(t *testing.T, impl Dlarfer) { } func runDlarfTest(t *testing.T, impl Dlarfer, side blas.Side) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, m := range []int{0, 1, 2, 3, 4, 5, 10} { for _, n := range []int{0, 1, 2, 3, 4, 5, 10} { for _, incv := range []int{1, 4} { diff --git a/lapack/testlapack/dlarfb.go b/lapack/testlapack/dlarfb.go index 636517df..34323f94 100644 --- a/lapack/testlapack/dlarfb.go +++ b/lapack/testlapack/dlarfb.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dlarfber interface { } func DlarfbTest(t *testing.T, impl Dlarfber) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, store := range []lapack.StoreV{lapack.ColumnWise, lapack.RowWise} { for _, direct := range []lapack.Direct{lapack.Forward, lapack.Backward} { for _, side := range []blas.Side{blas.Left, blas.Right} { diff --git a/lapack/testlapack/dlarfg.go b/lapack/testlapack/dlarfg.go index 32e0a175..4a24bc6b 100644 --- a/lapack/testlapack/dlarfg.go +++ b/lapack/testlapack/dlarfg.go @@ -6,12 +6,12 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dlarfger interface { @@ -20,7 +20,7 @@ type Dlarfger interface { func DlarfgTest(t *testing.T, impl Dlarfger) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i, test := range []struct { alpha float64 n int diff --git a/lapack/testlapack/dlarft.go b/lapack/testlapack/dlarft.go index 09e81d01..3f108a65 100644 --- a/lapack/testlapack/dlarft.go +++ b/lapack/testlapack/dlarft.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dlarfter interface { } func DlarftTest(t *testing.T, impl Dlarfter) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, store := range []lapack.StoreV{lapack.ColumnWise, lapack.RowWise} { for _, direct := range []lapack.Direct{lapack.Forward, lapack.Backward} { for _, test := range []struct { diff --git a/lapack/testlapack/dlarfx.go b/lapack/testlapack/dlarfx.go index 5fd8ea66..aefe485b 100644 --- a/lapack/testlapack/dlarfx.go +++ b/lapack/testlapack/dlarfx.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlarfxer interface { @@ -18,7 +18,7 @@ type Dlarfxer interface { } func DlarfxTest(t *testing.T, impl Dlarfxer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []blas.Side{blas.Right, blas.Left} { // For m and n greater than 10 we are testing Dlarf, so avoid unnecessary work. for m := 1; m < 12; m++ { diff --git a/lapack/testlapack/dlascl.go b/lapack/testlapack/dlascl.go index b9607a0e..15242757 100644 --- a/lapack/testlapack/dlascl.go +++ b/lapack/testlapack/dlascl.go @@ -7,9 +7,9 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dlascler interface { func DlasclTest(t *testing.T, impl Dlascler) { const tol = 1e-15 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for ti, test := range []struct { m, n int }{ diff --git a/lapack/testlapack/dlaset.go b/lapack/testlapack/dlaset.go index 52cb75ae..5c6246f8 100644 --- a/lapack/testlapack/dlaset.go +++ b/lapack/testlapack/dlaset.go @@ -6,10 +6,10 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Dlaseter interface { @@ -17,7 +17,7 @@ type Dlaseter interface { } func DlasetTest(t *testing.T, impl Dlaseter) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for ti, test := range []struct { m, n int }{ diff --git a/lapack/testlapack/dlasq1.go b/lapack/testlapack/dlasq1.go index 71ef515b..5775a2b9 100644 --- a/lapack/testlapack/dlasq1.go +++ b/lapack/testlapack/dlasq1.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dlasq1er interface { @@ -22,7 +22,7 @@ type Dlasq1er interface { func Dlasq1Test(t *testing.T, impl Dlasq1er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 8, 10, 30, 50} { for typ := 0; typ <= 7; typ++ { name := fmt.Sprintf("n=%v,typ=%v", n, typ) diff --git a/lapack/testlapack/dlasq2.go b/lapack/testlapack/dlasq2.go index 4e618183..42cf5260 100644 --- a/lapack/testlapack/dlasq2.go +++ b/lapack/testlapack/dlasq2.go @@ -7,12 +7,12 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -25,7 +25,7 @@ type Dlasq2er interface { func Dlasq2Test(t *testing.T, impl Dlasq2er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 25, 50} { for k := 0; k < 10; k++ { for typ := 0; typ <= 2; typ++ { diff --git a/lapack/testlapack/dlasr.go b/lapack/testlapack/dlasr.go index 503cf07b..4cbf92c5 100644 --- a/lapack/testlapack/dlasr.go +++ b/lapack/testlapack/dlasr.go @@ -6,12 +6,12 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dlasrer interface { } func DlasrTest(t *testing.T, impl Dlasrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []blas.Side{blas.Left, blas.Right} { for _, pivot := range []lapack.Pivot{lapack.Variable, lapack.Top, lapack.Bottom} { for _, direct := range []lapack.Direct{lapack.Forward, lapack.Backward} { diff --git a/lapack/testlapack/dlassq.go b/lapack/testlapack/dlassq.go index 13c093ff..f5a2ff50 100644 --- a/lapack/testlapack/dlassq.go +++ b/lapack/testlapack/dlassq.go @@ -7,10 +7,10 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dlassqer interface { @@ -31,7 +31,7 @@ func DlassqTest(t *testing.T, impl Dlassqer) { math.NaN(), } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20, 30, 40} { for _, incx := range []int{1, 3} { for cas := 0; cas < 3; cas++ { diff --git a/lapack/testlapack/dlasv2.go b/lapack/testlapack/dlasv2.go index e9d5608a..814d2ccc 100644 --- a/lapack/testlapack/dlasv2.go +++ b/lapack/testlapack/dlasv2.go @@ -5,10 +5,10 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dlasv2er interface { @@ -16,7 +16,7 @@ type Dlasv2er interface { } func Dlasv2Test(t *testing.T, impl Dlasv2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 100; i++ { f := rnd.NormFloat64() g := rnd.NormFloat64() diff --git a/lapack/testlapack/dlasy2.go b/lapack/testlapack/dlasy2.go index ad9192c2..5705ce19 100644 --- a/lapack/testlapack/dlasy2.go +++ b/lapack/testlapack/dlasy2.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dlasy2er interface { } func Dlasy2Test(t *testing.T, impl Dlasy2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, tranl := range []bool{true, false} { for _, tranr := range []bool{true, false} { for _, isgn := range []int{1, -1} { diff --git a/lapack/testlapack/dlatbs.go b/lapack/testlapack/dlatbs.go index 314cb46a..5f79f2dd 100644 --- a/lapack/testlapack/dlatbs.go +++ b/lapack/testlapack/dlatbs.go @@ -7,12 +7,12 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dlatbser interface { @@ -22,7 +22,7 @@ type Dlatbser interface { // DlatbsTest tests Dlatbs by generating a random triangular band system and // checking that a residual for the computed solution is small. func DlatbsTest(t *testing.T, impl Dlatbser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { for _, kd := range []int{0, (n + 1) / 4, (3*n - 1) / 4, (5*n + 1) / 4} { for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { diff --git a/lapack/testlapack/dlatrd.go b/lapack/testlapack/dlatrd.go index 3940c1d5..0749098d 100644 --- a/lapack/testlapack/dlatrd.go +++ b/lapack/testlapack/dlatrd.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlatrder interface { @@ -21,7 +21,7 @@ type Dlatrder interface { func DlatrdTest(t *testing.T, impl Dlatrder) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, test := range []struct { n, nb, lda, ldw int diff --git a/lapack/testlapack/dlatrs.go b/lapack/testlapack/dlatrs.go index cd925480..7d7bca92 100644 --- a/lapack/testlapack/dlatrs.go +++ b/lapack/testlapack/dlatrs.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dlatrser interface { @@ -19,7 +19,7 @@ type Dlatrser interface { } func DlatrsTest(t *testing.T, impl Dlatrser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, trans := range []blas.Transpose{blas.Trans, blas.NoTrans} { for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 7, 10, 20, 50, 100} { diff --git a/lapack/testlapack/dlauu2.go b/lapack/testlapack/dlauu2.go index af2f642d..33e7a6c8 100644 --- a/lapack/testlapack/dlauu2.go +++ b/lapack/testlapack/dlauu2.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -32,7 +32,7 @@ func dlauuTest(t *testing.T, dlauu func(blas.Uplo, int, []float64, int), uplo bl const tol = 1e-13 bi := blas64.Implementation() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range ns { for _, lda := range []int{max(1, n), n + 11} { diff --git a/lapack/testlapack/dorg2l.go b/lapack/testlapack/dorg2l.go index b8a9ad56..95b36b54 100644 --- a/lapack/testlapack/dorg2l.go +++ b/lapack/testlapack/dorg2l.go @@ -5,10 +5,10 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dorg2ler interface { @@ -19,7 +19,7 @@ type Dorg2ler interface { func Dorg2lTest(t *testing.T, impl Dorg2ler) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, k, lda int }{ diff --git a/lapack/testlapack/dorg2r.go b/lapack/testlapack/dorg2r.go index bfbfbad6..68b5a29d 100644 --- a/lapack/testlapack/dorg2r.go +++ b/lapack/testlapack/dorg2r.go @@ -5,10 +5,10 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dorg2rer interface { @@ -17,7 +17,7 @@ type Dorg2rer interface { } func Dorg2rTest(t *testing.T, impl Dorg2rer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for ti, test := range []struct { m, n, k, lda int }{ diff --git a/lapack/testlapack/dorgbr.go b/lapack/testlapack/dorgbr.go index c2eddeab..bce3d250 100644 --- a/lapack/testlapack/dorgbr.go +++ b/lapack/testlapack/dorgbr.go @@ -5,11 +5,11 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dorgbrer interface { } func DorgbrTest(t *testing.T, impl Dorgbrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, vect := range []lapack.GenOrtho{lapack.GenerateQ, lapack.GeneratePT} { for _, test := range []struct { m, n, k, lda int diff --git a/lapack/testlapack/dorghr.go b/lapack/testlapack/dorghr.go index 0d6e3583..1a90baf6 100644 --- a/lapack/testlapack/dorghr.go +++ b/lapack/testlapack/dorghr.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dorghrer interface { @@ -21,14 +21,14 @@ type Dorghrer interface { } func DorghrTest(t *testing.T, impl Dorghrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 6, 7, 8, 23, 34} { for _, extra := range []int{0, 1, 13} { for _, optwork := range []bool{true, false} { for cas := 0; cas < 100; cas++ { - ilo := rnd.Intn(n) - ihi := rnd.Intn(n) + ilo := rnd.IntN(n) + ihi := rnd.IntN(n) if ilo > ihi { ilo, ihi = ihi, ilo } diff --git a/lapack/testlapack/dorgl2.go b/lapack/testlapack/dorgl2.go index ef7a5ea8..9fdfdfde 100644 --- a/lapack/testlapack/dorgl2.go +++ b/lapack/testlapack/dorgl2.go @@ -5,10 +5,10 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dorgl2er interface { @@ -17,7 +17,7 @@ type Dorgl2er interface { } func Dorgl2Test(t *testing.T, impl Dorgl2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n, lda int }{ diff --git a/lapack/testlapack/dorglq.go b/lapack/testlapack/dorglq.go index 3c0817ba..44aa4def 100644 --- a/lapack/testlapack/dorglq.go +++ b/lapack/testlapack/dorglq.go @@ -6,10 +6,10 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dorglqer interface { @@ -18,7 +18,7 @@ type Dorglqer interface { } func DorglqTest(t *testing.T, impl Dorglqer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // TODO(btracey): Base tests off of nb and nx. for _, test := range []struct{ m, n, k, lda int }{ {10, 10, 10, 0}, diff --git a/lapack/testlapack/dorgql.go b/lapack/testlapack/dorgql.go index ca227518..59d0d3fc 100644 --- a/lapack/testlapack/dorgql.go +++ b/lapack/testlapack/dorgql.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dorgqler interface { @@ -27,7 +27,7 @@ func DorgqlTest(t *testing.T, impl Dorgqler) { } dorg2ler, hasDorg2l := impl.(Dorg2ler) - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, m := range []int{0, 1, 2, 3, 4, 5, 7, 10, 15, 30, 50, 150} { for _, extra := range []int{0, 11} { for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { @@ -36,11 +36,11 @@ func DorgqlTest(t *testing.T, impl Dorgqler) { // For large matrices make sure that k // is large enough to trigger blocked // path. - k = 129 + rnd.Intn(m-129+1) + k = 129 + rnd.IntN(m-129+1) } else { - k = rnd.Intn(m + 1) + k = rnd.IntN(m + 1) } - n := k + rnd.Intn(m-k+1) + n := k + rnd.IntN(m-k+1) if m == 0 || n == 0 { m = 0 n = 0 diff --git a/lapack/testlapack/dorgqr.go b/lapack/testlapack/dorgqr.go index 73c68292..172381de 100644 --- a/lapack/testlapack/dorgqr.go +++ b/lapack/testlapack/dorgqr.go @@ -6,10 +6,10 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dorgqrer interface { @@ -18,7 +18,7 @@ type Dorgqrer interface { } func DorgqrTest(t *testing.T, impl Dorgqrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // TODO(btracey): Base tests off of nb and nx. for _, test := range []struct{ m, n, k, lda int }{ {10, 10, 10, 0}, diff --git a/lapack/testlapack/dorgr2.go b/lapack/testlapack/dorgr2.go index afc2c740..8e2d89c4 100644 --- a/lapack/testlapack/dorgr2.go +++ b/lapack/testlapack/dorgr2.go @@ -7,12 +7,12 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -23,7 +23,7 @@ type Dorgr2er interface { } func Dorgr2Test(t *testing.T, impl Dorgr2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, k := range []int{0, 1, 2, 5} { for _, m := range []int{k, k + 1, k + 2, k + 4} { for _, n := range []int{m, m + 1, m + 2, m + 4, m + 7} { diff --git a/lapack/testlapack/dorgtr.go b/lapack/testlapack/dorgtr.go index 215e7658..0a57e4d1 100644 --- a/lapack/testlapack/dorgtr.go +++ b/lapack/testlapack/dorgtr.go @@ -6,12 +6,12 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dorgtrer interface { @@ -22,7 +22,7 @@ type Dorgtrer interface { func DorgtrTest(t *testing.T, impl Dorgtrer) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { for _, test := range []struct { diff --git a/lapack/testlapack/dorm2r.go b/lapack/testlapack/dorm2r.go index 6fde1996..004ab4fc 100644 --- a/lapack/testlapack/dorm2r.go +++ b/lapack/testlapack/dorm2r.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dorm2rer interface { @@ -19,7 +19,7 @@ type Dorm2rer interface { } func Dorm2rTest(t *testing.T, impl Dorm2rer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []blas.Side{blas.Left, blas.Right} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { for _, test := range []struct { diff --git a/lapack/testlapack/dormbr.go b/lapack/testlapack/dormbr.go index 5555ebf1..d8b00dcd 100644 --- a/lapack/testlapack/dormbr.go +++ b/lapack/testlapack/dormbr.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dormbrer interface { } func DormbrTest(t *testing.T, impl Dormbrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() for _, vect := range []lapack.ApplyOrtho{lapack.ApplyQ, lapack.ApplyP} { for _, side := range []blas.Side{blas.Left, blas.Right} { diff --git a/lapack/testlapack/dormhr.go b/lapack/testlapack/dormhr.go index 422adcec..89c573b6 100644 --- a/lapack/testlapack/dormhr.go +++ b/lapack/testlapack/dormhr.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dormhrer interface { @@ -21,7 +21,7 @@ type Dormhrer interface { } func DormhrTest(t *testing.T, impl Dormhrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []blas.Side{blas.Left, blas.Right} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { @@ -33,8 +33,8 @@ func DormhrTest(t *testing.T, impl Dormhrer) { if side == blas.Right { nq = n } - ilo := rnd.Intn(nq) - ihi := rnd.Intn(nq) + ilo := rnd.IntN(nq) + ihi := rnd.IntN(nq) if ilo > ihi { ilo, ihi = ihi, ilo } diff --git a/lapack/testlapack/dorml2.go b/lapack/testlapack/dorml2.go index 6cabe5bd..0288ffab 100644 --- a/lapack/testlapack/dorml2.go +++ b/lapack/testlapack/dorml2.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dorml2er interface { @@ -19,7 +19,7 @@ type Dorml2er interface { } func Dorml2Test(t *testing.T, impl Dorml2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // TODO(btracey): This test is not complete, because it // doesn't test individual values of m, n, and k, instead only testing // a specific subset of possible k values. diff --git a/lapack/testlapack/dormlq.go b/lapack/testlapack/dormlq.go index 0a7fa3aa..f98918ca 100644 --- a/lapack/testlapack/dormlq.go +++ b/lapack/testlapack/dormlq.go @@ -5,11 +5,11 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dormlqer interface { @@ -18,7 +18,7 @@ type Dormlqer interface { } func DormlqTest(t *testing.T, impl Dormlqer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []blas.Side{blas.Left, blas.Right} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { for _, wl := range []worklen{minimumWork, mediumWork, optimumWork} { diff --git a/lapack/testlapack/dormqr.go b/lapack/testlapack/dormqr.go index e09ef9e3..a1404f26 100644 --- a/lapack/testlapack/dormqr.go +++ b/lapack/testlapack/dormqr.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dormqrer interface { @@ -19,7 +19,7 @@ type Dormqrer interface { } func DormqrTest(t *testing.T, impl Dormqrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []blas.Side{blas.Left, blas.Right} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { for _, test := range []struct { diff --git a/lapack/testlapack/dormr2.go b/lapack/testlapack/dormr2.go index ba20b0db..003a8c2c 100644 --- a/lapack/testlapack/dormr2.go +++ b/lapack/testlapack/dormr2.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dormr2er interface { @@ -19,7 +19,7 @@ type Dormr2er interface { } func Dormr2Test(t *testing.T, impl Dormr2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []blas.Side{blas.Left, blas.Right} { for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans} { for _, test := range []struct { diff --git a/lapack/testlapack/dpbcon.go b/lapack/testlapack/dpbcon.go index fc7b822e..4a518e8f 100644 --- a/lapack/testlapack/dpbcon.go +++ b/lapack/testlapack/dpbcon.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -25,7 +25,7 @@ type Dpbconer interface { // checking that the estimated condition number is not too different from the // condition number computed via the explicit inverse of A. func DpbconTest(t *testing.T, impl Dpbconer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { for _, kd := range []int{0, (n + 1) / 4, (3*n - 1) / 4, (5*n + 1) / 4} { for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { diff --git a/lapack/testlapack/dpbtf2.go b/lapack/testlapack/dpbtf2.go index bc38b8ba..80a967af 100644 --- a/lapack/testlapack/dpbtf2.go +++ b/lapack/testlapack/dpbtf2.go @@ -6,10 +6,10 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" - "gonum.org/v1/gonum/internal/rand" ) type Dpbtf2er interface { @@ -20,7 +20,7 @@ type Dpbtf2er interface { // by checking that the Cholesky factors multiply back to the original matrix. func Dpbtf2Test(t *testing.T, impl Dpbtf2er) { // TODO(vladimir-ch): include expected-failure test case. - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20} { for _, kd := range []int{0, (n + 1) / 4, (3*n - 1) / 4, (5*n + 1) / 4} { for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { diff --git a/lapack/testlapack/dpbtrf.go b/lapack/testlapack/dpbtrf.go index 1f25038d..155599fd 100644 --- a/lapack/testlapack/dpbtrf.go +++ b/lapack/testlapack/dpbtrf.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dpbtrfer interface { @@ -25,7 +25,7 @@ func DpbtrfTest(t *testing.T, impl Dpbtrfer) { // With the current implementation of Ilaenv the blocked code path is taken if kd > 64. // Unfortunately, with the block size nb=32 this also means that in Dpbtrf // it never happens that i2 <= 0 and the state coverage (unlike code coverage) is not complete. - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 64, 65, 66, 91, 96, 97, 101, 128, 130} { for _, kd := range []int{0, (n + 1) / 4, (3*n - 1) / 4, (5*n + 1) / 4} { for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { diff --git a/lapack/testlapack/dpbtrs.go b/lapack/testlapack/dpbtrs.go index 80e2f221..f4599aa6 100644 --- a/lapack/testlapack/dpbtrs.go +++ b/lapack/testlapack/dpbtrs.go @@ -7,12 +7,12 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dpbtrser interface { @@ -24,7 +24,7 @@ type Dpbtrser interface { // DpbtrsTest tests Dpbtrs by comparing the computed and known, generated solutions of // a linear system with a random symmetric positive definite band matrix. func DpbtrsTest(t *testing.T, impl Dpbtrser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 65, 100, 129} { for _, kd := range []int{0, (n + 1) / 4, (3*n - 1) / 4, (5*n + 1) / 4} { for _, nrhs := range []int{0, 1, 2, 5} { diff --git a/lapack/testlapack/dpocon.go b/lapack/testlapack/dpocon.go index 6850a5f1..d8a0189c 100644 --- a/lapack/testlapack/dpocon.go +++ b/lapack/testlapack/dpocon.go @@ -6,12 +6,12 @@ package testlapack import ( "log" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -83,7 +83,7 @@ func DpoconTest(t *testing.T, impl Dpoconer) { log.Printf("Dpocon cond mismatch. Want %v, got %v.", test.cond, cond) } } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() // Randomized tests compared against Dgecon. for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { diff --git a/lapack/testlapack/dpotrf.go b/lapack/testlapack/dpotrf.go index 473c626a..e66f9df7 100644 --- a/lapack/testlapack/dpotrf.go +++ b/lapack/testlapack/dpotrf.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type Dpotrfer interface { @@ -19,7 +19,7 @@ type Dpotrfer interface { func DpotrfTest(t *testing.T, impl Dpotrfer) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for tc, test := range []struct { diff --git a/lapack/testlapack/dpotri.go b/lapack/testlapack/dpotri.go index 060762a9..b9ba6d45 100644 --- a/lapack/testlapack/dpotri.go +++ b/lapack/testlapack/dpotri.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dpotrier interface { @@ -29,7 +29,7 @@ func DpotriTest(t *testing.T, impl Dpotrier) { const tol = 1e-12 bi := blas64.Implementation() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range ns { for _, lda := range []int{max(1, n), n + 11} { prefix := fmt.Sprintf("n=%v,lda=%v", n, lda) diff --git a/lapack/testlapack/dpotrs.go b/lapack/testlapack/dpotrs.go index fb3a5a92..4e16089a 100644 --- a/lapack/testlapack/dpotrs.go +++ b/lapack/testlapack/dpotrs.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dpotrser interface { @@ -22,7 +22,7 @@ type Dpotrser interface { func DpotrsTest(t *testing.T, impl Dpotrser) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { diff --git a/lapack/testlapack/dpstf2.go b/lapack/testlapack/dpstf2.go index dd4a9a2d..0382a8f3 100644 --- a/lapack/testlapack/dpstf2.go +++ b/lapack/testlapack/dpstf2.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dpstf2er interface { @@ -19,7 +19,7 @@ type Dpstf2er interface { } func Dpstf2Test(t *testing.T, impl Dpstf2er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { t.Run(uploToString(uplo), func(t *testing.T) { for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50} { diff --git a/lapack/testlapack/dpstrf.go b/lapack/testlapack/dpstrf.go index b3c4cb23..bc7c769a 100644 --- a/lapack/testlapack/dpstrf.go +++ b/lapack/testlapack/dpstrf.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dpstrfer interface { } func DpstrfTest(t *testing.T, impl Dpstrfer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { t.Run(uploToString(uplo), func(t *testing.T) { for _, n := range []int{0, 1, 2, 3, 4, 5, 31, 32, 33, 63, 64, 65, 127, 128, 129} { diff --git a/lapack/testlapack/dptcon.go b/lapack/testlapack/dptcon.go index c9838a03..14db93c4 100644 --- a/lapack/testlapack/dptcon.go +++ b/lapack/testlapack/dptcon.go @@ -7,10 +7,10 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dptconer interface { } func DptconTest(t *testing.T, impl Dptconer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50, 51, 52, 53, 54, 100} { dptconTest(t, impl, rnd, n) } diff --git a/lapack/testlapack/dptsv.go b/lapack/testlapack/dptsv.go index 5ad4201b..fb1a80ff 100644 --- a/lapack/testlapack/dptsv.go +++ b/lapack/testlapack/dptsv.go @@ -6,9 +6,8 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type Dptsver interface { @@ -16,7 +15,7 @@ type Dptsver interface { } func DptsvTest(t *testing.T, impl Dptsver) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50, 51, 52, 53, 54, 100} { for _, nrhs := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50} { for _, ldb := range []int{max(1, nrhs), nrhs + 3} { diff --git a/lapack/testlapack/dpttrf.go b/lapack/testlapack/dpttrf.go index 9b8beda9..dd4ad3c2 100644 --- a/lapack/testlapack/dpttrf.go +++ b/lapack/testlapack/dpttrf.go @@ -7,9 +7,9 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -21,7 +21,7 @@ type Dpttrfer interface { // positive definite tridiagonal matrices by checking that the Cholesky factors // multiply back to the original matrix. func DpttrfTest(t *testing.T, impl Dpttrfer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50, 51, 52, 53, 54, 100} { dpttrfTest(t, impl, rnd, n) } diff --git a/lapack/testlapack/dpttrs.go b/lapack/testlapack/dpttrs.go index e823876a..91fdecee 100644 --- a/lapack/testlapack/dpttrs.go +++ b/lapack/testlapack/dpttrs.go @@ -6,10 +6,10 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dpttrser interface { } func DpttrsTest(t *testing.T, impl Dpttrser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50, 51, 52, 53, 54, 100} { for _, nrhs := range []int{0, 1, 2, 3, 4, 5, 10, 20, 50} { for _, ldb := range []int{max(1, nrhs), nrhs + 3} { diff --git a/lapack/testlapack/dsteqr.go b/lapack/testlapack/dsteqr.go index 156e2be5..6c2d2c6a 100644 --- a/lapack/testlapack/dsteqr.go +++ b/lapack/testlapack/dsteqr.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dsteqrer interface { } func DsteqrTest(t *testing.T, impl Dsteqrer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, compz := range []lapack.EVComp{lapack.EVOrig, lapack.EVTridiag} { for _, test := range []struct { n, lda int diff --git a/lapack/testlapack/dsterf.go b/lapack/testlapack/dsterf.go index 40c2236c..ecc4f3d4 100644 --- a/lapack/testlapack/dsterf.go +++ b/lapack/testlapack/dsterf.go @@ -7,13 +7,13 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -61,7 +61,7 @@ func DsterfTest(t *testing.T, impl Dsterfer) { } } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Probabilistic tests. for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 10, 50} { for typ := 0; typ <= 8; typ++ { diff --git a/lapack/testlapack/dsyev.go b/lapack/testlapack/dsyev.go index 5ce68f49..2e793a86 100644 --- a/lapack/testlapack/dsyev.go +++ b/lapack/testlapack/dsyev.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,7 +19,7 @@ type Dsyever interface { } func DsyevTest(t *testing.T, impl Dsyever) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { for _, test := range []struct { n, lda int diff --git a/lapack/testlapack/dsytd2.go b/lapack/testlapack/dsytd2.go index 22a9bcf7..532d71f0 100644 --- a/lapack/testlapack/dsytd2.go +++ b/lapack/testlapack/dsytd2.go @@ -6,11 +6,11 @@ package testlapack import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dsytd2er interface { @@ -20,7 +20,7 @@ type Dsytd2er interface { func Dsytd2Test(t *testing.T, impl Dsytd2er) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, test := range []struct { n, lda int diff --git a/lapack/testlapack/dsytrd.go b/lapack/testlapack/dsytrd.go index e151be32..6b123e18 100644 --- a/lapack/testlapack/dsytrd.go +++ b/lapack/testlapack/dsytrd.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -24,7 +24,7 @@ type Dsytrder interface { func DsytrdTest(t *testing.T, impl Dsytrder) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc, test := range []struct { n, lda int }{ diff --git a/lapack/testlapack/dtbtrs.go b/lapack/testlapack/dtbtrs.go index b3d3f3d9..e37dc9e1 100644 --- a/lapack/testlapack/dtbtrs.go +++ b/lapack/testlapack/dtbtrs.go @@ -7,12 +7,12 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -21,7 +21,7 @@ type Dtbtrser interface { } func DtbtrsTest(t *testing.T, impl Dtbtrser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { name := transToString(trans) @@ -69,7 +69,7 @@ func dtbtrsTest(t *testing.T, impl Dtbtrser, rnd *rand.Rand, uplo blas.Uplo, tra a[i] = rnd.NormFloat64() } if singular { - i := rnd.Intn(n) + i := rnd.IntN(n) if uplo == blas.Upper { a[i*lda] = 0 } else { diff --git a/lapack/testlapack/dtgsja.go b/lapack/testlapack/dtgsja.go index f2ad79ec..b5380eb0 100644 --- a/lapack/testlapack/dtgsja.go +++ b/lapack/testlapack/dtgsja.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dtgsjaer interface { func DtgsjaTest(t *testing.T, impl Dtgsjaer) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { m, p, n, k, l, lda, ldb, ldu, ldv, ldq int diff --git a/lapack/testlapack/dtrcon.go b/lapack/testlapack/dtrcon.go index 403aee14..93ee3b71 100644 --- a/lapack/testlapack/dtrcon.go +++ b/lapack/testlapack/dtrcon.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -22,7 +22,7 @@ type Dtrconer interface { } func DtrconTest(t *testing.T, impl Dtrconer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { for _, uplo := range []blas.Uplo{blas.Lower, blas.Upper} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { diff --git a/lapack/testlapack/dtrevc3.go b/lapack/testlapack/dtrevc3.go index 2b7a5c13..46b22f8f 100644 --- a/lapack/testlapack/dtrevc3.go +++ b/lapack/testlapack/dtrevc3.go @@ -7,11 +7,11 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -20,7 +20,7 @@ type Dtrevc3er interface { } func Dtrevc3Test(t *testing.T, impl Dtrevc3er) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, side := range []lapack.EVSide{lapack.EVRight, lapack.EVLeft, lapack.EVBoth} { var name string diff --git a/lapack/testlapack/dtrexc.go b/lapack/testlapack/dtrexc.go index 33bc0bb5..5d986daa 100644 --- a/lapack/testlapack/dtrexc.go +++ b/lapack/testlapack/dtrexc.go @@ -6,11 +6,11 @@ package testlapack import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -19,15 +19,15 @@ type Dtrexcer interface { } func DtrexcTest(t *testing.T, impl Dtrexcer) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 6, 10, 18, 31, 53} { for _, extra := range []int{0, 3} { for cas := 0; cas < 100; cas++ { var ifst, ilst int if n > 0 { - ifst = rnd.Intn(n) - ilst = rnd.Intn(n) + ifst = rnd.IntN(n) + ilst = rnd.IntN(n) } dtrexcTest(t, impl, rnd, n, ifst, ilst, extra) } diff --git a/lapack/testlapack/dtrti2.go b/lapack/testlapack/dtrti2.go index dd71d844..9dd0e94f 100644 --- a/lapack/testlapack/dtrti2.go +++ b/lapack/testlapack/dtrti2.go @@ -5,12 +5,12 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) type Dtrti2er interface { @@ -88,7 +88,7 @@ func Dtrti2Test(t *testing.T, impl Dtrti2er) { t.Errorf("Matrix inverse mismatch. Want %v, got %v.", test.ans, test.a) } } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { diff --git a/lapack/testlapack/dtrtri.go b/lapack/testlapack/dtrtri.go index 66d32714..b6ebaf79 100644 --- a/lapack/testlapack/dtrtri.go +++ b/lapack/testlapack/dtrtri.go @@ -5,11 +5,11 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) type Dtrtrier interface { @@ -18,7 +18,7 @@ type Dtrtrier interface { func DtrtriTest(t *testing.T, impl Dtrtrier) { const tol = 1e-10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) bi := blas64.Implementation() for _, uplo := range []blas.Uplo{blas.Upper, blas.Lower} { for _, diag := range []blas.Diag{blas.NonUnit, blas.Unit} { diff --git a/lapack/testlapack/dtrtrs.go b/lapack/testlapack/dtrtrs.go index ccfe05e8..992f54c6 100644 --- a/lapack/testlapack/dtrtrs.go +++ b/lapack/testlapack/dtrtrs.go @@ -7,12 +7,12 @@ package testlapack import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -21,7 +21,7 @@ type Dtrtrser interface { } func DtrtrsTest(t *testing.T, impl Dtrtrser) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []blas.Transpose{blas.NoTrans, blas.Trans, blas.ConjTrans} { name := transToString(trans) @@ -67,7 +67,7 @@ func dtrtrsTest(t *testing.T, impl Dtrtrser, rnd *rand.Rand, uplo blas.Uplo, tra a[i] = rnd.NormFloat64() } if singular { - i := rnd.Intn(n) + i := rnd.IntN(n) a[i*lda+i] = 0 } aCopy := make([]float64, len(a)) diff --git a/lapack/testlapack/general.go b/lapack/testlapack/general.go index cf100d34..7a37d9d4 100644 --- a/lapack/testlapack/general.go +++ b/lapack/testlapack/general.go @@ -8,11 +8,11 @@ import ( "fmt" "math" "math/cmplx" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack" ) @@ -1203,8 +1203,8 @@ func isUpperTriangular(a blas64.General) bool { func unbalancedSparseGeneral(m, n, stride int, nonzeros int, rnd *rand.Rand) blas64.General { a := zeros(m, n, stride) for k := 0; k < nonzeros; k++ { - i := rnd.Intn(n) - j := rnd.Intn(n) + i := rnd.IntN(n) + j := rnd.IntN(n) if rnd.Float64() < 0.5 { a.Data[i*stride+j] = float64(i+1) * rnd.NormFloat64() } else { diff --git a/lapack/testlapack/matgen.go b/lapack/testlapack/matgen.go index 5ab1dc94..b35f8601 100644 --- a/lapack/testlapack/matgen.go +++ b/lapack/testlapack/matgen.go @@ -6,11 +6,11 @@ package testlapack import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) // Dlatm1 computes the entries of dst as specified by mode, cond and rsign. diff --git a/lapack/testlapack/matgen_test.go b/lapack/testlapack/matgen_test.go index a701ccbd..08783f0c 100644 --- a/lapack/testlapack/matgen_test.go +++ b/lapack/testlapack/matgen_test.go @@ -5,15 +5,15 @@ package testlapack import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) func TestDlagsy(t *testing.T) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { for _, lda := range []int{0, 2*n + 1} { if lda == 0 { @@ -41,7 +41,7 @@ func TestDlagsy(t *testing.T) { func TestDlagge(t *testing.T) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{0, 1, 2, 3, 4, 5, 10, 50} { for _, lda := range []int{0, 2*n + 1} { if lda == 0 { @@ -70,7 +70,7 @@ func TestDlagge(t *testing.T) { func TestRandomOrthogonal(t *testing.T) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 1; n <= 20; n++ { q := randomOrthogonal(n, rnd) if resid := residualOrthogonal(q, false); resid > tol { diff --git a/lapack/testlapack/test_matrices.go b/lapack/testlapack/test_matrices.go index 2853572b..0214037b 100644 --- a/lapack/testlapack/test_matrices.go +++ b/lapack/testlapack/test_matrices.go @@ -6,9 +6,9 @@ package testlapack import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) // A123 is the non-symmetric singular matrix diff --git a/mat/cdense_test.go b/mat/cdense_test.go index 4b79888b..3ad5f75d 100644 --- a/mat/cdense_test.go +++ b/mat/cdense_test.go @@ -6,9 +6,8 @@ package mat import ( "math/cmplx" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestCDenseNewAtSet(t *testing.T) { @@ -56,7 +55,7 @@ func TestCDenseNewAtSet(t *testing.T) { func TestCDenseConjElem(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for r := 1; r <= 8; r++ { for c := 1; c <= 8; c++ { diff --git a/mat/cholesky_test.go b/mat/cholesky_test.go index 8c5f5291..ab5183d1 100644 --- a/mat/cholesky_test.go +++ b/mat/cholesky_test.go @@ -7,11 +7,11 @@ package mat import ( "fmt" "math" + "math/rand/v2" "strconv" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestCholesky(t *testing.T) { @@ -331,7 +331,7 @@ func TestCloneCholesky(t *testing.T) { func TestCholeskyInverseTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 3, 5, 9} { data := make([]float64, n*n) for i := range data { @@ -364,7 +364,7 @@ func TestCholeskyInverseTo(t *testing.T) { func TestCholeskySymRankOne(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 7, 10, 20, 50, 100} { for k := 0; k < 50; k++ { // Construct a random positive definite matrix. @@ -628,7 +628,7 @@ func equalApproxChol(a, b *Cholesky, matTol, condTol float64) bool { func BenchmarkCholeskyFactorize(b *testing.B) { for _, n := range []int{10, 100, 1000} { b.Run("n="+strconv.Itoa(n), func(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) data := make([]float64, n*n) for i := range data { @@ -652,7 +652,7 @@ func BenchmarkCholeskyFactorize(b *testing.B) { func BenchmarkCholeskyToSym(b *testing.B) { for _, n := range []int{10, 100, 1000} { b.Run("n="+strconv.Itoa(n), func(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) data := make([]float64, n*n) for i := range data { @@ -680,7 +680,7 @@ func BenchmarkCholeskyToSym(b *testing.B) { func BenchmarkCholeskyInverseTo(b *testing.B) { for _, n := range []int{10, 100, 1000} { b.Run("n="+strconv.Itoa(n), func(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) data := make([]float64, n*n) for i := range data { @@ -715,7 +715,7 @@ func TestBandCholeskySolveTo(t *testing.T) { nrhs = 4 tol = 1e-14 ) - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 5, 10} { for _, k := range []int{0, 1, n / 2, n - 1} { k := min(k, n-1) @@ -781,7 +781,7 @@ func TestBandCholeskySolveVecTo(t *testing.T) { t.Parallel() const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 5, 10} { for _, k := range []int{0, 1, n / 2, n - 1} { k := min(k, n-1) @@ -845,7 +845,7 @@ func TestBandCholeskyAt(t *testing.T) { t.Parallel() const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 5, 10} { for _, k := range []int{0, 1, n / 2, n - 1} { k := min(k, n-1) @@ -883,7 +883,7 @@ func TestBandCholeskyDet(t *testing.T) { t.Parallel() const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 5, 10} { for _, k := range []int{0, 1, n / 2, n - 1} { k := min(k, n-1) @@ -927,7 +927,7 @@ func TestPivotedCholesky(t *testing.T) { t.Parallel() const tol = 1e-14 - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, n := range []int{1, 2, 3, 4, 5, 10} { for _, rank := range []int{int(0.3 * float64(n)), int(0.7 * float64(n)), n} { name := fmt.Sprintf("n=%d, rank=%d", n, rank) @@ -1010,7 +1010,7 @@ func TestPivotedCholeskySolveTo(t *testing.T) { nrhs = 4 tol = 1e-14 ) - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 5, 10} { a := NewSymDense(n, nil) for i := 0; i < n; i++ { @@ -1073,7 +1073,7 @@ func TestPivotedCholeskySolveVecTo(t *testing.T) { t.Parallel() const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 5, 10} { a := NewSymDense(n, nil) diff --git a/mat/dense_test.go b/mat/dense_test.go index a1ce8612..b7dc39f4 100644 --- a/mat/dense_test.go +++ b/mat/dense_test.go @@ -7,13 +7,13 @@ package mat import ( "fmt" "math" + "math/rand/v2" "reflect" "strings" "testing" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat/combin" ) @@ -2082,7 +2082,7 @@ func TestDenseInverse(t *testing.T) { // Randomized tests const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, recvSameAsA := range []bool{false, true} { for _, trans := range []bool{false, true} { if trans && recvSameAsA { @@ -2154,7 +2154,7 @@ func TestDensePermutation(t *testing.T) { } func TestDensePermuteRows(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for m := 1; m <= 5; m++ { for idx, perm := range combin.Permutations(m, m) { // Construct a permutation matrix P from perm. @@ -2210,7 +2210,7 @@ func TestDensePermuteRows(t *testing.T) { } func TestDensePermuteCols(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 1; n <= 5; n++ { for idx, perm := range combin.Permutations(n, n) { // Construct a permutation matrix P from perm. @@ -2276,7 +2276,7 @@ func BenchmarkMulDense1000Tenth(b *testing.B) { denseMulBench(b, 1000, 0.1) func BenchmarkMulDense1000Hundredth(b *testing.B) { denseMulBench(b, 1000, 0.01) } func BenchmarkMulDense1000Thousandth(b *testing.B) { denseMulBench(b, 1000, 0.001) } func denseMulBench(b *testing.B, size int, rho float64) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) b.StopTimer() a, _ := randDense(size, rho, src) d, _ := randDense(size, rho, src) @@ -2295,7 +2295,7 @@ func BenchmarkPreMulDense1000Tenth(b *testing.B) { densePreMulBench(b, 1000 func BenchmarkPreMulDense1000Hundredth(b *testing.B) { densePreMulBench(b, 1000, 0.01) } func BenchmarkPreMulDense1000Thousandth(b *testing.B) { densePreMulBench(b, 1000, 0.001) } func densePreMulBench(b *testing.B, size int, rho float64) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) b.StopTimer() a, _ := randDense(size, rho, src) d, _ := randDense(size, rho, src) @@ -2311,7 +2311,7 @@ func BenchmarkDenseRow100(b *testing.B) { rowDenseBench(b, 100) } func BenchmarkDenseRow1000(b *testing.B) { rowDenseBench(b, 1000) } func rowDenseBench(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) a, _ := randDense(size, 1, src) _, c := a.Dims() dst := make([]float64, c) @@ -2327,7 +2327,7 @@ func BenchmarkDenseExp100(b *testing.B) { expDenseBench(b, 100) } func BenchmarkDenseExp1000(b *testing.B) { expDenseBench(b, 1000) } func expDenseBench(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) a, _ := randDense(size, 1, src) b.ResetTimer() @@ -2360,7 +2360,7 @@ func BenchmarkDensePow100_9(b *testing.B) { powDenseBench(b, 100, 9) } func BenchmarkDensePow1000_9(b *testing.B) { powDenseBench(b, 1000, 9) } func powDenseBench(b *testing.B, size, n int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) a, _ := randDense(size, 1, src) b.ResetTimer() @@ -2377,7 +2377,7 @@ func BenchmarkDenseMulTransDense1000Tenth(b *testing.B) { denseMulTransBenc func BenchmarkDenseMulTransDense1000Hundredth(b *testing.B) { denseMulTransBench(b, 1000, 0.01) } func BenchmarkDenseMulTransDense1000Thousandth(b *testing.B) { denseMulTransBench(b, 1000, 0.001) } func denseMulTransBench(b *testing.B, size int, rho float64) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) b.StopTimer() a, _ := randDense(size, rho, src) d, _ := randDense(size, rho, src) @@ -2398,7 +2398,7 @@ func BenchmarkDenseMulTransDenseSym1000Thousandth(b *testing.B) { denseMulTransSymBench(b, 1000, 0.001) } func denseMulTransSymBench(b *testing.B, size int, rho float64) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) b.StopTimer() a, _ := randDense(size, rho, src) b.StartTimer() @@ -2414,7 +2414,7 @@ func BenchmarkDenseSum1000(b *testing.B) { denseSumBench(b, 1000) } var denseSumForBench float64 func denseSumBench(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) a, _ := randDense(size, 1.0, src) b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/mat/diagonal_test.go b/mat/diagonal_test.go index aca33d36..494e2a3a 100644 --- a/mat/diagonal_test.go +++ b/mat/diagonal_test.go @@ -6,11 +6,11 @@ package mat import ( "math" + "math/rand/v2" "reflect" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) func TestNewDiagDense(t *testing.T) { diff --git a/mat/eigen_test.go b/mat/eigen_test.go index 00ce5527..ec13fc9c 100644 --- a/mat/eigen_test.go +++ b/mat/eigen_test.go @@ -6,11 +6,11 @@ package mat import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) func TestEigen(t *testing.T) { @@ -172,7 +172,7 @@ func TestEigenSym(t *testing.T) { } // Randomized tests - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 5, 10, 70} { for cas := 0; cas < 10; cas++ { a := make([]float64, n*n) diff --git a/mat/gsvd_test.go b/mat/gsvd_test.go index 83225158..2f9296f0 100644 --- a/mat/gsvd_test.go +++ b/mat/gsvd_test.go @@ -6,11 +6,11 @@ package mat import ( "fmt" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestGSVD(t *testing.T) { @@ -39,7 +39,7 @@ func TestGSVD(t *testing.T) { t.Run(fmt.Sprintf("%v", test), func(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for trial := 0; trial < 10; trial++ { a := NewDense(m, n, nil) for i := range a.mat.Data { diff --git a/mat/hogsvd_test.go b/mat/hogsvd_test.go index d8f0dec8..1c8db89e 100644 --- a/mat/hogsvd_test.go +++ b/mat/hogsvd_test.go @@ -5,15 +5,14 @@ package mat import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestHOGSVD(t *testing.T) { t.Parallel() const tol = 1e-10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { r, c int }{ diff --git a/mat/inner_test.go b/mat/inner_test.go index 1a578c1a..b3e1f5d9 100644 --- a/mat/inner_test.go +++ b/mat/inner_test.go @@ -6,11 +6,11 @@ package mat import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/blas/testblas" - "gonum.org/v1/gonum/internal/rand" ) func TestInner(t *testing.T) { @@ -154,7 +154,7 @@ func makeVecDenseInc(inc int, f []float64) *VecDense { } func benchmarkInner(b *testing.B, m, n int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) x := NewVecDense(m, nil) randomSlice(x.mat.Data, src) y := NewVecDense(n, nil) diff --git a/mat/list_test.go b/mat/list_test.go index 19577bd7..a221965e 100644 --- a/mat/list_test.go +++ b/mat/list_test.go @@ -9,6 +9,7 @@ package mat import ( "fmt" "math" + "math/rand/v2" "reflect" "testing" @@ -16,7 +17,6 @@ import ( "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) // legalSizeSameRectangular returns whether the two matrices have the same rectangular shape. @@ -1122,7 +1122,7 @@ func testOneInputFunc(t *testing.T, // legalSize returns true if the size is valid for the function. legalSize func(r, c int) bool, ) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, aMat := range testMatrices { for _, test := range sizes { // Skip the test if the argument would not be assignable to the @@ -1287,7 +1287,7 @@ func testTwoInputFunc(t *testing.T, // legalSize returns true if the sizes are valid for the function. legalSize func(ar, ac, br, bc int) bool, ) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, aMat := range testMatrices { for _, bMat := range testMatrices { // Loop over all of the size combinations (bigger, smaller, etc.). @@ -1374,7 +1374,7 @@ func testOneInput(t *testing.T, // tol is the tolerance for equality when comparing method results. tol float64, ) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, aMat := range testMatrices { for _, test := range sizes { // Skip the test if the argument would not be assignable to the @@ -1533,7 +1533,7 @@ func testTwoInput(t *testing.T, // tol is the tolerance for equality when comparing method results. tol float64, ) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, aMat := range testMatrices { for _, bMat := range testMatrices { // Loop over all of the size combinations (bigger, smaller, etc.). diff --git a/mat/lq_test.go b/mat/lq_test.go index 6b9b3796..95d5dce1 100644 --- a/mat/lq_test.go +++ b/mat/lq_test.go @@ -5,15 +5,14 @@ package mat import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestLQ(t *testing.T) { t.Parallel() const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { m, n int }{ @@ -57,7 +56,7 @@ func TestLQ(t *testing.T) { func TestLQSolveTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []bool{false, true} { for _, test := range []struct { m, n, bc int @@ -120,7 +119,7 @@ func TestLQSolveTo(t *testing.T) { func TestLQSolveToVec(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []bool{false, true} { for _, test := range []struct { m, n int diff --git a/mat/lu_test.go b/mat/lu_test.go index 62d99b6f..b7dd72a6 100644 --- a/mat/lu_test.go +++ b/mat/lu_test.go @@ -5,15 +5,14 @@ package mat import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestLU(t *testing.T) { t.Parallel() const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 10, 11, 50} { // Construct a random matrix A. a := NewDense(n, n, nil) @@ -48,7 +47,7 @@ func TestLU(t *testing.T) { func TestLURankOne(t *testing.T) { t.Parallel() const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{1, 2, 3, 4, 5, 10, 50} { // Construct a random matrix A. a := NewDense(n, n, nil) @@ -90,7 +89,7 @@ func TestLURankOne(t *testing.T) { func TestLUSolveTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { n, bc int }{ @@ -151,7 +150,7 @@ func TestLUSolveToCond(t *testing.T) { func TestLUSolveVecTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, n := range []int{5, 10} { a := NewDense(n, n, nil) for i := 0; i < n; i++ { diff --git a/mat/matrix_test.go b/mat/matrix_test.go index 25fda0cd..47b36f40 100644 --- a/mat/matrix_test.go +++ b/mat/matrix_test.go @@ -7,13 +7,13 @@ package mat import ( "fmt" "math" + "math/rand/v2" "reflect" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func panics(fn func()) (panicked bool, message string) { @@ -699,7 +699,7 @@ func TestMulVecToer(t *testing.T) { t.Parallel() const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) random := func(n int) []float64 { d := make([]float64, n) for i := range d { diff --git a/mat/mul_test.go b/mat/mul_test.go index 8b95ca1c..bbff39c9 100644 --- a/mat/mul_test.go +++ b/mat/mul_test.go @@ -5,18 +5,18 @@ package mat import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) // TODO: Need to add tests where one is overwritten. func TestMulTypes(t *testing.T) { t.Parallel() - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for _, test := range []struct { ar int ac int diff --git a/mat/pool_test.go b/mat/pool_test.go index ef82fbb6..ea4837bc 100644 --- a/mat/pool_test.go +++ b/mat/pool_test.go @@ -6,10 +6,9 @@ package mat import ( "math" + "math/rand/v2" "reflect" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestPool(t *testing.T) { @@ -18,7 +17,7 @@ func TestPool(t *testing.T) { for j := 1; j < 10; j++ { m := NewDense(i, j, nil) for k := 0; k < 5; k++ { - work := make([]*Dense, rand.Intn(10)+1) + work := make([]*Dense, rand.IntN(10)+1) for l := range work { w := getDenseWorkspace(i, j, true) if !reflect.DeepEqual(w.mat, m.mat) { @@ -73,7 +72,7 @@ func BenchmarkMulWorkspaceDense1000Tenth(b *testing.B) { denseMulWorkspaceB func BenchmarkMulWorkspaceDense1000Hundredth(b *testing.B) { denseMulWorkspaceBench(b, 1000, 0.01) } func BenchmarkMulWorkspaceDense1000Thousandth(b *testing.B) { denseMulWorkspaceBench(b, 1000, 0.001) } func denseMulWorkspaceBench(b *testing.B, size int, rho float64) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) b.StopTimer() a, _ := randDense(size, rho, src) d, _ := randDense(size, rho, src) diff --git a/mat/product_test.go b/mat/product_test.go index a589a383..b1f8921c 100644 --- a/mat/product_test.go +++ b/mat/product_test.go @@ -6,9 +6,8 @@ package mat import ( "fmt" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type dims struct{ r, c int } @@ -92,7 +91,7 @@ var productTests = []struct { func TestProduct(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range productTests { dimensions := test.factors if dimensions == nil && test.n > 0 { @@ -101,7 +100,7 @@ func TestProduct(t *testing.T) { if i != 0 { dimensions[i].r = dimensions[i-1].c } - dimensions[i].c = rnd.Intn(50) + 1 + dimensions[i].c = rnd.IntN(50) + 1 } dimensions[0].r = test.product.r dimensions[test.n-1].c = test.product.c diff --git a/mat/qr_test.go b/mat/qr_test.go index 3a7f9752..07532c29 100644 --- a/mat/qr_test.go +++ b/mat/qr_test.go @@ -6,15 +6,15 @@ package mat import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) func TestQR(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n int big bool @@ -107,7 +107,7 @@ func isOrthonormal(q *Dense, tol float64) bool { func TestQRSolveTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []bool{false, true} { for _, test := range []struct { m, n, bc int @@ -170,7 +170,7 @@ func TestQRSolveTo(t *testing.T) { func TestQRSolveVecTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, trans := range []bool{false, true} { for _, test := range []struct { m, n int diff --git a/mat/shadow_test.go b/mat/shadow_test.go index d80332e9..93e27050 100644 --- a/mat/shadow_test.go +++ b/mat/shadow_test.go @@ -5,9 +5,8 @@ package mat import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestDenseOverlaps(t *testing.T) { @@ -17,7 +16,7 @@ func TestDenseOverlaps(t *testing.T) { *Dense } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for r := 1; r < 20; r++ { for c := 1; c < 20; c++ { @@ -34,14 +33,14 @@ func TestDenseOverlaps(t *testing.T) { var views [2]view for k := range views { if r > 1 { - views[k].i = rnd.Intn(r - 1) - views[k].r = rnd.Intn(r-views[k].i-1) + 1 + views[k].i = rnd.IntN(r - 1) + views[k].r = rnd.IntN(r-views[k].i-1) + 1 } else { views[k].r = 1 } if c > 1 { - views[k].j = rnd.Intn(c - 1) - views[k].c = rnd.Intn(c-views[k].j-1) + 1 + views[k].j = rnd.IntN(c - 1) + views[k].c = rnd.IntN(c-views[k].j-1) + 1 } else { views[k].c = 1 } diff --git a/mat/solve_test.go b/mat/solve_test.go index 9c9034f4..2cb9522b 100644 --- a/mat/solve_test.go +++ b/mat/solve_test.go @@ -5,14 +5,13 @@ package mat import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestSolve(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Hand-coded cases. for _, test := range []struct { a [][]float64 @@ -248,7 +247,7 @@ func TestSolve(t *testing.T) { func TestSolveVec(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { m, n int }{ diff --git a/mat/svd_test.go b/mat/svd_test.go index c2c1dfa4..672b7e63 100644 --- a/mat/svd_test.go +++ b/mat/svd_test.go @@ -5,15 +5,15 @@ package mat import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) func TestSVD(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Hand coded tests for _, test := range []struct { a *Dense @@ -214,7 +214,7 @@ func extractSVD(svd *SVD) (s []float64, u, v *Dense) { func TestSVDSolveTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Hand-coded cases. for i, test := range []struct { a []float64 @@ -478,7 +478,7 @@ func TestSVDSolveTo(t *testing.T) { func TestSVDSolveVecTo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Hand-coded cases. for i, test := range []struct { a []float64 diff --git a/mat/symmetric_test.go b/mat/symmetric_test.go index 61e03b7a..f5b5edf9 100644 --- a/mat/symmetric_test.go +++ b/mat/symmetric_test.go @@ -6,6 +6,7 @@ package mat import ( "fmt" + "math/rand/v2" "os" "reflect" "testing" @@ -13,7 +14,6 @@ import ( "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestNewSymmetric(t *testing.T) { @@ -176,7 +176,7 @@ func TestSymDiagView(t *testing.T) { func TestSymAdd(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { n int }{ @@ -239,7 +239,7 @@ func TestSymAdd(t *testing.T) { func TestCopy(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { n int }{ @@ -288,7 +288,7 @@ func TestSymCopyPanic(t *testing.T) { func TestSymRankOne(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) const tol = 1e-15 for _, test := range []struct { @@ -388,7 +388,7 @@ func TestIssue250SymRankOne(t *testing.T) { func TestRankTwo(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { n int }{ @@ -739,7 +739,7 @@ func TestPowPSD(t *testing.T) { } // Compare with Dense.Pow - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for dim := 2; dim < 10; dim++ { for pow := 2; pow < 6; pow++ { a := NewDense(dim, dim, nil) @@ -772,7 +772,7 @@ func BenchmarkSymSum1000(b *testing.B) { symSumBench(b, 1000) } var symSumForBench float64 func symSumBench(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) a := randSymDense(size, src) b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/mat/triangular_test.go b/mat/triangular_test.go index 1ea4db2a..28223864 100644 --- a/mat/triangular_test.go +++ b/mat/triangular_test.go @@ -7,12 +7,12 @@ package mat import ( "fmt" "math" + "math/rand/v2" "reflect" "testing" "gonum.org/v1/gonum/blas" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" ) func TestNewTriangular(t *testing.T) { @@ -203,10 +203,10 @@ func TestTriDiagView(t *testing.T) { func TestTriDenseCopy(t *testing.T) { t.Parallel() - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) rnd := rand.New(src) for i := 0; i < 100; i++ { - size := rnd.Intn(100) + size := rnd.IntN(100) r, err := randDense(size, 0.9, src) if size == 0 { if err != ErrZeroLength { @@ -256,10 +256,10 @@ func TestTriDenseCopy(t *testing.T) { func TestTriTriDenseCopy(t *testing.T) { t.Parallel() - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) rnd := rand.New(src) for i := 0; i < 100; i++ { - size := rnd.Intn(100) + size := rnd.IntN(100) r, err := randDense(size, 1, src) if size == 0 { if err != ErrZeroLength { @@ -311,7 +311,7 @@ func TestTriTriDenseCopy(t *testing.T) { func TestTriInverse(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, kind := range []TriKind{Upper, Lower} { for _, n := range []int{1, 3, 5, 9} { data := make([]float64, n*n) @@ -530,7 +530,7 @@ func TestCopySymIntoTriangle(t *testing.T) { func TestTriSliceTri(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { n, start1, span1, start2, span2 int }{ @@ -611,7 +611,7 @@ func TestTriSliceTri(t *testing.T) { var triSumForBench float64 func BenchmarkTriSum(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 100; n <= 1600; n *= 2 { a := randTriDense(n, rnd) b.Run(fmt.Sprintf("BenchmarkTriSum%d", n), func(b *testing.B) { @@ -625,7 +625,7 @@ func BenchmarkTriSum(b *testing.B) { var triProductForBench *TriDense func BenchmarkTriMul(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 100; n <= 1600; n *= 2 { triProductForBench = NewTriDense(n, Upper, nil) a := randTriDense(n, rnd) @@ -639,7 +639,7 @@ func BenchmarkTriMul(b *testing.B) { } func BenchmarkTriMulDiag(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 100; n <= 1600; n *= 2 { triProductForBench = NewTriDense(n, Upper, nil) a := randTriDense(n, rnd) @@ -653,7 +653,7 @@ func BenchmarkTriMulDiag(b *testing.B) { } func BenchmarkTriMul2Diag(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 100; n <= 1600; n *= 2 { triProductForBench = NewTriDense(n, Upper, nil) a := randDiagDense(n, rnd) diff --git a/mat/tridiag_test.go b/mat/tridiag_test.go index f50699b7..90225a0e 100644 --- a/mat/tridiag_test.go +++ b/mat/tridiag_test.go @@ -6,10 +6,10 @@ package mat import ( "fmt" + "math/rand/v2" "reflect" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/lapack/lapack64" ) @@ -328,7 +328,7 @@ func TestTridiagSolveTo(t *testing.T) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) random := func(n int) []float64 { d := make([]float64, n) for i := range d { @@ -418,7 +418,7 @@ func TestTridiagSolveVecTo(t *testing.T) { const tol = 1e-13 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) random := func(n int) []float64 { d := make([]float64, n) for i := range d { diff --git a/mat/vector_test.go b/mat/vector_test.go index bedec6bc..ead187f0 100644 --- a/mat/vector_test.go +++ b/mat/vector_test.go @@ -5,11 +5,11 @@ package mat import ( + "math/rand/v2" "reflect" "testing" "gonum.org/v1/gonum/blas/blas64" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat/combin" ) @@ -483,7 +483,7 @@ func TestVecDenseDivElem(t *testing.T) { } func TestVecDensePermute(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for n := 1; n <= 6; n++ { for k, perm := range combin.Permutations(n, n) { v := NewVecDense(n, nil) @@ -533,7 +533,7 @@ func BenchmarkAddScaledVec1000Inc20(b *testing.B) { addScaledVecBench(b, 1000, func BenchmarkAddScaledVec10000Inc20(b *testing.B) { addScaledVecBench(b, 10000, 20) } func BenchmarkAddScaledVec100000Inc20(b *testing.B) { addScaledVecBench(b, 100000, 20) } func addScaledVecBench(b *testing.B, size, inc int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) x := randVecDense(size, inc, 1, src) y := randVecDense(size, inc, 1, src) b.ResetTimer() @@ -559,7 +559,7 @@ func BenchmarkScaleVec1000Inc20(b *testing.B) { scaleVecBench(b, 1000, 20) } func BenchmarkScaleVec10000Inc20(b *testing.B) { scaleVecBench(b, 10000, 20) } func BenchmarkScaleVec100000Inc20(b *testing.B) { scaleVecBench(b, 100000, 20) } func scaleVecBench(b *testing.B, size, inc int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) x := randVecDense(size, inc, 1, src) b.ResetTimer() var v VecDense @@ -584,7 +584,7 @@ func BenchmarkAddVec1000Inc20(b *testing.B) { addVecBench(b, 1000, 20) } func BenchmarkAddVec10000Inc20(b *testing.B) { addVecBench(b, 10000, 20) } func BenchmarkAddVec100000Inc20(b *testing.B) { addVecBench(b, 100000, 20) } func addVecBench(b *testing.B, size, inc int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) x := randVecDense(size, inc, 1, src) y := randVecDense(size, inc, 1, src) b.ResetTimer() @@ -610,7 +610,7 @@ func BenchmarkSubVec1000Inc20(b *testing.B) { subVecBench(b, 1000, 20) } func BenchmarkSubVec10000Inc20(b *testing.B) { subVecBench(b, 10000, 20) } func BenchmarkSubVec100000Inc20(b *testing.B) { subVecBench(b, 100000, 20) } func subVecBench(b *testing.B, size, inc int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) x := randVecDense(size, inc, 1, src) y := randVecDense(size, inc, 1, src) b.ResetTimer() @@ -645,7 +645,7 @@ func BenchmarkVectorSum100000(b *testing.B) { vectorSumBench(b, 100000) } var vectorSumForBench float64 func vectorSumBench(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) a := randVecDense(size, 1, 1.0, src) b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/mathext/ell_carlson_test.go b/mathext/ell_carlson_test.go index 1cf1213f..bce73abd 100644 --- a/mathext/ell_carlson_test.go +++ b/mathext/ell_carlson_test.go @@ -6,16 +6,15 @@ package mathext import ( "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) // Testing EllipticF (and EllipticRF) using the addition theorems from http://dlmf.nist.gov/19.11.i func TestEllipticF(t *testing.T) { t.Parallel() const tol = 1.0e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // The following EllipticF(pi/3,m), m=0.1(0.1)0.9 was computed in Maxima 5.38.0 using Bigfloat arithmetic. vF := [...]float64{ @@ -62,7 +61,7 @@ func TestEllipticF(t *testing.T) { func TestEllipticE(t *testing.T) { t.Parallel() const tol = 1.0e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // The following EllipticE(pi/3,m), m=0.1(0.1)0.9 was computed in Maxima 5.38.0 using Bigfloat arithmetic. vE := [...]float64{ diff --git a/mathext/internal/amos/amos_fortran_test.go b/mathext/internal/amos/amos_fortran_test.go index 90bc58d9..6e4319db 100644 --- a/mathext/internal/amos/amos_fortran_test.go +++ b/mathext/internal/amos/amos_fortran_test.go @@ -9,10 +9,10 @@ package amos import ( "flag" + "math/rand/v2" "runtime" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext/internal/amos/amoslib" ) @@ -23,7 +23,7 @@ import ( var runFailing = flag.Bool("failing", false, "run known failing cases") func TestAiryFortran(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zairytestFort(t, in.x, in.kode, in.id) @@ -39,7 +39,7 @@ func TestZacaiFortran(t *testing.T) { case "arm64": t.Skipf("skipping on GOARCH=%s", runtime.GOARCH) } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zacaitestFort(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -51,7 +51,7 @@ func TestZbknuFortran(t *testing.T) { t.Skip("fails") } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zbknutestFort(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -63,7 +63,7 @@ func TestZasyiFortran(t *testing.T) { t.Skip("fails") } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zasyitestFort(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -75,7 +75,7 @@ func TestZseriFortran(t *testing.T) { case "arm64": t.Skipf("skipping on GOARCH=%s", runtime.GOARCH) } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zseritestFort(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -87,7 +87,7 @@ func TestZmlriFortran(t *testing.T) { t.Skip("fails") } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zmlritestFort(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -99,7 +99,7 @@ func TestZksclFortran(t *testing.T) { t.Skip("fails") } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zkscltestFort(t, in.x, in.is, in.tol, in.n, in.yr, in.yi) @@ -107,7 +107,7 @@ func TestZksclFortran(t *testing.T) { } func TestZuchkFortran(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zuchktestFort(t, in.x, in.is, in.tol) @@ -115,7 +115,7 @@ func TestZuchkFortran(t *testing.T) { } func TestZs1s2Fortran(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zs1s2testFort(t, in.x, in.is) diff --git a/mathext/internal/amos/amos_test.go b/mathext/internal/amos/amos_test.go index f723b2fb..27c1f764 100644 --- a/mathext/internal/amos/amos_test.go +++ b/mathext/internal/amos/amos_test.go @@ -6,12 +6,12 @@ package amos import ( "math" + "math/rand/v2" "runtime" "strconv" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) type input struct { @@ -40,11 +40,11 @@ func randInput(rnd *rand.Rand) input { } is := make([]int, 3) for j := range is { - is[j] = rnd.Intn(1000) + is[j] = rnd.IntN(1000) } - kode := rnd.Intn(2) + 1 - id := rnd.Intn(2) - n := rnd.Intn(5) + 1 + kode := rnd.IntN(2) + 1 + id := rnd.IntN(2) + n := rnd.IntN(5) + 1 yr := make([]float64, n+1) yi := make([]float64, n+1) for j := range yr { @@ -62,7 +62,7 @@ const nInputs = 100000 func TestAiry(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zairytest(t, in.x, in.kode, in.id) @@ -75,7 +75,7 @@ func TestZacai(t *testing.T) { case "arm64": t.Skipf("skipping on GOARCH=%s", runtime.GOARCH) } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zacaitest(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -84,7 +84,7 @@ func TestZacai(t *testing.T) { func TestZbknu(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zbknutest(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -93,7 +93,7 @@ func TestZbknu(t *testing.T) { func TestZasyi(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zasyitest(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -106,7 +106,7 @@ func TestZseri(t *testing.T) { case "arm64": t.Skipf("skipping on GOARCH=%s", runtime.GOARCH) } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zseritest(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -115,7 +115,7 @@ func TestZseri(t *testing.T) { func TestZmlri(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zmlritest(t, in.x, in.is, in.tol, in.n, in.yr, in.yi, in.kode) @@ -124,7 +124,7 @@ func TestZmlri(t *testing.T) { func TestZkscl(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zkscltest(t, in.x, in.is, in.tol, in.n, in.yr, in.yi) @@ -133,7 +133,7 @@ func TestZkscl(t *testing.T) { func TestZuchk(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zuchktest(t, in.x, in.is, in.tol) @@ -142,7 +142,7 @@ func TestZuchk(t *testing.T) { func TestZs1s2(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < nInputs; i++ { in := randInput(rnd) zs1s2test(t, in.x, in.is) diff --git a/mathext/prng/mt19937_64_test.go b/mathext/prng/mt19937_64_test.go index 46738076..c9656a9a 100644 --- a/mathext/prng/mt19937_64_test.go +++ b/mathext/prng/mt19937_64_test.go @@ -5,10 +5,9 @@ package prng import ( + "math/rand/v2" "testing" "time" - - "gonum.org/v1/gonum/internal/rand" ) var _ rand.Source = (*MT19937_64)(nil) diff --git a/mathext/prng/mt19937_test.go b/mathext/prng/mt19937_test.go index 4e7e842e..2b9114d6 100644 --- a/mathext/prng/mt19937_test.go +++ b/mathext/prng/mt19937_test.go @@ -5,10 +5,9 @@ package prng import ( + "math/rand/v2" "testing" "time" - - "gonum.org/v1/gonum/internal/rand" ) var _ rand.Source = (*MT19937)(nil) diff --git a/mathext/prng/prng_di_unimi_test.go b/mathext/prng/prng_di_unimi_test.go index 078b3faf..90c7d468 100644 --- a/mathext/prng/prng_di_unimi_test.go +++ b/mathext/prng/prng_di_unimi_test.go @@ -5,10 +5,9 @@ package prng import ( + "math/rand/v2" "testing" "time" - - "gonum.org/v1/gonum/internal/rand" ) // Random values in tests are produced by 40 iterations of the C code. diff --git a/optimize/cmaes.go b/optimize/cmaes.go index 09904ec4..f635d1f0 100644 --- a/optimize/cmaes.go +++ b/optimize/cmaes.go @@ -6,10 +6,10 @@ package optimize import ( "math" + "math/rand/v2" "sort" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distmv" ) diff --git a/optimize/cmaes_test.go b/optimize/cmaes_test.go index 23e0408b..0ef6e6b4 100644 --- a/optimize/cmaes_test.go +++ b/optimize/cmaes_test.go @@ -7,10 +7,10 @@ package optimize import ( "errors" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/optimize/functions" ) @@ -201,7 +201,7 @@ func cmaTestCases() []cmaTestCase { func TestCmaEsChol(t *testing.T) { t.Parallel() for i, test := range cmaTestCases() { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) method := test.method method.Src = src initX := test.initX diff --git a/optimize/convex/lp/simplex_test.go b/optimize/convex/lp/simplex_test.go index 80bc6c46..d8d4db1f 100644 --- a/optimize/convex/lp/simplex_test.go +++ b/optimize/convex/lp/simplex_test.go @@ -5,10 +5,10 @@ package lp import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -129,7 +129,7 @@ func TestSimplex(t *testing.T) { testSimplex(t, test.initialBasic, test.c, test.A, test.b, convergenceTol) } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Randomized tests testRandomSimplex(t, 20000, 0.2, 10, rnd) testRandomSimplex(t, 20000, 0, 10, rnd) @@ -140,8 +140,8 @@ func TestSimplex(t *testing.T) { func testRandomSimplex(t *testing.T, nTest int, pZero float64, maxN int, rnd *rand.Rand) { // Try a bunch of random LPs for i := 0; i < nTest; i++ { - n := rnd.Intn(maxN) + 2 // n must be at least two. - m := rnd.Intn(n-1) + 1 // m must be between 1 and n + n := rnd.IntN(maxN) + 2 // n must be at least two. + m := rnd.IntN(n-1) + 1 // m must be between 1 and n if m == 0 || n == 0 { continue } diff --git a/optimize/listsearch_test.go b/optimize/listsearch_test.go index 9631a7ed..4ec4705b 100644 --- a/optimize/listsearch_test.go +++ b/optimize/listsearch_test.go @@ -5,17 +5,17 @@ package optimize import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/optimize/functions" ) func TestListSearch(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { r, c int shortEvals int @@ -131,7 +131,7 @@ func TestListSearch(t *testing.T) { for floats.MinIdx(fs[:evals]) != floats.MinIdx(fs[:evals+concurrent]) { // Swap the minimum index with a random element. minIdxFirst := floats.MinIdx(fs[:evals+concurrent]) - new := rnd.Intn(evals) + new := rnd.IntN(evals) swapSamples(locs, fs, minIdxFirst, new) } diff --git a/spatial/barneshut/barneshut2_test.go b/spatial/barneshut/barneshut2_test.go index a82949f9..e633a57d 100644 --- a/spatial/barneshut/barneshut2_test.go +++ b/spatial/barneshut/barneshut2_test.go @@ -7,11 +7,11 @@ package barneshut import ( "fmt" "math" + "math/rand/v2" "reflect" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/spatial/r2" ) @@ -414,7 +414,7 @@ func TestPlaneForceOn(t *testing.T) { tol = 0.07 ) for _, n := range []int{3e3, 1e4, 3e4} { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle2, n) for i := range particles { particles[i] = particle2{x: size * rnd.Float64(), y: size * rnd.Float64(), m: 1} @@ -470,7 +470,7 @@ var ( func BenchmarkNewPlane(b *testing.B) { for _, n := range []int{1e3, 1e4, 1e5, 1e6} { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle2, n) for i := range particles { particles[i] = particle2{x: rnd.Float64(), y: rnd.Float64(), m: 1} @@ -495,7 +495,7 @@ func BenchmarkPlaneForceOn(b *testing.B) { // Don't run unreasonably long benchmarks. continue } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle2, n) for i := range particles { particles[i] = particle2{x: rnd.Float64(), y: rnd.Float64(), m: 1} @@ -523,7 +523,7 @@ func BenchmarkPlaneFull(b *testing.B) { // Don't run unreasonably long benchmarks. continue } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle2, n) for i := range particles { particles[i] = particle2{x: rnd.Float64(), y: rnd.Float64(), m: 1} diff --git a/spatial/barneshut/barneshut3_test.go b/spatial/barneshut/barneshut3_test.go index 0c9e0ad5..301d2840 100644 --- a/spatial/barneshut/barneshut3_test.go +++ b/spatial/barneshut/barneshut3_test.go @@ -7,11 +7,11 @@ package barneshut import ( "fmt" "math" + "math/rand/v2" "reflect" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/spatial/r3" ) @@ -411,7 +411,7 @@ func TestVolumeForceOn(t *testing.T) { tol = 1e-3 ) for _, n := range []int{3e3, 1e4, 3e4} { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle3, n) for i := range particles { particles[i] = particle3{x: size * rnd.Float64(), y: size * rnd.Float64(), z: size * rnd.Float64(), m: 1} @@ -467,7 +467,7 @@ var ( func BenchmarkNewVolume(b *testing.B) { for _, n := range []int{1e3, 1e4, 1e5, 1e6} { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle3, n) for i := range particles { particles[i] = particle3{x: rnd.Float64(), y: rnd.Float64(), z: rnd.Float64(), m: 1} @@ -492,7 +492,7 @@ func BenchmarkVolumeForceOn(b *testing.B) { // Don't run unreasonably long benchmarks. continue } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle3, n) for i := range particles { particles[i] = particle3{x: rnd.Float64(), y: rnd.Float64(), z: rnd.Float64(), m: 1} @@ -520,7 +520,7 @@ func BenchmarkVolumeFull(b *testing.B) { // Don't run unreasonably long benchmarks. continue } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) particles := make([]Particle3, n) for i := range particles { particles[i] = particle3{x: rnd.Float64(), y: rnd.Float64(), z: rnd.Float64(), m: 1} diff --git a/spatial/barneshut/galaxy_example_test.go b/spatial/barneshut/galaxy_example_test.go index ad2e79fc..4abaa97f 100644 --- a/spatial/barneshut/galaxy_example_test.go +++ b/spatial/barneshut/galaxy_example_test.go @@ -6,8 +6,8 @@ package barneshut_test import ( "log" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/spatial/barneshut" "gonum.org/v1/gonum/spatial/r2" ) @@ -26,7 +26,7 @@ func (m *mass) move(f r2.Vec) { } func Example_galaxy() { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) // Make 1000 stars in random locations. stars := make([]*mass, 1000) diff --git a/spatial/curve/hilbert_test.go b/spatial/curve/hilbert_test.go index 1237a2c3..f4a96006 100644 --- a/spatial/curve/hilbert_test.go +++ b/spatial/curve/hilbert_test.go @@ -7,12 +7,11 @@ package curve import ( "errors" "fmt" + "math/rand/v2" "reflect" "slices" "strings" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func ExampleHilbert2D_Pos() { @@ -269,7 +268,7 @@ func BenchmarkHilbert(b *testing.B) { h := newCurve(ord, N) v := make([]int, N) for i := range v { - v[i] = rand.Intn(1 << ord) + v[i] = rand.IntN(1 << ord) } u := make([]int, N) for n := 0; n < b.N; n++ { @@ -284,7 +283,7 @@ func BenchmarkHilbert(b *testing.B) { for ord := 1; ord <= O; ord++ { b.Run(fmt.Sprintf("Order %d", ord), func(b *testing.B) { h := newCurve(ord, N) - d := rand.Intn(1 << (ord * N)) + d := rand.IntN(1 << (ord * N)) v := make([]int, N) for n := 0; n < b.N; n++ { h.Coord(v, d) diff --git a/spatial/kdtree/kdtree_test.go b/spatial/kdtree/kdtree_test.go index b5432339..4bee20f9 100644 --- a/spatial/kdtree/kdtree_test.go +++ b/spatial/kdtree/kdtree_test.go @@ -8,6 +8,7 @@ import ( "flag" "fmt" "math" + "math/rand/v2" "os" "reflect" "slices" @@ -15,8 +16,6 @@ import ( "strings" "testing" "unsafe" - - "gonum.org/v1/gonum/internal/rand" ) var ( @@ -219,7 +218,7 @@ func nearest(q Point, p Points) (Point, float64) { } func TestNearestRandom(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) const ( min = 0.0 @@ -483,7 +482,7 @@ func TestDoBounded(t *testing.T) { } func BenchmarkNew(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) p := make(Points, 1e5) for i := range p { p[i] = Point{rnd.Float64(), rnd.Float64(), rnd.Float64()} @@ -495,7 +494,7 @@ func BenchmarkNew(b *testing.B) { } func BenchmarkNewBounds(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) p := make(Points, 1e5) for i := range p { p[i] = Point{rnd.Float64(), rnd.Float64(), rnd.Float64()} @@ -507,7 +506,7 @@ func BenchmarkNewBounds(b *testing.B) { } func BenchmarkInsert(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t := &Tree{} for i := 0; i < b.N; i++ { t.Insert(Point{rnd.Float64(), rnd.Float64(), rnd.Float64()}, false) @@ -515,7 +514,7 @@ func BenchmarkInsert(b *testing.B) { } func BenchmarkInsertBounds(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) t := &Tree{} for i := 0; i < b.N; i++ { t.Insert(Point{rnd.Float64(), rnd.Float64(), rnd.Float64()}, true) @@ -523,7 +522,7 @@ func BenchmarkInsertBounds(b *testing.B) { } func Benchmark(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) data := make(Points, 1e2) for i := range data { data[i] = Point{rnd.Float64(), rnd.Float64(), rnd.Float64()} diff --git a/spatial/kdtree/medians.go b/spatial/kdtree/medians.go index 7e50c518..d3b7e491 100644 --- a/spatial/kdtree/medians.go +++ b/spatial/kdtree/medians.go @@ -5,9 +5,8 @@ package kdtree import ( + "math/rand/v2" "sort" - - "gonum.org/v1/gonum/internal/rand" ) // Partition partitions list such that all elements less than the value at @@ -59,7 +58,7 @@ func Select(list SortSlicer, k int) int { panic("kdtree: internal inconsistency") } sub := list.Slice(start, end) - pivot := Partition(sub, rand.Intn(sub.Len())) + pivot := Partition(sub, rand.IntN(sub.Len())) switch { case pivot == k: return k diff --git a/spatial/kdtree/medians_test.go b/spatial/kdtree/medians_test.go index 6e0d5790..e5caf104 100644 --- a/spatial/kdtree/medians_test.go +++ b/spatial/kdtree/medians_test.go @@ -5,10 +5,9 @@ package kdtree import ( + "math/rand/v2" "sort" "testing" - - "gonum.org/v1/gonum/internal/rand" ) type ints []int @@ -19,14 +18,14 @@ func (a ints) Slice(s, e int) SortSlicer { return a[s:e] } func (a ints) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func TestPartition(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for p := 0; p < 100; p++ { list := make(ints, 1e5) for i := range list { list[i] = rnd.Int() } - pi := Partition(list, rnd.Intn(list.Len())) + pi := Partition(list, rnd.IntN(list.Len())) for i := 0; i < pi; i++ { if list[i] > list[pi] { t.Errorf("unexpected partition sort order p[%d] > p[%d]: %d > %d", i, pi, list[i], list[pi]) @@ -41,12 +40,12 @@ func TestPartition(t *testing.T) { } func TestPartitionCollision(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for p := 0; p < 10; p++ { list := make(ints, 10) for i := range list { - list[i] = rnd.Intn(5) + list[i] = rnd.IntN(5) } pi := Partition(list, p) for i := 0; i < pi; i++ { @@ -68,12 +67,12 @@ func sortSelection(list ints, k int) int { } func TestSelect(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for k := 0; k < 2121; k++ { list := make(ints, 2121) for i := range list { - list[i] = rnd.Intn(1000) + list[i] = rnd.IntN(1000) } Select(list, k) sorted := append(ints(nil), list...) @@ -85,7 +84,7 @@ func TestSelect(t *testing.T) { } func TestMedianOfMedians(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) list := make(ints, 1e4) for i := range list { @@ -107,7 +106,7 @@ func TestMedianOfMedians(t *testing.T) { } func TestMedianOfRandoms(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) list := make(ints, 1e4) for i := range list { @@ -131,7 +130,7 @@ func TestMedianOfRandoms(t *testing.T) { var benchSink int func BenchmarkMedianOfMedians(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < b.N; i++ { b.StopTimer() @@ -145,7 +144,7 @@ func BenchmarkMedianOfMedians(b *testing.B) { } func BenchmarkPartitionMedianOfMedians(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < b.N; i++ { b.StopTimer() @@ -159,7 +158,7 @@ func BenchmarkPartitionMedianOfMedians(b *testing.B) { } func BenchmarkMedianOfRandoms(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) b.StopTimer() list := make(ints, 1e4) @@ -173,7 +172,7 @@ func BenchmarkMedianOfRandoms(b *testing.B) { } func BenchmarkPartitionMedianOfRandoms(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) b.StopTimer() list := make(ints, 1e4) diff --git a/spatial/r2/box_test.go b/spatial/r2/box_test.go index e524eb7b..4fa4f201 100644 --- a/spatial/r2/box_test.go +++ b/spatial/r2/box_test.go @@ -5,13 +5,12 @@ package r2 import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestBoxContains(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 200; i++ { b := randomBox(rnd) for j := 0; j < 10; j++ { @@ -35,7 +34,7 @@ func TestBoxContains(t *testing.T) { } func TestBoxUnion(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 200; i++ { b1 := randomBox(rnd) b2 := randomBox(rnd) @@ -66,7 +65,7 @@ func TestBoxUnion(t *testing.T) { func TestBoxCenter(t *testing.T) { const tol = 1e-11 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) center := b.Center() @@ -86,7 +85,7 @@ func TestBoxCenter(t *testing.T) { func TestBoxAdd(t *testing.T) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 12; i++ { b := randomBox(rnd) v := randomVec(rnd) @@ -103,7 +102,7 @@ func TestBoxAdd(t *testing.T) { func TestBoxScale(t *testing.T) { const tol = 1e-11 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) size := b.Size() @@ -123,7 +122,7 @@ func TestBoxScale(t *testing.T) { } func TestBoxEmpty(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { v := absElem(randomVec(rnd)) b := randomBox(rnd) @@ -150,7 +149,7 @@ func TestBoxEmpty(t *testing.T) { } } func TestBoxCanon(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) badBox := Box{Min: b.Max, Max: b.Min} @@ -162,7 +161,7 @@ func TestBoxCanon(t *testing.T) { } func TestBoxVertices(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) gots := b.Vertices() diff --git a/spatial/r2/triangle_test.go b/spatial/r2/triangle_test.go index 8e18d386..b97a42fa 100644 --- a/spatial/r2/triangle_test.go +++ b/spatial/r2/triangle_test.go @@ -6,9 +6,8 @@ package r2 import ( "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestTriangleDegenerate(t *testing.T) { @@ -22,7 +21,7 @@ func TestTriangleDegenerate(t *testing.T) { // longest edge and the opposite vertex. spatialTol = 1e-2 ) - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) randVec := func() Vec { return Vec{X: 20 * (rnd.Float64() - 0.5), Y: 20 * (rnd.Float64() - 0.5)} } @@ -118,11 +117,11 @@ func TestTriangleArea(t *testing.T) { t.Errorf("got area %g, expected %g", got, test.Expect) } const tol2 = 1e-11 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 100; i++ { tri := Triangle{ {rnd.Float64() * 20, rnd.Float64() * 20}, - {rand.Float64() * 20, rnd.Float64() * 20}, + {rnd.Float64() * 20, rnd.Float64() * 20}, {rnd.Float64() * 20, rnd.Float64() * 20}, } @@ -137,7 +136,7 @@ func TestTriangleArea(t *testing.T) { func TestTriangleCentroid(t *testing.T) { const tol = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 100; i++ { tri := Triangle{ {rnd.Float64() * 20, rnd.Float64() * 20}, diff --git a/spatial/r2/vector_test.go b/spatial/r2/vector_test.go index aac09981..910b2500 100644 --- a/spatial/r2/vector_test.go +++ b/spatial/r2/vector_test.go @@ -6,10 +6,10 @@ package r2 import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestAdd(t *testing.T) { diff --git a/spatial/r3/box_test.go b/spatial/r3/box_test.go index b8380dfa..fc638108 100644 --- a/spatial/r3/box_test.go +++ b/spatial/r3/box_test.go @@ -5,13 +5,12 @@ package r3 import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestBoxContains(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 200; i++ { b := randomBox(rnd) for j := 0; j < 10; j++ { @@ -37,7 +36,7 @@ func TestBoxContains(t *testing.T) { } func TestBoxUnion(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 200; i++ { b1 := randomBox(rnd) b2 := randomBox(rnd) @@ -70,7 +69,7 @@ func TestBoxUnion(t *testing.T) { func TestBoxCenter(t *testing.T) { const tol = 1e-11 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) center := b.Center() @@ -86,8 +85,8 @@ func TestBoxCenter(t *testing.T) { } func TestBoxScale(t *testing.T) { - const tol = 1e-11 - rnd := rand.New(rand.NewSource(1)) + const tol = 1e-10 + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) size := b.Size() @@ -107,7 +106,7 @@ func TestBoxScale(t *testing.T) { } func TestBoxVertices(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) gots := b.Vertices() @@ -125,7 +124,7 @@ func TestBoxVertices(t *testing.T) { } func TestBoxEmpty(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { v := absElem(randomVec(rnd)) b := randomBox(rnd) @@ -153,7 +152,7 @@ func TestBoxEmpty(t *testing.T) { } func TestBoxCanon(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 300; i++ { b := randomBox(rnd) badBox := Box{Min: b.Max, Max: b.Min} diff --git a/spatial/r3/mat_test.go b/spatial/r3/mat_test.go index 77659aeb..95f27baa 100644 --- a/spatial/r3/mat_test.go +++ b/spatial/r3/mat_test.go @@ -6,16 +6,16 @@ package r3 import ( "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/num/quat" ) func TestMatAdd(t *testing.T) { const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { a := randomMat(rnd) b := randomMat(rnd) @@ -33,7 +33,7 @@ func TestMatAdd(t *testing.T) { func TestMatSub(t *testing.T) { const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { a := randomMat(rnd) b := randomMat(rnd) @@ -51,7 +51,7 @@ func TestMatSub(t *testing.T) { func TestMatMul(t *testing.T) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { a := randomMat(rnd) b := randomMat(rnd) @@ -69,7 +69,7 @@ func TestMatMul(t *testing.T) { func TestMatScale(t *testing.T) { const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { v := rnd.Float64() a := randomMat(rnd) @@ -87,7 +87,7 @@ func TestMatScale(t *testing.T) { func TestMatCloneFrom(t *testing.T) { const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { want := randomMat(rnd) got := NewMat(nil) @@ -100,7 +100,7 @@ func TestMatCloneFrom(t *testing.T) { func TestSkew(t *testing.T) { const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { sk := NewMat(nil) v1 := randomVec(rnd) @@ -116,7 +116,7 @@ func TestSkew(t *testing.T) { func TestTranspose(t *testing.T) { const tol = 1e-16 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { d := mat.NewDense(3, 3, nil) m := randomMat(rnd) @@ -159,7 +159,7 @@ func randomVec(rnd *rand.Rand) (v Vec) { func TestDet(t *testing.T) { const tol = 1e-11 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { m := randomMat(rnd) got := m.Det() @@ -171,7 +171,7 @@ func TestDet(t *testing.T) { } func TestOuter(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { alpha := rnd.Float64() d := mat.NewDense(3, 3, nil) @@ -190,7 +190,7 @@ func TestOuter(t *testing.T) { func TestRotationMat(t *testing.T) { const tol = 1e-14 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for tc := 0; tc < 20; tc++ { // Generate a random unit quaternion. @@ -222,7 +222,7 @@ func TestRotationMat(t *testing.T) { } func BenchmarkQuat(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < b.N; i++ { q := quat.Number{Real: rnd.Float64(), Imag: rnd.Float64(), Jmag: rnd.Float64(), Kmag: rnd.Float64()} if Rotation(q).Mat() == nil { @@ -287,7 +287,7 @@ func TestMatHessian(t *testing.T) { h = 8e-4 ) step := Vec{X: h, Y: h, Z: h} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range scalarFields { for i := 0; i < 30; i++ { p := randomVec(rnd) @@ -309,7 +309,7 @@ func TestMatJacobian(t *testing.T) { h = 8e-4 ) step := Vec{X: h, Y: h, Z: h} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range vectorFields { for i := 0; i < 1; i++ { p := randomVec(rnd) diff --git a/spatial/r3/triangle_test.go b/spatial/r3/triangle_test.go index 6c57d511..0c41ffa8 100644 --- a/spatial/r3/triangle_test.go +++ b/spatial/r3/triangle_test.go @@ -6,9 +6,8 @@ package r3 import ( "math" + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestTriangleDegenerate(t *testing.T) { @@ -22,7 +21,7 @@ func TestTriangleDegenerate(t *testing.T) { // longest edge and the opposite vertex. spatialTol = 1e-2 ) - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 200; i++ { // Generate a random line for the longest triangle side. ln := line{randomVec(rnd), randomVec(rnd)} @@ -81,7 +80,7 @@ func TestTriangleDegenerate(t *testing.T) { func TestTriangleCentroid(t *testing.T) { const tol = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 100; i++ { tri := randomTriangle(rnd) got := tri.Centroid() @@ -98,7 +97,7 @@ func TestTriangleCentroid(t *testing.T) { func TestTriangleNormal(t *testing.T) { const tol = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 100; i++ { tri := randomTriangle(rnd) got := tri.Normal() @@ -149,7 +148,7 @@ func TestTriangleArea(t *testing.T) { } } const tol2 = 1e-12 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 100; i++ { tri := randomTriangle(rnd) got := tri.Area() @@ -161,7 +160,7 @@ func TestTriangleArea(t *testing.T) { } func TestTriangleOrderedLengths(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < 200; i++ { tri := randomTriangle(rnd) s1, s2, s3 := tri.sides() diff --git a/spatial/r3/vector_test.go b/spatial/r3/vector_test.go index 5da34d66..4f313a6e 100644 --- a/spatial/r3/vector_test.go +++ b/spatial/r3/vector_test.go @@ -6,10 +6,10 @@ package r3 import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -309,7 +309,7 @@ func TestDivergence(t *testing.T) { h = 1e-2 ) step := Vec{X: h, Y: h, Z: h} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range vectorFields { for i := 0; i < 30; i++ { p := randomVec(rnd) @@ -328,7 +328,7 @@ func TestGradient(t *testing.T) { h = 1e-5 ) step := Vec{X: h, Y: h, Z: h} - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for _, test := range scalarFields { for i := 0; i < 30; i++ { p := randomVec(rnd) diff --git a/spatial/vptree/vptree.go b/spatial/vptree/vptree.go index e17d9d0e..1f7d7a83 100644 --- a/spatial/vptree/vptree.go +++ b/spatial/vptree/vptree.go @@ -8,9 +8,9 @@ import ( "container/heap" "errors" "math" + "math/rand/v2" "sort" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat" ) @@ -69,11 +69,11 @@ func New(p []Comparable, effort int, src rand.Source) (t *Tree, err error) { var intn func(int) int var shuf func(n int, swap func(i, j int)) if src == nil { - intn = rand.Intn + intn = rand.IntN shuf = rand.Shuffle } else { rnd := rand.New(src) - intn = rnd.Intn + intn = rnd.IntN shuf = rnd.Shuffle } b := builder{work: make([]float64, len(p)), intn: intn, shuf: shuf} diff --git a/spatial/vptree/vptree_test.go b/spatial/vptree/vptree_test.go index f80b4399..9b8c1410 100644 --- a/spatial/vptree/vptree_test.go +++ b/spatial/vptree/vptree_test.go @@ -8,6 +8,7 @@ import ( "flag" "fmt" "math" + "math/rand/v2" "os" "reflect" "slices" @@ -17,7 +18,6 @@ import ( "unsafe" "gonum.org/v1/gonum/internal/order" - "gonum.org/v1/gonum/internal/rand" ) var ( @@ -61,7 +61,7 @@ func TestNew(t *testing.T) { panicked = true } }() - tree, err = New(test.data, test.effort, rand.NewSource(test.seed)) + tree, err = New(test.data, test.effort, rand.NewPCG(test.seed, test.seed)) }() if panicked { t.Errorf("unexpected panic for test %d", i) @@ -130,7 +130,7 @@ func nearest(q Comparable, p []Comparable) (Comparable, float64) { } func TestNearestRandom(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) const ( min = 0.0 @@ -148,7 +148,7 @@ func TestNearestRandom(t *testing.T) { } randData = append(randData, p) } - tree, err := New(randData, 10, rand.NewSource(1)) + tree, err := New(randData, 10, rand.NewPCG(1, 1)) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -168,7 +168,7 @@ func TestNearestRandom(t *testing.T) { } func TestNearest(t *testing.T) { - tree, err := New(wpData, 3, rand.NewSource(1)) + tree, err := New(wpData, 3, rand.NewPCG(1, 1)) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -226,7 +226,7 @@ func TestNearestSetN(t *testing.T) { Point{-1e5, 0}}, wpData[:len(wpData)-1]...) - tree, err := New(wpData, 3, rand.NewSource(1)) + tree, err := New(wpData, 3, rand.NewPCG(1, 1)) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -289,7 +289,7 @@ var nearestSetDistTests = []Point{ } func TestNearestSetDist(t *testing.T) { - tree, err := New(wpData, 3, rand.NewSource(1)) + tree, err := New(wpData, 3, rand.NewPCG(1, 1)) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -330,7 +330,7 @@ func TestNearestSetDist(t *testing.T) { } func TestDo(t *testing.T) { - tree, err := New(wpData, 3, rand.NewSource(1)) + tree, err := New(wpData, 3, rand.NewPCG(1, 1)) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -359,14 +359,14 @@ func TestDo(t *testing.T) { func BenchmarkNew(b *testing.B) { for _, effort := range []int{0, 10, 100} { b.Run(fmt.Sprintf("New:%d", effort), func(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) p := make([]Comparable, 1e5) for i := range p { p[i] = Point{rnd.Float64(), rnd.Float64(), rnd.Float64()} } b.ResetTimer() for i := 0; i < b.N; i++ { - _, err := New(p, effort, rand.NewSource(1)) + _, err := New(p, effort, rand.NewPCG(1, 1)) if err != nil { b.Fatalf("unexpected error: %v", err) } @@ -443,12 +443,12 @@ func Benchmark(b *testing.B) { } for _, effort := range []int{0, 3, 10, 30, 100, 300} { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) data := make([]Comparable, 1e5) for i := range data { data[i] = Point{rnd.Float64(), rnd.Float64(), rnd.Float64()} } - tree, err := New(data, effort, rand.NewSource(1)) + tree, err := New(data, effort, rand.NewPCG(1, 1)) if err != nil { b.Errorf("unexpected error for effort=%d: %v", effort, err) continue diff --git a/stat/card/card_test.go b/stat/card/card_test.go index b04d4c83..cdeadb7e 100644 --- a/stat/card/card_test.go +++ b/stat/card/card_test.go @@ -10,13 +10,13 @@ import ( "hash" "hash/fnv" "io" + "math/rand/v2" "strconv" "strings" "sync" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) // exact is an exact cardinality accumulator. @@ -79,7 +79,7 @@ func TestCounters(t *testing.T) { t.Run(test.name, func(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) var dst []byte c := test.counter() for i := 0; i < int(test.count); i++ { @@ -115,7 +115,7 @@ func TestUnion(t *testing.T) { test := test t.Run(test.name, func(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) var dst []byte var cs [2]counter for j := range cs { @@ -186,7 +186,7 @@ func TestResetCounters(t *testing.T) { c := test.resetCounter() var counts [2]float64 for k := range counts { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for i := 0; i < test.count; i++ { dst = strconv.AppendUint(dst[:0], rnd.Uint64(), 16) dst = append(dst, '-') @@ -277,7 +277,7 @@ func TestBinaryEncoding(t *testing.T) { hashes = sync.Map{} }() for _, test := range counterEncoderTests { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) src := test.src() for i := 0; i < test.count; i++ { buf := strconv.AppendUint(nil, rnd.Uint64(), 16) @@ -403,7 +403,7 @@ var counterBenchmarks = []struct { func BenchmarkCounters(b *testing.B) { for _, bench := range counterBenchmarks { c := bench.counter() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) var dst []byte b.Run(bench.name, func(b *testing.B) { for i := 0; i < b.N; i++ { diff --git a/stat/distmat/permutation.go b/stat/distmat/permutation.go index d45e74e6..39a8f84c 100644 --- a/stat/distmat/permutation.go +++ b/stat/distmat/permutation.go @@ -5,7 +5,8 @@ package distmat import ( - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" + "gonum.org/v1/gonum/mat" ) diff --git a/stat/distmat/permutation_test.go b/stat/distmat/permutation_test.go index 7c764395..9bbaa091 100644 --- a/stat/distmat/permutation_test.go +++ b/stat/distmat/permutation_test.go @@ -5,14 +5,14 @@ package distmat import ( + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) func TestUniformPermutation(t *testing.T) { - up := NewUniformPermutation(rand.NewSource(1)) + up := NewUniformPermutation(rand.NewPCG(1, 1)) for _, n := range []int{10, 32, 64, 100} { m := mat.NewDense(n, n, nil) up.PermTo(m) diff --git a/stat/distmat/unit_vector.go b/stat/distmat/unit_vector.go index 87df26c1..3854b11c 100644 --- a/stat/distmat/unit_vector.go +++ b/stat/distmat/unit_vector.go @@ -5,7 +5,8 @@ package distmat import ( - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" + "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distuv" ) diff --git a/stat/distmat/unit_vector_example_test.go b/stat/distmat/unit_vector_example_test.go index f321a652..9cb561dd 100644 --- a/stat/distmat/unit_vector_example_test.go +++ b/stat/distmat/unit_vector_example_test.go @@ -6,8 +6,8 @@ package distmat_test import ( "fmt" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distmat" ) @@ -16,18 +16,18 @@ import ( // a random walk in n-space. At the end it computes how far // from the origin the walk finished. func ExampleUnitVector() { - src := rand.NewSource(1) + src := rand.NewPCG(1, 0) rnd := rand.New(src) dist := distmat.NewUnitVector(src) // Draw a random dimension for the space to walk through. - nDim := 1 + rnd.Intn(100) + nDim := 1 + rnd.IntN(100) // Vectors to hold the current position and next step. position := mat.NewVecDense(nDim, nil) step := mat.NewVecDense(nDim, nil) // Draw a random number of steps to take. - nSteps := 1 + rnd.Intn(100) + nSteps := 1 + rnd.IntN(100) for i := 0; i < nSteps; i++ { // Draw a random step and update the position. dist.UnitVecTo(step) @@ -37,6 +37,7 @@ func ExampleUnitVector() { // Finally compute distance from the origin. distance := mat.Norm(position, 2) fmt.Printf("took %d steps in %d-space, walked %1.1f in total", nSteps, nDim, distance) + // Output: - // took 60 steps in 41-space, walked 7.8 in total + // took 9 steps in 60-space, walked 3.0 in total } diff --git a/stat/distmat/unit_vector_test.go b/stat/distmat/unit_vector_test.go index 35d95fff..926ac9de 100644 --- a/stat/distmat/unit_vector_test.go +++ b/stat/distmat/unit_vector_test.go @@ -5,15 +5,15 @@ package distmat import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) func TestUnitVector(t *testing.T) { - u := NewUnitVector(rand.NewSource(1)) + u := NewUnitVector(rand.NewPCG(1, 1)) for _, d := range []int{10, 32, 64, 100} { v := mat.NewVecDense(d, nil) u.UnitVecTo(v) @@ -26,7 +26,7 @@ func TestUnitVector(t *testing.T) { func TestUnitVectorStats(t *testing.T) { n := 1e7 - u := NewUnitVector(rand.NewSource(1)) + u := NewUnitVector(rand.NewPCG(1, 1)) for _, d := range []int{1, 2, 3} { v := mat.NewVecDense(d, nil) tot := mat.NewVecDense(d, nil) diff --git a/stat/distmat/wishart.go b/stat/distmat/wishart.go index 02af6281..e27cf7ac 100644 --- a/stat/distmat/wishart.go +++ b/stat/distmat/wishart.go @@ -6,9 +6,9 @@ package distmat import ( "math" + "math/rand/v2" "sync" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/mathext" "gonum.org/v1/gonum/stat/distuv" diff --git a/stat/distmat/wishart_test.go b/stat/distmat/wishart_test.go index bf9bdfe4..792aaad0 100644 --- a/stat/distmat/wishart_test.go +++ b/stat/distmat/wishart_test.go @@ -6,10 +6,10 @@ package distmat import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -109,7 +109,7 @@ func TestWishartRand(t *testing.T) { tol: 1e-1, }, } { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) dim := test.v.SymmetricDim() w, ok := NewWishart(test.v, test.nu, rnd) if !ok { diff --git a/stat/distmv/dirichlet.go b/stat/distmv/dirichlet.go index 3b89c5c5..61d79988 100644 --- a/stat/distmv/dirichlet.go +++ b/stat/distmv/dirichlet.go @@ -6,9 +6,9 @@ package distmv import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distuv" ) diff --git a/stat/distmv/dirichlet_test.go b/stat/distmv/dirichlet_test.go index a07ac532..f4ef9d17 100644 --- a/stat/distmv/dirichlet_test.go +++ b/stat/distmv/dirichlet_test.go @@ -6,9 +6,9 @@ package distmv import ( "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -20,12 +20,12 @@ func TestDirichlet(t *testing.T) { prob float64 }{ { - NewDirichlet([]float64{1, 1, 1}, nil), + NewDirichlet([]float64{1, 1, 1}, rand.NewPCG(1, 1)), []float64{0.2, 0.3, 0.5}, 2.0, }, { - NewDirichlet([]float64{0.6, 10, 8.7}, nil), + NewDirichlet([]float64{0.6, 10, 8.7}, rand.NewPCG(1, 1)), []float64{0.2, 0.3, 0.5}, 0.24079612737071665, }, @@ -36,7 +36,7 @@ func TestDirichlet(t *testing.T) { } } - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { Dir *Dirichlet }{ diff --git a/stat/distmv/normal.go b/stat/distmv/normal.go index 8d55bfeb..a52f37c2 100644 --- a/stat/distmv/normal.go +++ b/stat/distmv/normal.go @@ -6,9 +6,9 @@ package distmv import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat" "gonum.org/v1/gonum/stat/distuv" diff --git a/stat/distmv/normal_test.go b/stat/distmv/normal_test.go index 52573213..fd19e6e3 100644 --- a/stat/distmv/normal_test.go +++ b/stat/distmv/normal_test.go @@ -7,21 +7,21 @@ package distmv import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/diff/fd" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat" ) func TestNormProbs(t *testing.T) { - dist1, ok := NewNormal([]float64{0, 0}, mat.NewSymDense(2, []float64{1, 0, 0, 1}), nil) + dist1, ok := NewNormal([]float64{0, 0}, mat.NewSymDense(2, []float64{1, 0, 0, 1}), rand.NewPCG(1, 2)) if !ok { t.Errorf("bad test") } - dist2, ok := NewNormal([]float64{6, 7}, mat.NewSymDense(2, []float64{8, 2, 0, 4}), nil) + dist2, ok := NewNormal([]float64{6, 7}, mat.NewSymDense(2, []float64{8, 2, 0, 4}), rand.NewPCG(3, 4)) if !ok { t.Errorf("bad test") } @@ -59,7 +59,7 @@ func TestNewNormalChol(t *testing.T) { if !ok { panic("bad test") } - n := NewNormalChol(test.mean, &chol, nil) + n := NewNormalChol(test.mean, &chol, rand.NewPCG(1, 1)) // Generate a random number and calculate probability to ensure things // have been set properly. See issue #426. x := n.Rand(nil) @@ -96,7 +96,7 @@ func TestNormRand(t *testing.T) { } { dim := len(test.mean) cov := mat.NewSymDense(dim, test.cov) - n, ok := NewNormal(test.mean, cov, nil) + n, ok := NewNormal(test.mean, cov, rand.NewPCG(1, 1)) if !ok { t.Errorf("bad covariance matrix") } @@ -136,13 +136,13 @@ func TestNormalQuantile(t *testing.T) { } { dim := len(test.mean) cov := mat.NewSymDense(dim, test.cov) - n, ok := NewNormal(test.mean, cov, nil) + n, ok := NewNormal(test.mean, cov, rand.NewPCG(1, 1)) if !ok { t.Errorf("bad covariance matrix") } nSamples := 1000000 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) samps := mat.NewDense(nSamples, dim, nil) tmp := make([]float64, dim) for i := 0; i < nSamples; i++ { @@ -223,11 +223,11 @@ func TestConditionNormal(t *testing.T) { newSigma: mat.NewSymDense(2, []float64{10, 2, 2, 3}), }, } { - normal, ok := NewNormal(test.mu, test.sigma, nil) + normal, ok := NewNormal(test.mu, test.sigma, rand.NewPCG(1, 2)) if !ok { t.Fatalf("Bad test, original sigma not positive definite") } - newNormal, ok := normal.ConditionNormal(test.observed, test.values, nil) + newNormal, ok := normal.ConditionNormal(test.observed, test.values, rand.NewPCG(3, 4)) if !ok { t.Fatalf("Bad test, update failure") } @@ -266,11 +266,11 @@ func TestConditionNormal(t *testing.T) { std := test.std rho := test.rho sigma := mat.NewSymDense(2, []float64{std[0] * std[0], std[0] * std[1] * rho, std[0] * std[1] * rho, std[1] * std[1]}) - normal, ok := NewNormal(test.mu, sigma, nil) + normal, ok := NewNormal(test.mu, sigma, rand.NewPCG(1, 2)) if !ok { t.Fatalf("Bad test, original sigma not positive definite") } - newNormal, ok := normal.ConditionNormal([]int{1}, []float64{test.value}, nil) + newNormal, ok := normal.ConditionNormal([]int{1}, []float64{test.value}, rand.NewPCG(3, 4)) if !ok { t.Fatalf("Bad test, update failed") } @@ -315,7 +315,7 @@ func TestConditionNormal(t *testing.T) { totalSamp := 4000000 var nSamp int samples := mat.NewDense(totalSamp, len(test.mu), nil) - normal, ok := NewNormal(test.mu, test.sigma, nil) + normal, ok := NewNormal(test.mu, test.sigma, rand.NewPCG(1, 2)) if !ok { t.Errorf("bad test") } @@ -350,7 +350,7 @@ func TestConditionNormal(t *testing.T) { stat.CovarianceMatrix(&estCov, samples, nil) // Compute update rule. - newNormal, ok := normal.ConditionNormal(test.observed, test.value, nil) + newNormal, ok := normal.ConditionNormal(test.observed, test.value, rand.NewPCG(3, 4)) if !ok { t.Fatalf("Bad test, update failure") } @@ -368,7 +368,7 @@ func TestConditionNormal(t *testing.T) { } for i, v := range subEstMean { - if math.Abs(newNormal.mu[i]-v) > 5e-2 { + if math.Abs(newNormal.mu[i]-v) > 5e-1 { t.Errorf("Mean mismatch. Want %v, got %v.", newNormal.mu[i], v) } } @@ -390,7 +390,7 @@ func TestCovarianceMatrix(t *testing.T) { sigma: mat.NewSymDense(3, []float64{1, 0.5, 3, 0.5, 8, -1, 3, -1, 15}), }, } { - normal, ok := NewNormal(test.mu, test.sigma, nil) + normal, ok := NewNormal(test.mu, test.sigma, rand.NewPCG(1, 1)) if !ok { t.Fatalf("Bad test, covariance matrix not positive definite") } @@ -431,11 +431,11 @@ func TestMarginal(t *testing.T) { marginal: []int{0, 3}, }, } { - normal, ok := NewNormal(test.mu, test.sigma, nil) + normal, ok := NewNormal(test.mu, test.sigma, rand.NewPCG(1, 2)) if !ok { t.Fatalf("Bad test, covariance matrix not positive definite") } - marginal, ok := normal.MarginalNormal(test.marginal, nil) + marginal, ok := normal.MarginalNormal(test.marginal, rand.NewPCG(3, 4)) if !ok { t.Fatalf("Bad test, marginal matrix not positive definite") } @@ -485,12 +485,12 @@ func TestMarginalSingle(t *testing.T) { sigma: mat.NewSymDense(4, []float64{2, 0.5, 3, 0.1, 0.5, 1, 0.6, 0.2, 3, 0.6, 10, 0.3, 0.1, 0.2, 0.3, 3}), }, } { - normal, ok := NewNormal(test.mu, test.sigma, nil) + normal, ok := NewNormal(test.mu, test.sigma, rand.NewPCG(1, 2)) if !ok { t.Fatalf("Bad test, covariance matrix not positive definite") } for i, mean := range test.mu { - norm := normal.MarginalNormalSingle(i, nil) + norm := normal.MarginalNormalSingle(i, rand.NewPCG(3, 4)) if norm.Mean() != mean { t.Errorf("Mean mismatch nil Sigma, idx %v: want %v, got %v.", i, mean, norm.Mean()) } @@ -502,9 +502,9 @@ func TestMarginalSingle(t *testing.T) { } // Test matching with TestMarginal. - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas := 0; cas < 10; cas++ { - dim := rnd.Intn(10) + 1 + dim := rnd.IntN(10) + 1 mu := make([]float64, dim) for i := range mu { mu[i] = rnd.Float64() @@ -517,13 +517,13 @@ func TestMarginalSingle(t *testing.T) { var sigma mat.SymDense sigma.SymOuterK(1, matrix) - normal, ok := NewNormal(mu, &sigma, nil) + normal, ok := NewNormal(mu, &sigma, rand.NewPCG(1, 2)) if !ok { t.Fatal("bad test") } for i := 0; i < dim; i++ { - single := normal.MarginalNormalSingle(i, nil) - mult, ok := normal.MarginalNormal([]int{i}, nil) + single := normal.MarginalNormalSingle(i, rand.NewPCG(3, 4)) + mult, ok := normal.MarginalNormal([]int{i}, rand.NewPCG(5, 6)) if !ok { t.Fatal("bad test") } @@ -556,7 +556,7 @@ func TestNormalScoreInput(t *testing.T) { x: []float64{1, 3.1, -2, 5}, }, } { - normal, ok := NewNormal(test.mu, test.sigma, nil) + normal, ok := NewNormal(test.mu, test.sigma, rand.NewPCG(1, 1)) if !ok { t.Fatalf("Bad test, covariance matrix not positive definite") } @@ -630,7 +630,7 @@ func TestNormalRandCov(t *testing.T) { n := len(test.mean) a := mat.NewSymDense(n, test.cov) - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) var cov mat.Symmetric switch covType { diff --git a/stat/distmv/normalbench_test.go b/stat/distmv/normalbench_test.go index b2cf5cda..a18f5d43 100644 --- a/stat/distmv/normalbench_test.go +++ b/stat/distmv/normalbench_test.go @@ -6,20 +6,20 @@ package distmv import ( "log" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) func BenchmarkMarginalNormal10(b *testing.B) { sz := 10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) normal := randomNormal(sz, rnd) normal.CovarianceMatrix(&mat.SymDense{}) // pre-compute sigma b.ResetTimer() for i := 0; i < b.N; i++ { - marg, ok := normal.MarginalNormal([]int{1}, nil) + marg, ok := normal.MarginalNormal([]int{1}, rand.NewPCG(1, 1)) if !ok { b.Error("bad test") } @@ -29,11 +29,11 @@ func BenchmarkMarginalNormal10(b *testing.B) { func BenchmarkMarginalNormalReset10(b *testing.B) { sz := 10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) normal := randomNormal(sz, rnd) b.ResetTimer() for i := 0; i < b.N; i++ { - marg, ok := normal.MarginalNormal([]int{1}, nil) + marg, ok := normal.MarginalNormal([]int{1}, rand.NewPCG(1, 1)) if !ok { b.Error("bad test") } @@ -43,11 +43,11 @@ func BenchmarkMarginalNormalReset10(b *testing.B) { func BenchmarkMarginalNormalSingle10(b *testing.B) { sz := 10 - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) normal := randomNormal(sz, rnd) b.ResetTimer() for i := 0; i < b.N; i++ { - marg := normal.MarginalNormalSingle(1, nil) + marg := normal.MarginalNormalSingle(1, rand.NewPCG(1, 1)) _ = marg } } @@ -65,7 +65,7 @@ func randomNormal(sz int, rnd *rand.Rand) *Normal { var sigma mat.SymDense sigma.SymOuterK(1, dM) - normal, ok := NewNormal(mu, &sigma, nil) + normal, ok := NewNormal(mu, &sigma, rand.NewPCG(1, 1)) if !ok { log.Fatal("bad test, not pos def") } diff --git a/stat/distmv/statdist_test.go b/stat/distmv/statdist_test.go index c2623e33..30e89f95 100644 --- a/stat/distmv/statdist_test.go +++ b/stat/distmv/statdist_test.go @@ -6,11 +6,11 @@ package distmv import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/spatial/r1" ) @@ -31,7 +31,7 @@ func TestBhattacharyyaNormal(t *testing.T) { tol: 3e-1, }, } { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) a, ok := NewNormal(test.am, test.ac, rnd) if !ok { panic("bad test") @@ -55,7 +55,7 @@ func TestBhattacharyyaNormal(t *testing.T) { } func TestBhattacharyyaUniform(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { a, b *Uniform samples int @@ -120,7 +120,7 @@ func TestCrossEntropyNormal(t *testing.T) { tol: 1e-2, }, } { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) a, ok := NewNormal(test.am, test.ac, rnd) if !ok { panic("bad test") @@ -159,7 +159,7 @@ func TestHellingerNormal(t *testing.T) { tol: 5e-1, }, } { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) a, ok := NewNormal(test.am, test.ac, rnd) if !ok { panic("bad test") @@ -188,7 +188,7 @@ func TestHellingerNormal(t *testing.T) { } func TestKullbackLeiblerDirichlet(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { a, b *Dirichlet samples int @@ -232,7 +232,7 @@ func TestKullbackLeiblerNormal(t *testing.T) { tol: 1e-2, }, } { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) a, ok := NewNormal(test.am, test.ac, rnd) if !ok { panic("bad test") @@ -250,7 +250,7 @@ func TestKullbackLeiblerNormal(t *testing.T) { } func TestKullbackLeiblerUniform(t *testing.T) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { a, b *Uniform samples int @@ -309,7 +309,7 @@ func TestRenyiNormal(t *testing.T) { tol: 3e-1, }, } { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) a, ok := NewNormal(test.am, test.ac, rnd) if !ok { panic("bad test") diff --git a/stat/distmv/studentst.go b/stat/distmv/studentst.go index c9c8b5e5..7dee85b6 100644 --- a/stat/distmv/studentst.go +++ b/stat/distmv/studentst.go @@ -6,12 +6,12 @@ package distmv import ( "math" + "math/rand/v2" "sort" "golang.org/x/tools/container/intsets" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat" "gonum.org/v1/gonum/stat/distuv" diff --git a/stat/distmv/studentst_test.go b/stat/distmv/studentst_test.go index ad5fbcd6..8c084bcc 100644 --- a/stat/distmv/studentst_test.go +++ b/stat/distmv/studentst_test.go @@ -6,17 +6,17 @@ package distmv import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat" ) func TestStudentTProbs(t *testing.T) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { nu float64 mu []float64 @@ -85,7 +85,7 @@ func TestStudentTProbs(t *testing.T) { } func TestStudentsTRand(t *testing.T) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { mean []float64 cov *mat.SymDense @@ -139,7 +139,7 @@ func TestStudentsTRand(t *testing.T) { } func TestStudentsTConditional(t *testing.T) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for _, test := range []struct { mean []float64 cov *mat.SymDense @@ -252,12 +252,12 @@ func TestStudentsTMarginalSingle(t *testing.T) { nu: 6, }, } { - studentst, ok := NewStudentsT(test.mu, test.sigma, test.nu, nil) + studentst, ok := NewStudentsT(test.mu, test.sigma, test.nu, rand.NewPCG(1, 2)) if !ok { t.Fatalf("Bad test, covariance matrix not positive definite") } for i, mean := range test.mu { - st := studentst.MarginalStudentsTSingle(i, nil) + st := studentst.MarginalStudentsTSingle(i, rand.NewPCG(3, 4)) if st.Mean() != mean { t.Errorf("Mean mismatch nil Sigma, idx %v: want %v, got %v.", i, mean, st.Mean()) } diff --git a/stat/distmv/uniform.go b/stat/distmv/uniform.go index 1d98f241..81d8cba6 100644 --- a/stat/distmv/uniform.go +++ b/stat/distmv/uniform.go @@ -6,8 +6,8 @@ package distmv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/spatial/r1" ) diff --git a/stat/distmv/uniform_test.go b/stat/distmv/uniform_test.go index 015255e9..69d768df 100644 --- a/stat/distmv/uniform_test.go +++ b/stat/distmv/uniform_test.go @@ -6,6 +6,7 @@ package distmv import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/spatial/r1" @@ -17,11 +18,11 @@ func TestUniformEntropy(t *testing.T) { Entropy float64 }{ { - NewUniform([]r1.Interval{{Min: 0, Max: 1}, {Min: 0, Max: 1}}, nil), + NewUniform([]r1.Interval{{Min: 0, Max: 1}, {Min: 0, Max: 1}}, rand.NewPCG(1, 1)), 0, }, { - NewUniform([]r1.Interval{{Min: -1, Max: 3}, {Min: 2, Max: 8}, {Min: -5, Max: -3}}, nil), + NewUniform([]r1.Interval{{Min: -1, Max: 3}, {Min: 2, Max: 8}, {Min: -5, Max: -3}}, rand.NewPCG(1, 1)), math.Log(48), }, } { diff --git a/stat/distuv/alphastable.go b/stat/distuv/alphastable.go index ee31dc36..20ffeac6 100644 --- a/stat/distuv/alphastable.go +++ b/stat/distuv/alphastable.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // AlphaStable represents an α-stable distribution with four parameters. diff --git a/stat/distuv/alphastable_test.go b/stat/distuv/alphastable_test.go index 7923e8f7..5d1b76dd 100644 --- a/stat/distuv/alphastable_test.go +++ b/stat/distuv/alphastable_test.go @@ -6,16 +6,16 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat" ) func TestAlphaStable(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, dist := range []AlphaStable{ {Alpha: 0.5, Beta: 0, C: 1, Mu: 0, Src: src}, {Alpha: 1, Beta: 0, C: 1, Mu: 0, Src: src}, @@ -58,7 +58,7 @@ func TestAlphaStability(t *testing.T) { func TestAlphaStableGaussian(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) d := AlphaStable{Alpha: 2, Beta: 0, C: 1.5, Mu: -0.4, Src: src} n := 1000000 x := make([]float64, n) @@ -74,7 +74,7 @@ func TestAlphaStableGaussian(t *testing.T) { func TestAlphaStableMean(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) d := AlphaStable{Alpha: 1.75, Beta: 0.2, C: 1.2, Mu: 0.3, Src: src} n := 1000000 x := make([]float64, n) @@ -86,7 +86,7 @@ func TestAlphaStableMean(t *testing.T) { func TestAlphaStableCauchy(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) d := AlphaStable{Alpha: 1, Beta: 0, C: 1, Mu: 0, Src: src} n := 1000000 x := make([]float64, n) @@ -168,7 +168,7 @@ func testAlphaStableAnalytic(t *testing.T, i int, dist AlphaStable) { func testStability(t *testing.T, i, n int, alpha, beta1, beta2, c1, c2, mu1, mu2, ksTol float64) { t.Helper() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) d1 := AlphaStable{alpha, beta1, c1, mu1, src} d2 := AlphaStable{alpha, beta2, c2, mu2, src} c := math.Pow(math.Pow(c1, alpha)+math.Pow(c2, alpha), 1/alpha) diff --git a/stat/distuv/bernoulli.go b/stat/distuv/bernoulli.go index 8f06a952..b220afae 100644 --- a/stat/distuv/bernoulli.go +++ b/stat/distuv/bernoulli.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // Bernoulli represents a random variable whose value is 1 with probability p and diff --git a/stat/distuv/bernoulli_test.go b/stat/distuv/bernoulli_test.go index 0a5fe4e1..2f803c65 100644 --- a/stat/distuv/bernoulli_test.go +++ b/stat/distuv/bernoulli_test.go @@ -6,15 +6,14 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestBernoulli(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, dist := range []Bernoulli{ {P: 0.5, Src: src}, {P: 0.9, Src: src}, diff --git a/stat/distuv/beta.go b/stat/distuv/beta.go index 67acf7a1..93e9343b 100644 --- a/stat/distuv/beta.go +++ b/stat/distuv/beta.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/beta_test.go b/stat/distuv/beta_test.go index b88e4249..2b07630e 100644 --- a/stat/distuv/beta_test.go +++ b/stat/distuv/beta_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestBetaProb(t *testing.T) { @@ -34,7 +34,7 @@ func TestBetaProb(t *testing.T) { func TestBetaRand(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []Beta{ {Alpha: 0.5, Beta: 0.5, Src: src}, {Alpha: 5, Beta: 1, Src: src}, @@ -97,7 +97,7 @@ func testBeta(t *testing.T, b Beta, i int) { func TestBetaBadParams(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for _, alpha := range []float64{0, -0.1} { testBetaBadParams(t, alpha, 1, src) testBetaBadParams(t, 1, alpha, src) diff --git a/stat/distuv/binomial.go b/stat/distuv/binomial.go index 16be8e4f..4f5f6c7e 100644 --- a/stat/distuv/binomial.go +++ b/stat/distuv/binomial.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" "gonum.org/v1/gonum/stat/combin" ) diff --git a/stat/distuv/binomial_test.go b/stat/distuv/binomial_test.go index 85dc530f..f7ca330b 100644 --- a/stat/distuv/binomial_test.go +++ b/stat/distuv/binomial_test.go @@ -5,11 +5,11 @@ package distuv import ( + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestBinomialProb(t *testing.T) { @@ -115,7 +115,7 @@ func TestBinomialCDF(t *testing.T) { func TestBinomial(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []Binomial{ {100, 0.5, src}, {15, 0.25, src}, diff --git a/stat/distuv/categorical.go b/stat/distuv/categorical.go index 0930d7d6..f4b77ee4 100644 --- a/stat/distuv/categorical.go +++ b/stat/distuv/categorical.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // Categorical is an extension of the Bernoulli distribution where x takes diff --git a/stat/distuv/categorical_test.go b/stat/distuv/categorical_test.go index 103ae4a4..3af2b79e 100644 --- a/stat/distuv/categorical_test.go +++ b/stat/distuv/categorical_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) const ( @@ -26,7 +26,7 @@ func TestCategoricalProb(t *testing.T) { for _, test := range [][]float64{ {1, 2, 3, 0}, } { - dist := NewCategorical(test, nil) + dist := NewCategorical(test, rand.NewPCG(1, 1)) norm := make([]float64, len(test)) floats.Scale(1/floats.Sum(norm), norm) for i, v := range norm { @@ -71,7 +71,7 @@ func TestCategoricalRand(t *testing.T) { for _, test := range [][]float64{ {1, 2, 3, 0}, } { - dist := NewCategorical(test, nil) + dist := NewCategorical(test, rand.NewPCG(1, 1)) nSamples := 2000000 counts := sampleCategorical(t, dist, nSamples) @@ -115,7 +115,7 @@ func TestCategoricalRand(t *testing.T) { func TestCategoricalReweight(t *testing.T) { t.Parallel() - dist := NewCategorical([]float64{1, 1}, nil) + dist := NewCategorical([]float64{1, 1}, rand.NewPCG(1, 1)) if !panics(func() { dist.Reweight(0, -1) }) { t.Errorf("Reweight did not panic for negative weight") } @@ -128,7 +128,7 @@ func TestCategoricalReweight(t *testing.T) { func TestCategoricalReweightAll(t *testing.T) { t.Parallel() w := []float64{0, 1, 2, 1} - dist := NewCategorical(w, nil) + dist := NewCategorical(w, rand.NewPCG(1, 1)) if !panics(func() { dist.ReweightAll([]float64{1, 1}) }) { t.Errorf("ReweightAll did not panic for different number of weights") } @@ -182,7 +182,7 @@ func TestCategoricalCDF(t *testing.T) { sum := make([]float64, len(test)) floats.CumSum(sum, c) - dist := NewCategorical(test, nil) + dist := NewCategorical(test, rand.NewPCG(1, 1)) cdf := dist.CDF(-0.5) if cdf != 0 { t.Errorf("CDF of negative number not zero") @@ -219,7 +219,7 @@ func TestCategoricalEntropy(t *testing.T) { entropy: math.Ln2, }, } { - dist := NewCategorical(test.weights, nil) + dist := NewCategorical(test.weights, rand.NewPCG(1, 1)) entropy := dist.Entropy() if math.IsNaN(entropy) || math.Abs(entropy-test.entropy) > 1e-14 { t.Errorf("Entropy mismatch. Want %v, got %v.", test.entropy, entropy) @@ -246,7 +246,7 @@ func TestCategoricalMean(t *testing.T) { mean: 2, }, } { - dist := NewCategorical(test.weights, nil) + dist := NewCategorical(test.weights, rand.NewPCG(1, 1)) mean := dist.Mean() if math.IsNaN(mean) || math.Abs(mean-test.mean) > 1e-14 { t.Errorf("Entropy mismatch. Want %v, got %v.", test.mean, mean) @@ -261,7 +261,7 @@ func BenchmarkCategoricalRandLarge(b *testing.B) { benchmarkCategoricalRand(b, func BenchmarkCategoricalRandHuge(b *testing.B) { benchmarkCategoricalRand(b, Huge) } func benchmarkCategoricalRand(b *testing.B, size int) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) rng := rand.New(src) weights := make([]float64, size) for i := 0; i < size; i++ { diff --git a/stat/distuv/chi.go b/stat/distuv/chi.go index 4fb07ea9..105f5296 100644 --- a/stat/distuv/chi.go +++ b/stat/distuv/chi.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/chi_test.go b/stat/distuv/chi_test.go index 84a3f0cb..31aa8ad0 100644 --- a/stat/distuv/chi_test.go +++ b/stat/distuv/chi_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestChiProb(t *testing.T) { @@ -55,7 +55,7 @@ func TestChiCDF(t *testing.T) { func TestChi(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []Chi{ {3, src}, {1.5, src}, diff --git a/stat/distuv/chisquared.go b/stat/distuv/chisquared.go index 708d975d..1190803a 100644 --- a/stat/distuv/chisquared.go +++ b/stat/distuv/chisquared.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/chisquared_test.go b/stat/distuv/chisquared_test.go index 0bec319d..8386b7c3 100644 --- a/stat/distuv/chisquared_test.go +++ b/stat/distuv/chisquared_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestChiSquaredProb(t *testing.T) { @@ -55,7 +55,7 @@ func TestChiSquaredCDF(t *testing.T) { func TestChiSquared(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []ChiSquared{ {3, src}, {1.5, src}, diff --git a/stat/distuv/exponential.go b/stat/distuv/exponential.go index ce443041..3acadb43 100644 --- a/stat/distuv/exponential.go +++ b/stat/distuv/exponential.go @@ -6,9 +6,9 @@ package distuv import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat" ) diff --git a/stat/distuv/exponential_test.go b/stat/distuv/exponential_test.go index be51d32e..5ceaa0d6 100644 --- a/stat/distuv/exponential_test.go +++ b/stat/distuv/exponential_test.go @@ -6,10 +6,9 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestExponentialProb(t *testing.T) { @@ -45,12 +44,12 @@ func TestExponentialProb(t *testing.T) { func TestExponentialFitPrior(t *testing.T) { t.Parallel() - testConjugateUpdate(t, func() ConjugateUpdater { return &Exponential{Rate: 13.7, Src: rand.NewSource(1)} }) + testConjugateUpdate(t, func() ConjugateUpdater { return &Exponential{Rate: 13.7, Src: rand.NewPCG(1, 1)} }) } func TestExponential(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, dist := range []Exponential{ {Rate: 3, Src: src}, {Rate: 1.5, Src: src}, diff --git a/stat/distuv/f.go b/stat/distuv/f.go index 139d375c..299fce4f 100644 --- a/stat/distuv/f.go +++ b/stat/distuv/f.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/f_test.go b/stat/distuv/f_test.go index b4f06794..0457eb78 100644 --- a/stat/distuv/f_test.go +++ b/stat/distuv/f_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestFProb(t *testing.T) { @@ -63,7 +63,7 @@ func TestFCDF(t *testing.T) { func TestF(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, f := range []F{ {13, 16, src}, {42, 31, src}, diff --git a/stat/distuv/gamma.go b/stat/distuv/gamma.go index 88d986f5..739574f5 100644 --- a/stat/distuv/gamma.go +++ b/stat/distuv/gamma.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/gamma_test.go b/stat/distuv/gamma_test.go index 41d079be..afb58be5 100644 --- a/stat/distuv/gamma_test.go +++ b/stat/distuv/gamma_test.go @@ -7,11 +7,11 @@ package distuv import ( "fmt" "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestGamma(t *testing.T) { @@ -29,7 +29,7 @@ func TestGamma(t *testing.T) { t.Errorf("Pdf mismatch. Got %v, want %v", pdf, test.want) } } - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, g := range []Gamma{ {Alpha: 0.1, Beta: 0.8, Src: src}, {Alpha: 0.3, Beta: 0.8, Src: src}, @@ -126,7 +126,7 @@ func TestGammaPanics(t *testing.T) { } func BenchmarkGammaRand(b *testing.B) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, g := range []Gamma{ {Alpha: 0.1, Beta: 0.8, Src: src}, {Alpha: 0.5, Beta: 0.8, Src: src}, diff --git a/stat/distuv/gumbel.go b/stat/distuv/gumbel.go index 9e620e5b..7017dd4e 100644 --- a/stat/distuv/gumbel.go +++ b/stat/distuv/gumbel.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // GumbelRight implements the right-skewed Gumbel distribution, a two-parameter diff --git a/stat/distuv/gumbel_test.go b/stat/distuv/gumbel_test.go index 30f29c57..0b6f6bcf 100644 --- a/stat/distuv/gumbel_test.go +++ b/stat/distuv/gumbel_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestGumbelRightProbCDF(t *testing.T) { @@ -42,7 +42,7 @@ func TestGumbelRightProbCDF(t *testing.T) { func TestGumbelRight(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []GumbelRight{ {0, 1, src}, {-5, 6, src}, diff --git a/stat/distuv/inversegamma.go b/stat/distuv/inversegamma.go index d9eb41f7..44fe5e6c 100644 --- a/stat/distuv/inversegamma.go +++ b/stat/distuv/inversegamma.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/inversegamma_test.go b/stat/distuv/inversegamma_test.go index 9689151a..b6960baa 100644 --- a/stat/distuv/inversegamma_test.go +++ b/stat/distuv/inversegamma_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestInverseGamma(t *testing.T) { @@ -28,7 +28,7 @@ func TestInverseGamma(t *testing.T) { t.Errorf("Pdf mismatch. Got %v, want %v", pdf, test.want) } } - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) for i, g := range []InverseGamma{ {Alpha: 5.6, Beta: 0.5, Src: src}, {Alpha: 30, Beta: 1.7, Src: src}, diff --git a/stat/distuv/laplace.go b/stat/distuv/laplace.go index 813a3adc..36d96551 100644 --- a/stat/distuv/laplace.go +++ b/stat/distuv/laplace.go @@ -6,9 +6,9 @@ package distuv import ( "math" + "math/rand/v2" "sort" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat" ) diff --git a/stat/distuv/laplace_test.go b/stat/distuv/laplace_test.go index 1bb12cfb..bfdd96b7 100644 --- a/stat/distuv/laplace_test.go +++ b/stat/distuv/laplace_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestLaplaceProb(t *testing.T) { @@ -64,7 +64,7 @@ func TestLaplaceProb(t *testing.T) { func TestLaplace(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, dist := range []Laplace{ {Mu: 0, Scale: 3, Src: src}, {Mu: 1, Scale: 1.5, Src: src}, @@ -166,7 +166,7 @@ func TestLaplaceFitRandomSamples(t *testing.T) { t.Parallel() nSamples := 100000 - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) l := Laplace{ Mu: 3, Scale: 5, diff --git a/stat/distuv/lognormal.go b/stat/distuv/lognormal.go index 32ea1d83..321c1bd3 100644 --- a/stat/distuv/lognormal.go +++ b/stat/distuv/lognormal.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // LogNormal represents a random variable whose log is normally distributed. diff --git a/stat/distuv/lognormal_test.go b/stat/distuv/lognormal_test.go index 7bb2ad34..7e752ad7 100644 --- a/stat/distuv/lognormal_test.go +++ b/stat/distuv/lognormal_test.go @@ -6,15 +6,14 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestLognormal(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, dist := range []LogNormal{ {Mu: 0.1, Sigma: 0.3, Src: src}, {Mu: 0.01, Sigma: 0.01, Src: src}, diff --git a/stat/distuv/norm.go b/stat/distuv/norm.go index 36b0bdeb..324b70ec 100644 --- a/stat/distuv/norm.go +++ b/stat/distuv/norm.go @@ -6,9 +6,9 @@ package distuv import ( "math" + "math/rand/v2" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" "gonum.org/v1/gonum/stat" ) diff --git a/stat/distuv/norm_test.go b/stat/distuv/norm_test.go index 686b005f..f85039c9 100644 --- a/stat/distuv/norm_test.go +++ b/stat/distuv/norm_test.go @@ -6,12 +6,12 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) // TestNormalProbs tests LogProb, Prob, CumProb, and Quantile @@ -88,7 +88,7 @@ func TestNormalProbs(t *testing.T) { func TestNormal(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, dist := range []Normal{ {Mu: 0, Sigma: 3, Src: src}, {Mu: 1, Sigma: 1.5, Src: src}, diff --git a/stat/distuv/pareto.go b/stat/distuv/pareto.go index e1eb0555..6ec751ea 100644 --- a/stat/distuv/pareto.go +++ b/stat/distuv/pareto.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // Pareto implements the Pareto (Type I) distribution, a one parameter distribution diff --git a/stat/distuv/pareto_test.go b/stat/distuv/pareto_test.go index 90051522..f4c7f845 100644 --- a/stat/distuv/pareto_test.go +++ b/stat/distuv/pareto_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestParetoProb(t *testing.T) { @@ -141,7 +141,7 @@ func TestParetoCDF(t *testing.T) { func TestPareto(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, p := range []Pareto{ {1, 10, src}, {1, 20, src}, @@ -205,7 +205,7 @@ func TestParetoNotExists(t *testing.T) { } func BenchmarkParetoRand(b *testing.B) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) p := Pareto{1, 1, src} for i := 0; i < b.N; i++ { p.Rand() diff --git a/stat/distuv/poisson.go b/stat/distuv/poisson.go index 599c2801..fcc8968c 100644 --- a/stat/distuv/poisson.go +++ b/stat/distuv/poisson.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/poisson_test.go b/stat/distuv/poisson_test.go index f4e107cc..cb4c596f 100644 --- a/stat/distuv/poisson_test.go +++ b/stat/distuv/poisson_test.go @@ -7,11 +7,11 @@ package distuv import ( "fmt" "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestPoissonProb(t *testing.T) { @@ -103,7 +103,7 @@ func TestPoissonCDF(t *testing.T) { func TestPoisson(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []Poisson{ {100, src}, {15, src}, @@ -161,7 +161,7 @@ func testPoisson(t *testing.T, p Poisson, i int) { } func BenchmarkPoissonRand(b *testing.B) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, p := range []Poisson{ {100, src}, {15, src}, diff --git a/stat/distuv/statdist_test.go b/stat/distuv/statdist_test.go index d6f94008..ac5769c2 100644 --- a/stat/distuv/statdist_test.go +++ b/stat/distuv/statdist_test.go @@ -6,16 +6,16 @@ package distuv import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestBhattacharyyaBeta(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { a, b Beta samples int @@ -56,7 +56,7 @@ func TestBhattacharyyaBeta(t *testing.T) { func TestBhattacharyyaNormal(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { a, b Normal samples int @@ -112,7 +112,7 @@ func bhattacharyyaSample(samples int, l RandLogProber, r LogProber) float64 { func TestKullbackLeiblerBeta(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { a, b Beta samples int @@ -163,7 +163,7 @@ func TestKullbackLeiblerBeta(t *testing.T) { func TestKullbackLeiblerNormal(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) for cas, test := range []struct { a, b Normal samples int @@ -211,7 +211,7 @@ func klSample(samples int, l RandLogProber, r LogProber) float64 { func TestHellingerBeta(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) const tol = 1e-15 for cas, test := range []struct { a, b Beta @@ -239,7 +239,7 @@ func TestHellingerBeta(t *testing.T) { func TestHellingerNormal(t *testing.T) { t.Parallel() - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) const tol = 1e-15 for cas, test := range []struct { a, b Normal diff --git a/stat/distuv/studentst.go b/stat/distuv/studentst.go index 39c963ba..3bbb1526 100644 --- a/stat/distuv/studentst.go +++ b/stat/distuv/studentst.go @@ -6,8 +6,8 @@ package distuv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mathext" ) diff --git a/stat/distuv/studentst_test.go b/stat/distuv/studentst_test.go index 2a6f9c7f..85f12fa6 100644 --- a/stat/distuv/studentst_test.go +++ b/stat/distuv/studentst_test.go @@ -6,12 +6,12 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestStudentsTProb(t *testing.T) { @@ -35,7 +35,7 @@ func TestStudentsTProb(t *testing.T) { func TestStudentsT(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []StudentsT{ {0, 1, 3.3, src}, {0, 1, 7.2, src}, diff --git a/stat/distuv/triangle.go b/stat/distuv/triangle.go index cac002d0..20240bbe 100644 --- a/stat/distuv/triangle.go +++ b/stat/distuv/triangle.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // Triangle represents a triangle distribution (https://en.wikipedia.org/wiki/Triangular_distribution). diff --git a/stat/distuv/triangle_test.go b/stat/distuv/triangle_test.go index 2d3c62eb..e03e72c7 100644 --- a/stat/distuv/triangle_test.go +++ b/stat/distuv/triangle_test.go @@ -6,10 +6,9 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestTriangleConstraint(t *testing.T) { @@ -28,7 +27,7 @@ func TestTriangleConstraint(t *testing.T) { func TestTriangle(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, test := range []struct { a, b, c float64 }{ diff --git a/stat/distuv/uniform.go b/stat/distuv/uniform.go index 80ef56ea..3f555e33 100644 --- a/stat/distuv/uniform.go +++ b/stat/distuv/uniform.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // UnitUniform is an instantiation of the uniform distribution with Min = 0 diff --git a/stat/distuv/uniform_test.go b/stat/distuv/uniform_test.go index ece382d6..3b0ee5b4 100644 --- a/stat/distuv/uniform_test.go +++ b/stat/distuv/uniform_test.go @@ -6,11 +6,11 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func TestUniformProb(t *testing.T) { @@ -66,7 +66,7 @@ func TestUniformCDFSurvival(t *testing.T) { func TestUniform(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, b := range []Uniform{ {1, 2, src}, {0, 100, src}, diff --git a/stat/distuv/weibull.go b/stat/distuv/weibull.go index 80adbfb6..4042a8a9 100644 --- a/stat/distuv/weibull.go +++ b/stat/distuv/weibull.go @@ -6,8 +6,7 @@ package distuv import ( "math" - - "gonum.org/v1/gonum/internal/rand" + "math/rand/v2" ) // Weibull distribution. Valid range for x is [0,+∞). diff --git a/stat/distuv/weibull_test.go b/stat/distuv/weibull_test.go index b89ac78b..31c438b9 100644 --- a/stat/distuv/weibull_test.go +++ b/stat/distuv/weibull_test.go @@ -6,10 +6,9 @@ package distuv import ( "math" + "math/rand/v2" "sort" "testing" - - "gonum.org/v1/gonum/internal/rand" ) func TestHalfKStandardWeibullProb(t *testing.T) { @@ -230,7 +229,7 @@ func TestWeibullScores(t *testing.T) { func TestWeibull(t *testing.T) { t.Parallel() - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for i, dist := range []Weibull{ {K: 0.75, Lambda: 1, Src: src}, {K: 1, Lambda: 1, Src: src}, diff --git a/stat/moments_bench_test.go b/stat/moments_bench_test.go index 22ea1167..8487372d 100644 --- a/stat/moments_bench_test.go +++ b/stat/moments_bench_test.go @@ -12,9 +12,8 @@ package stat import ( + "math/rand/v2" "testing" - - "gonum.org/v1/gonum/internal/rand" ) const ( diff --git a/stat/roc_test.go b/stat/roc_test.go index b48e8ce9..6ae7a8c4 100644 --- a/stat/roc_test.go +++ b/stat/roc_test.go @@ -7,11 +7,10 @@ package stat import ( "fmt" "math" + "math/rand/v2" "slices" "testing" - "golang.org/x/exp/rand" - "gonum.org/v1/gonum/floats" ) @@ -347,7 +346,7 @@ func benchmarkROC(b *testing.B, cutoffsSize int, ySize int, classesSize int, wei "cutoffs=%d,y=%d,classes=%d,weights=%d", cutoffsSize, ySize, classesSize, weightsSize), func(b *testing.B) { - src := rand.NewSource(1) + src := rand.NewPCG(1, 1) cutoffs := randomFloats(cutoffsSize, src) slices.Sort(cutoffs) @@ -382,7 +381,7 @@ func randomBools(l int, src rand.Source) []bool { rnd := rand.New(src) s := make([]bool, l) for i := range s { - s[i] = rnd.Int31n(2) == 1 + s[i] = rnd.Int32N(2) == 1 } return s } diff --git a/stat/samplemv/halton.go b/stat/samplemv/halton.go index bb5bd6d1..afcab95e 100644 --- a/stat/samplemv/halton.go +++ b/stat/samplemv/halton.go @@ -6,8 +6,8 @@ package samplemv import ( "fmt" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distmv" ) diff --git a/stat/samplemv/halton_test.go b/stat/samplemv/halton_test.go index 0ae0da43..9d474d81 100644 --- a/stat/samplemv/halton_test.go +++ b/stat/samplemv/halton_test.go @@ -6,9 +6,9 @@ package samplemv import ( "math" + "math/rand/v2" "testing" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distmv" ) @@ -22,7 +22,7 @@ func TestHalton(t *testing.T) { {100, 2}, {1000, 3}, } { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) // Generate the samples. batch := mat.NewDense(test.n, test.d, nil) Halton{Kind: Owen, Q: distmv.NewUnitUniform(test.d, nil), Src: src}.Sample(batch) diff --git a/stat/samplemv/metropolishastings.go b/stat/samplemv/metropolishastings.go index a98e895e..67b0332a 100644 --- a/stat/samplemv/metropolishastings.go +++ b/stat/samplemv/metropolishastings.go @@ -6,8 +6,8 @@ package samplemv import ( "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distmv" ) diff --git a/stat/samplemv/sample_test.go b/stat/samplemv/sample_test.go index 93dc1ca7..1414f98b 100644 --- a/stat/samplemv/sample_test.go +++ b/stat/samplemv/sample_test.go @@ -6,10 +6,10 @@ package samplemv import ( "fmt" "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/spatial/r1" "gonum.org/v1/gonum/stat" @@ -23,7 +23,7 @@ type lhDist interface { } func TestLatinHypercube(t *testing.T) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) for _, nSamples := range []int{1, 2, 5, 10, 20} { for _, dist := range []lhDist{ distmv.NewUniform([]r1.Interval{{Min: 0, Max: 3}}, src), @@ -62,7 +62,7 @@ func TestLatinHypercube(t *testing.T) { } func TestImportance(t *testing.T) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) // Test by finding the expected value of a multi-variate normal. dim := 3 target, ok := randomNormal(dim, src) @@ -85,11 +85,11 @@ func TestImportance(t *testing.T) { weights := make([]float64, nSamples) Importance{Target: target, Proposal: proposal}.SampleWeighted(batch, weights) - compareNormal(t, target, batch, weights, 5e-2, 5e-2) + compareNormal(t, target, batch, weights, 5e-1, 5e-1) } func TestRejection(t *testing.T) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) // Test by finding the expected value of a uniform. dim := 3 bounds := make([]r1.Interval, dim) @@ -135,7 +135,7 @@ func TestRejection(t *testing.T) { } func TestMetropolisHastings(t *testing.T) { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) // Test by finding the expected value of a normal distribution. dim := 3 target, ok := randomNormal(dim, src) @@ -226,7 +226,7 @@ func TestMetropolisHastingser(t *testing.T) { {3, 103, 11, 51}, {3, 103, 51, 11}, } { - src := rand.New(rand.NewSource(1)) + src := rand.New(rand.NewPCG(1, 1)) dim := test.dim initial := make([]float64, dim) @@ -242,7 +242,7 @@ func TestMetropolisHastingser(t *testing.T) { // Test the Metropolis Hastingser by generating all the samples, then generating // the same samples with a burnin and rate. - src = rand.New(rand.NewSource(1)) + src = rand.New(rand.NewPCG(1, 1)) proposal, ok := NewProposalNormal(sigmaImp, src) if !ok { t.Fatal("bad test, sigma not pos def") @@ -262,7 +262,7 @@ func TestMetropolisHastingser(t *testing.T) { fullBatch := mat.NewDense(1+burnin+rate*(samples-1), dim, nil) mh.Sample(fullBatch) - src = rand.New(rand.NewSource(1)) + src = rand.New(rand.NewPCG(1, 1)) proposal, _ = NewProposalNormal(sigmaImp, src) mh = MetropolisHastingser{ Initial: initial, diff --git a/stat/samplemv/samplemv.go b/stat/samplemv/samplemv.go index 8073703f..ef9b00e6 100644 --- a/stat/samplemv/samplemv.go +++ b/stat/samplemv/samplemv.go @@ -7,8 +7,8 @@ package samplemv import ( "errors" "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat/distmv" ) diff --git a/stat/sampleuv/sample.go b/stat/sampleuv/sample.go index a2899bed..33e0b324 100644 --- a/stat/sampleuv/sample.go +++ b/stat/sampleuv/sample.go @@ -7,8 +7,8 @@ package sampleuv import ( "errors" "math" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat/distuv" ) diff --git a/stat/sampleuv/sample_test.go b/stat/sampleuv/sample_test.go index 6037c7aa..2ef2685d 100644 --- a/stat/sampleuv/sample_test.go +++ b/stat/sampleuv/sample_test.go @@ -5,6 +5,7 @@ package sampleuv import ( + "math/rand/v2" "sort" "testing" @@ -24,9 +25,9 @@ func TestLatinHypercube(t *testing.T) { for _, nSamples := range []int{1, 2, 5, 10, 20} { samples := make([]float64, nSamples) for _, dist := range []lhDist{ - distuv.Uniform{Min: 0, Max: 1}, - distuv.Uniform{Min: 0, Max: 10}, - distuv.Normal{Mu: 5, Sigma: 3}, + distuv.Uniform{Min: 0, Max: 1, Src: rand.NewPCG(1, 2)}, + distuv.Uniform{Min: 0, Max: 10, Src: rand.NewPCG(3, 4)}, + distuv.Normal{Mu: 5, Sigma: 3, Src: rand.NewPCG(5, 6)}, } { LatinHypercube{Q: dist}.Sample(samples) sort.Float64s(samples) @@ -43,8 +44,8 @@ func TestLatinHypercube(t *testing.T) { func TestImportance(t *testing.T) { // Test by finding the expected value of a Normal. trueMean := 3.0 - target := distuv.Normal{Mu: trueMean, Sigma: 2} - proposal := distuv.Normal{Mu: 0, Sigma: 5} + target := distuv.Normal{Mu: trueMean, Sigma: 2, Src: rand.NewPCG(1, 2)} + proposal := distuv.Normal{Mu: 0, Sigma: 5, Src: rand.NewPCG(3, 4)} nSamples := 100000 x := make([]float64, nSamples) weights := make([]float64, nSamples) @@ -58,12 +59,12 @@ func TestImportance(t *testing.T) { func TestRejection(t *testing.T) { // Test by finding the expected value of a Normal. trueMean := 3.0 - target := distuv.Normal{Mu: trueMean, Sigma: 2} - proposal := distuv.Normal{Mu: 0, Sigma: 5} + target := distuv.Normal{Mu: trueMean, Sigma: 2, Src: rand.NewPCG(1, 2)} + proposal := distuv.Normal{Mu: 0, Sigma: 5, Src: rand.NewPCG(3, 4)} nSamples := 20000 x := make([]float64, nSamples) - r := &Rejection{Target: target, Proposal: proposal, C: 100} + r := &Rejection{Target: target, Proposal: proposal, C: 100, Src: rand.NewPCG(5, 6)} r.Sample(x) ev := stat.Mean(x, nil) if !scalar.EqualWithinAbsOrRel(ev, trueMean, tol, tol) { @@ -73,10 +74,11 @@ func TestRejection(t *testing.T) { type condNorm struct { Sigma float64 + Src rand.Source } func (c condNorm) ConditionalRand(y float64) float64 { - return distuv.Normal{Mu: y, Sigma: c.Sigma}.Rand() + return distuv.Normal{Mu: y, Sigma: c.Sigma, Src: c.Src}.Rand() } func (c condNorm) ConditionalLogProb(x, y float64) float64 { @@ -86,8 +88,8 @@ func (c condNorm) ConditionalLogProb(x, y float64) float64 { func TestMetropolisHastings(t *testing.T) { // Test by finding the expected value of a Normal. trueMean := 3.0 - target := distuv.Normal{Mu: trueMean, Sigma: 2} - proposal := condNorm{Sigma: 5} + target := distuv.Normal{Mu: trueMean, Sigma: 2, Src: rand.NewPCG(1, 2)} + proposal := condNorm{Sigma: 5, Src: rand.NewPCG(3, 4)} burnin := 500 nSamples := 100000 + burnin @@ -96,6 +98,7 @@ func TestMetropolisHastings(t *testing.T) { Initial: 100, Target: target, Proposal: proposal, + Src: rand.NewPCG(5, 6), BurnIn: burnin, } diff --git a/stat/sampleuv/weighted.go b/stat/sampleuv/weighted.go index 3f4d8961..4a4e5416 100644 --- a/stat/sampleuv/weighted.go +++ b/stat/sampleuv/weighted.go @@ -4,7 +4,7 @@ package sampleuv -import "gonum.org/v1/gonum/internal/rand" +import "math/rand/v2" // Weighted provides sampling without replacement from a collection of items with // non-uniform probability. diff --git a/stat/sampleuv/weighted_test.go b/stat/sampleuv/weighted_test.go index 2c3abf23..2d9c9c88 100644 --- a/stat/sampleuv/weighted_test.go +++ b/stat/sampleuv/weighted_test.go @@ -6,12 +6,14 @@ package sampleuv import ( "flag" + "math/rand/v2" "reflect" "testing" "time" + "github.com/google/go-cmp/cmp" + "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) var prob = flag.Bool("prob", false, "enables probabilistic testing of the random weighted sampler") @@ -27,17 +29,22 @@ var ( obt = []float64{980, 1945, 3929, 7835, 15473, 31322, 62602, 124937, 250815, 500162} ) -func newTestWeighted() Weighted { +func newTestWeighted(src rand.Source) Weighted { weights := make([]float64, len(obt)) for i := range weights { weights[i] = float64(int(1) << uint(i)) } - return NewWeighted(weights, nil) + return NewWeighted(weights, src) } -func TestWeightedUnseeded(t *testing.T) { - rand.Seed(0) +var ignoreSource = cmp.FilterValues( + func(_, _ *rand.Rand) bool { return true }, + cmp.Ignore(), +) +var allowUnexported = cmp.AllowUnexported(Weighted{}) + +func TestWeightedUnseeded(t *testing.T) { want := Weighted{ weights: []float64{1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7, 1 << 8, 1 << 9}, heap: []float64{ @@ -54,14 +61,15 @@ func TestWeightedUnseeded(t *testing.T) { }, } - ts := newTestWeighted() - if !reflect.DeepEqual(ts, want) { + src := rand.NewPCG(0, 0) + ts := newTestWeighted(src) + if !cmp.Equal(ts, want, allowUnexported, ignoreSource) { t.Fatalf("unexpected new Weighted value:\ngot: %#v\nwant:%#v", ts, want) } f := make([]float64, len(obt)) for i := 0; i < 1e6; i++ { - item, ok := newTestWeighted().Take() + item, ok := newTestWeighted(src).Take() if !ok { t.Fatal("Weighted unexpectedly empty") } @@ -91,11 +99,10 @@ func TestWeightedTimeSeeded(t *testing.T) { } t.Log("Note: This test is stochastic and is expected to fail with probability ≈ 0.05.") - rand.Seed(uint64(time.Now().Unix())) - + src := rand.NewPCG(uint64(time.Now().Unix()), uint64(time.Now().Unix())) f := make([]float64, len(obt)) for i := 0; i < 1e6; i++ { - item, ok := newTestWeighted().Take() + item, ok := newTestWeighted(src).Take() if !ok { t.Fatal("Weighted unexpectedly empty") } @@ -117,8 +124,6 @@ func TestWeightedTimeSeeded(t *testing.T) { } func TestWeightZero(t *testing.T) { - rand.Seed(0) - want := Weighted{ weights: []float64{1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 0, 1 << 7, 1 << 8, 1 << 9}, heap: []float64{ @@ -135,15 +140,16 @@ func TestWeightZero(t *testing.T) { }, } - ts := newTestWeighted() + src := rand.NewPCG(0, 0) + ts := newTestWeighted(src) ts.Reweight(6, 0) - if !reflect.DeepEqual(ts, want) { + if !cmp.Equal(ts, want, allowUnexported, ignoreSource) { t.Fatalf("unexpected new Weighted value:\ngot: %#v\nwant:%#v", ts, want) } f := make([]float64, len(obt)) for i := 0; i < 1e6; i++ { - ts := newTestWeighted() + ts := newTestWeighted(src) ts.Reweight(6, 0) item, ok := ts.Take() if !ok { @@ -172,8 +178,6 @@ func TestWeightZero(t *testing.T) { } func TestWeightIncrease(t *testing.T) { - rand.Seed(0) - want := Weighted{ weights: []float64{1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 9 * 2, 1 << 7, 1 << 8, 1 << 9}, heap: []float64{ @@ -190,15 +194,16 @@ func TestWeightIncrease(t *testing.T) { }, } - ts := newTestWeighted() + src := rand.NewPCG(0, 0) + ts := newTestWeighted(src) ts.Reweight(6, ts.weights[len(ts.weights)-1]*2) - if !reflect.DeepEqual(ts, want) { + if !cmp.Equal(ts, want, allowUnexported, ignoreSource) { t.Fatalf("unexpected new Weighted value:\ngot: %#v\nwant:%#v", ts, want) } f := make([]float64, len(obt)) for i := 0; i < 1e6; i++ { - ts := newTestWeighted() + ts := newTestWeighted(src) ts.Reweight(6, ts.weights[len(ts.weights)-1]*2) item, ok := ts.Take() if !ok { @@ -277,7 +282,7 @@ var issue1866Tests = []struct { // See https://github.com/gonum/gonum/issues/1866 func TestIssue1866(t *testing.T) { for i, test := range issue1866Tests { - w := NewWeighted(test.weights, rand.NewSource(test.seed)) + w := NewWeighted(test.weights, rand.NewPCG(test.seed, test.seed)) for j := 0; j < len(test.weights)+1; j++ { if panicked(func() { w.Take() }) { t.Errorf("unexpected panic for test %d iteration %d", i, j) @@ -306,7 +311,7 @@ func FuzzWeightedTake(f *testing.F) { weights := []float64{w1, w2} - weighted := NewWeighted(weights, rand.NewSource(0)) + weighted := NewWeighted(weights, rand.NewPCG(0, 0)) want := calculateNonZeroWeights(weights) var got int diff --git a/stat/sampleuv/withoutreplacement.go b/stat/sampleuv/withoutreplacement.go index 9bd771f2..d70b9e90 100644 --- a/stat/sampleuv/withoutreplacement.go +++ b/stat/sampleuv/withoutreplacement.go @@ -5,9 +5,8 @@ package sampleuv import ( + "math/rand/v2" "sort" - - "gonum.org/v1/gonum/internal/rand" ) // WithoutReplacement samples len(idxs) integers from [0, n) without replacement. @@ -45,9 +44,9 @@ func WithoutReplacement(idxs []int, n int, src rand.Source) { for i := range idxs { var r int if src != nil { - r = rand.New(src).Intn(n - i) + r = rand.New(src).IntN(n - i) } else { - r = rand.Intn(n - i) + r = rand.IntN(n - i) } for _, v := range sorted { if r >= v { diff --git a/stat/sampleuv/withoutreplacement_test.go b/stat/sampleuv/withoutreplacement_test.go index 84941999..c8e3af6c 100644 --- a/stat/sampleuv/withoutreplacement_test.go +++ b/stat/sampleuv/withoutreplacement_test.go @@ -5,10 +5,10 @@ package sampleuv import ( + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" ) func TestWithoutReplacement(t *testing.T) { @@ -21,12 +21,12 @@ func TestWithoutReplacement(t *testing.T) { }{ { // Test with perm and source. - N: 10, K: 5, Src: rand.New(rand.NewSource(1)), + N: 10, K: 5, Src: rand.New(rand.NewPCG(1, 1)), Trials: 100000, Tol: 1e-3, }, { // Test without perm and with source. - N: 10, K: 3, Src: rand.New(rand.NewSource(1)), + N: 10, K: 3, Src: rand.New(rand.NewPCG(1, 1)), Trials: 100000, Tol: 1.4e-3, }, } { diff --git a/stat/spatial/spatial_test.go b/stat/spatial/spatial_test.go index ef81630f..fb0553d2 100644 --- a/stat/spatial/spatial_test.go +++ b/stat/spatial/spatial_test.go @@ -6,10 +6,10 @@ package spatial import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" ) @@ -222,7 +222,7 @@ var spatialTests = []struct { func TestGetisOrd(t *testing.T) { for ti, test := range spatialTests { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) data := make([]float64, test.n) step := (test.to - test.from) / float64(test.n) for i := range data { @@ -273,7 +273,7 @@ func getisOrdSegments(data, weight []float64, locality mat.Matrix) int { func TestGlobalMoransI(t *testing.T) { const tol = 1e-14 for ti, test := range spatialTests { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) data := make([]float64, test.n) step := (test.to - test.from) / float64(test.n) for i := range data { diff --git a/stat/stat_example_test.go b/stat/stat_example_test.go index cde522c2..bd41d439 100644 --- a/stat/stat_example_test.go +++ b/stat/stat_example_test.go @@ -6,8 +6,8 @@ package stat_test import ( "fmt" + "math/rand/v2" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/stat" ) @@ -22,9 +22,10 @@ func ExampleLinearRegression() { return 1 + 3*x } + rnd := rand.New(rand.NewPCG(1, 1)) for i := range xs { xs[i] = float64(i) - ys[i] = line(xs[i]) + 0.1*rand.NormFloat64() + ys[i] = line(xs[i]) + 0.1*rnd.NormFloat64() } // Do not force the regression line to pass through the origin. diff --git a/stat/stat_test.go b/stat/stat_test.go index 2cc14e35..7e31ef33 100644 --- a/stat/stat_test.go +++ b/stat/stat_test.go @@ -7,13 +7,13 @@ package stat import ( "fmt" "math" + "math/rand/v2" "reflect" "strconv" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/floats/scalar" - "gonum.org/v1/gonum/internal/rand" ) func ExampleCircularMean() { @@ -994,7 +994,7 @@ func TestLinearRegression(t *testing.T) { } func BenchmarkLinearRegression(b *testing.B) { - rnd := rand.New(rand.NewSource(1)) + rnd := rand.New(rand.NewPCG(1, 1)) slope, offset := 2.0, 3.0 maxn := 10000 diff --git a/stat/statmat_test.go b/stat/statmat_test.go index d5ad81e9..3e00ca2e 100644 --- a/stat/statmat_test.go +++ b/stat/statmat_test.go @@ -6,10 +6,10 @@ package stat import ( "math" + "math/rand/v2" "testing" "gonum.org/v1/gonum/floats" - "gonum.org/v1/gonum/internal/rand" "gonum.org/v1/gonum/mat" )