shortcuts/stat/src/GoNumStat.go
2024-09-28 22:18:36 +02:00

515 lines
11 KiB
Go

//go:build js && wasm
// +build js,wasm
package src
import (
"syscall/js"
"gonum.org/v1/gonum/stat"
)
func Bhattacharyya(this js.Value, args []js.Value) interface{} {
var (
p = JSFloatArray(args[0])
q = JSFloatArray(args[1])
)
return stat.Bhattacharyya(p, q)
}
func BivariateMoment(this js.Value, args []js.Value) interface{} {
var (
r = args[0].Float()
s = args[1].Float()
xs = JSFloatArray(args[2])
ys = JSFloatArray(args[3])
weights = JSFloatArray(args[4])
)
if len(weights) == 0 {
weights = nil
}
return stat.BivariateMoment(r, s, xs, ys, weights)
}
func CDF(this js.Value, args []js.Value) interface{} {
var (
q = args[0].Float()
xs = JSFloatArray(args[2])
weights = JSFloatArray(args[3])
)
return stat.CDF(q, 1, xs, weights)
}
func ChiSquare(this js.Value, args []js.Value) interface{} {
var (
p = JSFloatArray(args[0])
q = JSFloatArray(args[1])
)
return stat.ChiSquare(p, q)
}
func CircularMean(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.CircularMean(xs, weights)
}
func Correlation(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
ys = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
)
if len(weights) == 0 {
weights = nil
}
return stat.Correlation(xs, ys, weights)
}
func CorrelationMatrix(this js.Value, args []js.Value) interface{} {
panic("not implemented")
}
func Covariance(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
ys = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
)
if len(weights) == 0 {
weights = nil
}
return stat.Covariance(xs, ys, weights)
}
func CovarianceMatrix(this js.Value, args []js.Value) interface{} {
panic("not implemented")
}
func CrossEntropy(this js.Value, args []js.Value) interface{} {
var (
p = JSFloatArray(args[0])
q = JSFloatArray(args[1])
)
return stat.CrossEntropy(p, q)
}
func Entropy(this js.Value, args []js.Value) interface{} {
var (
p = JSFloatArray(args[0])
)
return stat.Entropy(p)
}
func ExKurtosis(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.ExKurtosis(xs, weights)
}
func GeometricMean(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.GeometricMean(xs, weights)
}
func HarmonicMean(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.HarmonicMean(xs, weights)
}
func Hellinger(this js.Value, args []js.Value) interface{} {
var (
p = JSFloatArray(args[0])
q = JSFloatArray(args[1])
)
return stat.Hellinger(p, q)
}
func Histogram(this js.Value, args []js.Value) interface{} {
var (
counts = JSFloatArray(args[0])
divs = JSFloatArray(args[1])
xs = JSFloatArray(args[2])
weights = JSFloatArray(args[3])
)
if len(weights) == 0 {
weights = nil
}
return stat.Histogram(counts, divs, xs, weights)
}
func JensenShannon(this js.Value, args []js.Value) interface{} {
var (
p = JSFloatArray(args[0])
q = JSFloatArray(args[1])
)
return stat.JensenShannon(p, q)
}
func Kendall(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
ys = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
)
if len(weights) == 0 {
weights = nil
}
return stat.Kendall(xs, ys, weights)
}
func KolmogorovSmirnov(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
xWeights = JSFloatArray(args[1])
ys = JSFloatArray(args[2])
yWeights = JSFloatArray(args[3])
)
return stat.KolmogorovSmirnov(xs, xWeights, ys, yWeights)
}
func KullbackLeibler(this js.Value, args []js.Value) interface{} {
var (
p = JSFloatArray(args[0])
q = JSFloatArray(args[1])
)
return stat.KullbackLeibler(p, q)
}
func LinearRegression(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
ys = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
origin = args[3].Bool()
)
if len(weights) == 0 {
weights = nil
}
alpha, beta := stat.LinearRegression(xs, ys, weights, origin)
return map[string]interface{}{
"alpha": alpha,
"beta": beta,
}
}
func Mahalanobis(this js.Value, args []js.Value) interface{} {
panic("not implemented")
}
func Mean(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.Mean(xs, weights)
}
func MeanStdDev(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
mean, stdDev := stat.MeanStdDev(xs, weights)
return map[string]interface{}{
"mean": mean,
"stdDev": stdDev,
}
}
func MeanVariance(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
mean, variance := stat.MeanVariance(xs, weights)
return map[string]interface{}{
"mean": mean,
"variance": variance,
}
}
func Mode(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
value, count := stat.Mode(xs, weights)
return map[string]interface{}{
"value": value,
"count": count,
}
}
func Moment(this js.Value, args []js.Value) interface{} {
var (
r = args[0].Float()
xs = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
)
if len(weights) == 0 {
weights = nil
}
return stat.Moment(r, xs, weights)
}
func MomentAbout(this js.Value, args []js.Value) interface{} {
var (
r = args[0].Float()
xs = JSFloatArray(args[1])
mean = args[2].Float()
weights = JSFloatArray(args[3])
)
if len(weights) == 0 {
weights = nil
}
return stat.MomentAbout(r, xs, mean, weights)
}
func PopMeanStdDev(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
mean, stdDev := stat.PopMeanStdDev(xs, weights)
return map[string]interface{}{
"mean": mean,
"stdDev": stdDev,
}
}
func PopMeanVariance(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
mean, variance := stat.PopMeanVariance(xs, weights)
return map[string]interface{}{
"mean": mean,
"variance": variance,
}
}
func PopStdDev(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.PopStdDev(xs, weights)
}
func PopVariance(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.PopVariance(xs, weights)
}
func Quantile(this js.Value, args []js.Value) interface{} {
var (
q = args[0].Float()
typ = args[1].String()
xs = JSFloatArray(args[2])
weights = JSFloatArray(args[3])
)
if typ == "empirical" {
return stat.Quantile(q, 1, xs, weights)
} else if typ == "linear" {
return stat.Quantile(q, 4, xs, weights)
} else {
return stat.Quantile(q, 2, xs, weights)
}
}
func RNoughtSquared(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
ys = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
beta = args[3].Float()
)
if len(weights) == 0 {
weights = nil
}
return stat.RNoughtSquared(xs, ys, weights, beta)
}
func ROC(this js.Value, args []js.Value) interface{} {
var (
cutoffs = JSFloatArray(args[0])
y = JSFloatArray(args[1])
classes = JSBoolArray(args[2])
weights = JSFloatArray(args[3])
)
tpr, fpr, tresh := stat.ROC(cutoffs, y, classes, weights)
return map[string]interface{}{
"tpr": tpr,
"fpr": fpr,
"tresh": tresh,
}
}
func RSquared(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
ys = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
alpha = args[3].Float()
beta = args[4].Float()
)
if len(weights) == 0 {
weights = nil
}
return stat.RSquared(xs, ys, weights, alpha, beta)
}
func RSquaredFrom(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
ys = JSFloatArray(args[1])
weights = JSFloatArray(args[2])
)
if len(weights) == 0 {
weights = nil
}
return stat.RSquaredFrom(xs, ys, weights)
}
func Skew(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.Skew(xs, weights)
}
func SortWeighted(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
stat.SortWeighted(xs, weights)
return xs
}
func SortWeightedLabeled(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
labels = JSBoolArray(args[1])
weights = JSFloatArray(args[2])
)
if len(weights) == 0 {
weights = nil
}
stat.SortWeightedLabeled(xs, labels, weights)
return map[string]interface{}{
"xs": xs,
"labels": labels,
}
}
func StdDev(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.StdDev(xs, weights)
}
func StdErr(this js.Value, args []js.Value) interface{} {
var (
std = args[0].Float()
size = args[1].Float()
)
return stat.StdErr(std, size)
}
func StdScore(this js.Value, args []js.Value) interface{} {
var (
x = args[0].Float()
mean = args[1].Float()
std = args[2].Float()
)
return stat.StdScore(x, mean, std)
}
func TOC(this js.Value, args []js.Value) interface{} {
var (
classes = JSBoolArray(args[0])
weights = JSFloatArray(args[1])
)
min, ntp, max := stat.TOC(classes, weights)
return map[string]interface{}{
"min": min,
"ntp": ntp,
"max": max,
}
}
func Variance(this js.Value, args []js.Value) interface{} {
var (
xs = JSFloatArray(args[0])
weights = JSFloatArray(args[1])
)
if len(weights) == 0 {
weights = nil
}
return stat.Variance(xs, weights)
}