Go

Install from GitHub:

go get github.com/AndreyAkinshin/pragmastat/go/v12@v12.0.1

Source code: https://github.com/AndreyAkinshin/pragmastat/tree/v12.0.1/go

Demo:

package main

import (
	"fmt"
	"log"

	pragmastat "github.com/AndreyAkinshin/pragmastat/go/v12"
)

func mustM(val pragmastat.Measurement, err error) pragmastat.Measurement {
	if err != nil {
		log.Fatal(err)
	}
	return val
}

func mustB(val pragmastat.Bounds, err error) pragmastat.Bounds {
	if err != nil {
		log.Fatal(err)
	}
	return val
}

func mustS(val *pragmastat.Sample, err error) *pragmastat.Sample {
	if err != nil {
		log.Fatal(err)
	}
	return val
}

func main() {
	// --- One-Sample ---

	xVals := make([]float64, 200)
	for i := range xVals {
		xVals[i] = float64(i + 1)
	}
	x := mustS(pragmastat.NewSample(xVals))

	fmt.Println(mustM(pragmastat.Center(x)).Value)                       // 100.5
	fmt.Println(mustB(pragmastat.CenterBounds(x, 1e-3)))                 // [86;115]
	fmt.Println(mustM(pragmastat.Spread(x)).Value)                       // 59
	fmt.Println(mustB(pragmastat.SpreadBoundsWithSeed(x, 1e-3, "demo"))) // [44;87]

	// --- Two-Sample ---

	sxVals := make([]float64, 200)
	for i := range sxVals {
		sxVals[i] = float64(i + 1)
	}
	syVals := make([]float64, 200)
	for i := range syVals {
		syVals[i] = float64(i + 101)
	}
	sx := mustS(pragmastat.NewSample(sxVals))
	sy := mustS(pragmastat.NewSample(syVals))

	fmt.Println(mustM(pragmastat.Shift(sx, sy)).Value)                           // -100
	fmt.Println(mustB(pragmastat.ShiftBounds(sx, sy, 1e-3)))                     // [-120;-80]
	fmt.Println(mustM(pragmastat.Ratio(sx, sy)).Value)                           // 0.5008354224706336
	fmt.Println(mustB(pragmastat.RatioBounds(sx, sy, 1e-3)))                     // [0.4066666666666668;0.5958333333333332]
	fmt.Println(mustM(pragmastat.Disparity(sx, sy)).Value)                       // -1.694915254237288
	fmt.Println(mustB(pragmastat.DisparityBoundsWithSeed(sx, sy, 1e-3, "demo"))) // [-3.1025641025641026;-0.8494623655913979]

	// --- Randomization ---

	rng := pragmastat.NewRngFromString("demo-uniform")
	fmt.Println(rng.UniformFloat64()) // 0.2640554428629759
	fmt.Println(rng.UniformFloat64()) // 0.9348534835582796

	rng = pragmastat.NewRngFromString("demo-uniform-int")
	fmt.Println(rng.UniformInt64(0, 100)) // 41

	rng = pragmastat.NewRngFromString("demo-sample")
	fmt.Println(pragmastat.RngSample(rng, []float64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 3)) // [3 8 9]

	rng = pragmastat.NewRngFromString("demo-resample")
	fmt.Println(pragmastat.RngResample(rng, []float64{1, 2, 3, 4, 5}, 7)) // [3 1 3 2 4 1 2]

	rng = pragmastat.NewRngFromString("demo-shuffle")
	fmt.Println(pragmastat.RngShuffle(rng, []float64{1, 2, 3, 4, 5})) // [4 2 3 5 1]

	// --- Distributions ---

	rng = pragmastat.NewRngFromString("demo-dist-additive")
	fmt.Println(pragmastat.NewAdditive(0, 1).Sample(rng)) // 0.1741044867956819

	rng = pragmastat.NewRngFromString("demo-dist-multiplic")
	fmt.Println(pragmastat.NewMultiplic(0, 1).Sample(rng)) // 1.1273244602673853

	rng = pragmastat.NewRngFromString("demo-dist-exp")
	fmt.Println(pragmastat.NewExp(1).Sample(rng)) // 0.6589065267276553

	rng = pragmastat.NewRngFromString("demo-dist-power")
	fmt.Println(pragmastat.NewPower(1, 2).Sample(rng)) // 1.023677535537084

	rng = pragmastat.NewRngFromString("demo-dist-uniform")
	fmt.Println(pragmastat.NewUniform(0, 10).Sample(rng)) // 6.54043657816832
}