Files
obitools4/pkg/obieval/language.go
Eric Coissac 20b16c0ba1 Force sequence reading to produce lowercase sequences.
Adds two columns to the obiclean ratio csv file
2022-11-22 15:06:09 +01:00

147 lines
2.1 KiB
Go

package obieval
import (
"git.metabarcoding.org/lecasofts/go/obitools/pkg/goutils"
"github.com/PaesslerAG/gval"
)
func maxIntVector(values []int) float64 {
m := values[0]
for _,v := range values {
if v > m {
m = v
}
}
return float64(m)
}
func maxIntMap(values map[string]int) float64 {
var m int
first := true
for _,v := range values {
if first {
first = false
m = v
} else {
if v > m {
m = v
}
}
}
return float64(m)
}
func minIntVector(values []int) float64 {
m := values[0]
for _,v := range values {
if v < m {
m = v
}
}
return float64(m)
}
func minIntMap(values map[string]int) float64 {
var m int
first := true
for _,v := range values {
if first {
first = false
m = v
} else {
if v < m {
m = v
}
}
}
return float64(m)
}
func maxFloatVector(values []float64) float64 {
m := values[0]
for _,v := range values {
if v > m {
m = v
}
}
return m
}
func maxFloatMap(values map[string]float64) float64 {
var m float64
first := true
for _,v := range values {
if first {
first = false
m = v
} else {
if v > m {
m = v
}
}
}
return m
}
func minFloatVector(values []float64) float64 {
m := values[0]
for _,v := range values {
if v < m {
m = v
}
}
return m
}
func minFloatMap(values map[string]float64) float64 {
var m float64
first := true
for _,v := range values {
if first {
first = false
m = v
} else {
if v < m {
m = v
}
}
}
return m
}
// func maxNumeric(args ...interface{}) (interface{}, error) {
// var m float64
// first := true
// for _, v := range args {
// switch {
// case
// }
// }
// }
var OBILang = gval.NewLanguage(
gval.Full(),
gval.Function("len", func(args ...interface{}) (interface{}, error) {
length := goutils.Len(args[0])
return (float64)(length), nil
}),
gval.Function("ismap", func(args ...interface{}) (interface{}, error) {
ismap := goutils.IsAMap(args[0])
return ismap, nil
}))
func Expression(expression string) (gval.Evaluable, error) {
return OBILang.NewEvaluable(expression)
}