Ctrl K
ComunidadGuías…

timeseries/funcs.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package timeseries

type F func(Time, float32, float32) float32

func Any(t Time, v1, v2 float32) float32 {
	if !IsNaN(v1) {
		return v1
	}
	return v2
}

func LastNotNaN(t Time, v1, v2 float32) float32 {
	if !IsNaN(v2) {
		return v2
	}
	return v1
}

func NanSum(t Time, sum, v float32) float32 {
	if IsNaN(sum) {
		sum = 0
	}
	if !IsNaN(v) {
		sum += v
	}
	return sum
}

func NanCount(t Time, count, v float32) float32 {
	if IsNaN(count) {
		count = 0
	}
	if !IsNaN(v) {
		count += 1
	}
	return count
}

func Max(t Time, acc, v float32) float32 {
	if IsNaN(acc) {
		return v
	}
	if IsNaN(v) {
		return acc
	}
	if v > acc {
		return v
	}
	return acc
}

func Min(t Time, acc, v float32) float32 {
	if IsNaN(acc) {
		return v
	}
	if IsNaN(v) {
		return acc
	}
	if v < acc {
		return v
	}
	return acc
}

func Defined(t Time, v float32) float32 {
	if IsNaN(v) {
		return 0
	}
	return 1
}

func NanToZero(t Time, v float32) float32 {
	if IsNaN(v) {
		return 0
	}
	return v
}

func ZeroToNan(t Time, v float32) float32 {
	if v == 0 {
		return NaN
	}
	return v
}