feat: bind Greptime's own UDF&UDAF into Python Coprocessor Module (#335)

* feat: port own UDF&UDAF into py copr(untest yet)

* refactor: move UDF&UDAF to greptime_builtins

* feat: support List in val2py_obj

* test: some testcases for newly added UDFs

* test: complete test for all added gpdb's own UDF

* refactor: add underscore for long func name

* feat: better error message

* fix: typo
This commit is contained in:
discord9
2022-11-04 15:49:41 +08:00
committed by GitHub
parent bc701d3e7f
commit 3d195ff858
4 changed files with 362 additions and 17 deletions

View File

@@ -924,5 +924,198 @@ sum(prev(values))"#,
ty: Float64,
value: Float(3.0)
))
),
TestCase(
input: {
"values": Var(
ty: Float64,
value: FloatVec([1.0, 2.0, 3.0])
),
"pows": Var(
ty: Float64,
value: FloatVec([1.0, 2.0, 3.0])
),
},
script: r#"
from greptime import *
pow_gp(values, pows)"#,
expect: Ok((
ty: Float64,
value: FloatVec([1.0, 4.0, 27.0])
))
),
TestCase(
input: {
"values": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 0.5])
),
"lower": Var(
ty: Float64,
value: FloatVec([0.0, 0.0, 0.0])
),
"upper": Var(
ty: Float64,
value: FloatVec([1.0, 1.0, 1.0])
),
},
script: r#"
from greptime import *
clip(values, lower, upper)"#,
expect: Ok((
ty: Float64,
value: FloatVec([0.0, 1.0, 0.5])
))
),
TestCase(
input: {
"values": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 2.0, 0.5])
)
},
script: r#"
from greptime import *
median(values)"#,
expect: Ok((
ty: Float64,
value: Float(1.25)
))
),
TestCase(
input: {
"values": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 2.0, 0.5])
)
},
script: r#"
from greptime import *
diff(values)"#,
expect: Ok((
ty: Float64,
value: FloatVec([3.0, 0.0, -1.5])
))
),
TestCase(
input: {
"values": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 2.0, 0.0])
)
},
script: r#"
from greptime import *
mean(values)"#,
expect: Ok((
ty: Float64,
value: Float(0.75)
))
),
TestCase(
input: {
"p": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0])
),
"x": Var(
ty: Int64,
value: IntVec([1, 1])
)
},
script: r#"
from greptime import *
polyval(p, x)"#,
expect: Ok((
ty: Float64,
value: Float(1.0)
))
),
TestCase(
input: {
"p": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 3.0])
)
},
script: r#"
from greptime import *
argmax(p)"#,
expect: Ok((
ty: Int64,
value: Int(2)
))
),
TestCase(
input: {
"p": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 3.0])
)
},
script: r#"
from greptime import *
argmin(p)"#,
expect: Ok((
ty: Int64,
value: Int(0)
))
),
TestCase(
input: {
"x": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 3.0])
),
"p": Var(
ty: Float64,
value: FloatVec([0.5, 0.5, 0.5])
)
},
script: r#"
from greptime import *
percentile(x, p)"#,
expect: Ok((
ty: Float64,
value: Float(-0.97)
))
),
TestCase(
input: {
"x": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 3.0])
),
"p": Var(
ty: Float64,
value: FloatVec([0.5, 0.5, 0.5])
)
},
script: r#"
from greptime import *
scipy_stats_norm_cdf(x, p)"#,
expect: Ok((
ty: Float64,
value: Float(0.3444602779022303)
))
),
TestCase(
input: {
"x": Var(
ty: Float64,
value: FloatVec([-1.0, 2.0, 3.0])
),
"p": Var(
ty: Float64,
value: FloatVec([0.5, 0.5, 0.5])
)
},
script: r#"
from greptime import *
scipy_stats_norm_pdf(x, p)"#,
expect: Ok((
ty: Float64,
value: Float(0.1768885735289059)
))
)
]