func makeMeanStd(d []float64, m int) []float64 {
	av := make([]float64, len(d)-m+1)
	_, std, _ := util.MovMeanStd(d, m)
	mu := stat.Mean(std, nil)
	for i := 0; i < len(d)-m+1; i++ {
		if std[i] < mu {
			av[i] = 1
		}
	}
	return av
}
makeMeanStd creates an annotation vector by setting any values above the mean
of the standard deviation vector to 0 and below to 1.
package av
import (
	"fmt"
	"math"
	"gonum.org/v1/gonum/floats"
	"gonum.org/v1/gonum/stat"
	"github.com/matrix-profile-foundation/go-matrixprofile/util"
)
type AV string
const (
	Default    AV = "default"     
	Complexity AV = "complexity"  
	MeanStd    AV = "mean_std"    
	Clipping   AV = "clipping"    
)
func Create(av AV, ts []float64, m int) ([]float64, error) {
	var avec []float64
	switch av {
	case Default:
		avec = makeDefault(ts, m)
	case Complexity:
		avec = makeCompexity(ts, m)
	case MeanStd:
		avec = makeMeanStd(ts, m)
	case Clipping:
		avec = makeClipping(ts, m)
	default:
		return nil, fmt.Errorf("invalid annotation vector specified with matrix profile, %s", av)
	}
	return avec, nil
}
func makeDefault(d []float64, m int) []float64 {
	av := make([]float64, len(d)-m+1)
	for i := 0; i < len(av); i++ {
		av[i] = 1.0
	}
	return av
}
func makeCompexity(d []float64, m int) []float64 {
	av := make([]float64, len(d)-m+1)
	var ce, minAV, maxAV float64
	minAV = math.Inf(1)
	maxAV = math.Inf(-1)
	for i := 0; i < len(d)-m+1; i++ {
		ce = 0.0
		for j := 1; j < m; j++ {
			ce += (d[i+j] - d[i+j-1]) * (d[i+j] - d[i+j-1])
		}
		av[i] = math.Sqrt(ce)
		if av[i] < minAV {
			minAV = av[i]
		}
		if av[i] > maxAV {
			maxAV = av[i]
		}
	}
	for i := 0; i < len(d)-m+1; i++ {
		if maxAV == 0 {
			av[i] = 0
		} else {
			av[i] = (av[i] - minAV) / maxAV
		}
	}
	return av
}