Go

Install from GitHub:

go get github.com/AndreyAkinshin/pragmastat/go/v4@v10.0.2

Source code: https://github.com/AndreyAkinshin/pragmastat/tree/v10.0.2/go

Demo:

package main

import (
	"fmt"
	"log"

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

func must[T any](val T, err error) T {
	if err != nil {
		log.Fatal(err)
	}
	return val
}

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

	x := []float64{
		1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
		11, 12, 13, 14, 15, 16, 17, 18, 19, 20}

	fmt.Println(must(pragmastat.Center(x)))                             // 10.5
	fmt.Println(must(pragmastat.CenterBounds(x, 0.05)))                 // {7.5 13.5}
	fmt.Println(must(pragmastat.Spread(x)))                             // 6
	fmt.Println(must(pragmastat.SpreadBoundsWithSeed(x, 0.05, "demo"))) // {2 10}

	// --- Two-Sample ---

	x = []float64{
		1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
		16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}
	y := []float64{
		21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
		36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50}

	fmt.Println(must(pragmastat.Shift(x, y)))                                 // -20
	fmt.Println(must(pragmastat.ShiftBounds(x, y, 0.05)))                     // {-25 -15}
	fmt.Println(must(pragmastat.Ratio(x, y)))                                 // 0.4366979828269513
	fmt.Println(must(pragmastat.RatioBounds(x, y, 0.05)))                     // {0.31250000000000006 0.5600000000000003}
	fmt.Println(must(pragmastat.Disparity(x, y)))                             // -2.2222222222222223
	fmt.Println(must(pragmastat.DisparityBoundsWithSeed(x, y, 0.05, "demo"))) // {-13 -0.8235294117647058}

	// --- 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.Sample(rng, []float64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 3)) // [3 8 9]

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

	rng = pragmastat.NewRngFromString("demo-shuffle")
	fmt.Println(pragmastat.Shuffle(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
}