Skip to content

Commit 76ff67d

Browse files
committed
feat(extensions): support int arguments with std_dev and variance functions
Signed-off-by: Niels Pardon <par@zurich.ibm.com>
1 parent 9cbedba commit 76ff67d

File tree

3 files changed

+142
-0
lines changed

3 files changed

+142
-0
lines changed

extensions/functions_arithmetic.yaml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,6 +1438,46 @@ aggregate_functions:
14381438
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
14391439
nullability: DECLARED_OUTPUT
14401440
return: fp64?
1441+
- args:
1442+
- name: x
1443+
value: i8
1444+
- name: distribution
1445+
options: [ SAMPLE, POPULATION]
1446+
options:
1447+
rounding:
1448+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1449+
nullability: DECLARED_OUTPUT
1450+
return: fp64?
1451+
- args:
1452+
- name: x
1453+
value: i16
1454+
- name: distribution
1455+
options: [ SAMPLE, POPULATION]
1456+
options:
1457+
rounding:
1458+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1459+
nullability: DECLARED_OUTPUT
1460+
return: fp64?
1461+
- args:
1462+
- name: x
1463+
value: i32
1464+
- name: distribution
1465+
options: [ SAMPLE, POPULATION]
1466+
options:
1467+
rounding:
1468+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1469+
nullability: DECLARED_OUTPUT
1470+
return: fp64?
1471+
- args:
1472+
- name: x
1473+
value: i64
1474+
- name: distribution
1475+
options: [ SAMPLE, POPULATION]
1476+
options:
1477+
rounding:
1478+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1479+
nullability: DECLARED_OUTPUT
1480+
return: fp64?
14411481
- name: "variance"
14421482
description: Calculates variance for a set of values.
14431483
impls:
@@ -1487,6 +1527,46 @@ aggregate_functions:
14871527
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
14881528
nullability: DECLARED_OUTPUT
14891529
return: fp64?
1530+
- args:
1531+
- name: x
1532+
value: i8
1533+
- name: distribution
1534+
options: [ SAMPLE, POPULATION]
1535+
options:
1536+
rounding:
1537+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1538+
nullability: DECLARED_OUTPUT
1539+
return: fp64?
1540+
- args:
1541+
- name: x
1542+
value: i16
1543+
- name: distribution
1544+
options: [ SAMPLE, POPULATION]
1545+
options:
1546+
rounding:
1547+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1548+
nullability: DECLARED_OUTPUT
1549+
return: fp64?
1550+
- args:
1551+
- name: x
1552+
value: i32
1553+
- name: distribution
1554+
options: [ SAMPLE, POPULATION]
1555+
options:
1556+
rounding:
1557+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1558+
nullability: DECLARED_OUTPUT
1559+
return: fp64?
1560+
- args:
1561+
- name: x
1562+
value: i64
1563+
- name: distribution
1564+
options: [ SAMPLE, POPULATION]
1565+
options:
1566+
rounding:
1567+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1568+
nullability: DECLARED_OUTPUT
1569+
return: fp64?
14901570
- name: "corr"
14911571
description: >
14921572
Calculates the value of Pearson's correlation coefficient between `x` and `y`.

tests/cases/arithmetic/std_dev.test

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,30 @@
5151
# mixed_range: Standard deviation with mixed range values
5252
((0.0, 100.0, 50.0, 25.0, 75.0)) std_dev(col0::fp32, SAMPLE::enum) = 41.010193::fp32?
5353
((0.0, 100.0, 50.0, 25.0, 75.0)) std_dev(col0::fp64, POPULATION::enum) = 36.66060555964672::fp64?
54+
55+
56+
# integer_types: Standard deviation with integer input types returning fp64
57+
((1, 2, 3, 4, 5)) std_dev(col0::i8, SAMPLE::enum) = 1.5811388300841898::fp64?
58+
((1, 2, 3, 4, 5)) std_dev(col0::i8, POPULATION::enum) = 1.4142135623730951::fp64?
59+
((1, 2, 3, 4, 5)) std_dev(col0::i16, SAMPLE::enum) = 1.5811388300841898::fp64?
60+
((1, 2, 3, 4, 5)) std_dev(col0::i16, POPULATION::enum) = 1.4142135623730951::fp64?
61+
((1, 2, 3, 4, 5)) std_dev(col0::i32, SAMPLE::enum) = 1.5811388300841898::fp64?
62+
((1, 2, 3, 4, 5)) std_dev(col0::i32, POPULATION::enum) = 1.4142135623730951::fp64?
63+
((1, 2, 3, 4, 5)) std_dev(col0::i64, SAMPLE::enum) = 1.5811388300841898::fp64?
64+
((1, 2, 3, 4, 5)) std_dev(col0::i64, POPULATION::enum) = 1.4142135623730951::fp64?
65+
66+
# integer_negative: Standard deviation with negative integer values
67+
((-5, -3, -1, 1, 3, 5)) std_dev(col0::i32, SAMPLE::enum) = 3.8944404818493075::fp64?
68+
((-10, -5, 0, 5, 10)) std_dev(col0::i64, POPULATION::enum) = 7.0710678118654755::fp64?
69+
70+
# integer_uniform: Standard deviation with uniform integer values
71+
((42, 42, 42, 42)) std_dev(col0::i16, SAMPLE::enum) = 0.0::fp64?
72+
((100, 100, 100, 100)) std_dev(col0::i32, POPULATION::enum) = 0.0::fp64?
73+
74+
# integer_single: Standard deviation with single integer value
75+
((7)) std_dev(col0::i8, SAMPLE::enum) = Null::fp64?
76+
((99)) std_dev(col0::i64, POPULATION::enum) = 0.0::fp64?
77+
78+
# integer_large_values: Standard deviation with large integer values
79+
((1000, 2000, 3000, 4000, 5000)) std_dev(col0::i32, SAMPLE::enum) = 1581.1388300841898::fp64?
80+
((100, 200, 300, 400, 500)) std_dev(col0::i64, POPULATION::enum) = 141.4213562373095::fp64?

tests/cases/arithmetic/variance.test

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,38 @@
5959
# three_values: Variance with three values
6060
((10.0, 20.0, 30.0)) variance(col0::fp32, SAMPLE::enum) = 100.0::fp32?
6161
((10.0, 20.0, 30.0)) variance(col0::fp64, POPULATION::enum) = 66.66666666666667::fp64?
62+
63+
64+
# integer_types: Variance with integer input types returning fp64
65+
((1, 2, 3, 4, 5)) variance(col0::i8, SAMPLE::enum) = 2.5::fp64?
66+
((1, 2, 3, 4, 5)) variance(col0::i8, POPULATION::enum) = 2.0::fp64?
67+
((1, 2, 3, 4, 5)) variance(col0::i16, SAMPLE::enum) = 2.5::fp64?
68+
((1, 2, 3, 4, 5)) variance(col0::i16, POPULATION::enum) = 2.0::fp64?
69+
((1, 2, 3, 4, 5)) variance(col0::i32, SAMPLE::enum) = 2.5::fp64?
70+
((1, 2, 3, 4, 5)) variance(col0::i32, POPULATION::enum) = 2.0::fp64?
71+
((1, 2, 3, 4, 5)) variance(col0::i64, SAMPLE::enum) = 2.5::fp64?
72+
((1, 2, 3, 4, 5)) variance(col0::i64, POPULATION::enum) = 2.0::fp64?
73+
74+
# integer_negative: Variance with negative integer values
75+
((-5, -3, -1, 1, 3, 5)) variance(col0::i32, SAMPLE::enum) = 15.166666666666666::fp64?
76+
((-10, -5, 0, 5, 10)) variance(col0::i64, POPULATION::enum) = 50.0::fp64?
77+
78+
# integer_uniform: Variance with uniform integer values
79+
((42, 42, 42, 42)) variance(col0::i16, SAMPLE::enum) = 0.0::fp64?
80+
((100, 100, 100, 100)) variance(col0::i32, POPULATION::enum) = 0.0::fp64?
81+
82+
# integer_single: Variance with single integer value
83+
((7)) variance(col0::i8, SAMPLE::enum) = Null::fp64?
84+
((99)) variance(col0::i64, POPULATION::enum) = 0.0::fp64?
85+
86+
# integer_large_values: Variance with large integer values
87+
((1000, 2000, 3000, 4000, 5000)) variance(col0::i32, SAMPLE::enum) = 2500000.0::fp64?
88+
((100, 200, 300, 400, 500)) variance(col0::i64, POPULATION::enum) = 20000.0::fp64?
89+
90+
# integer_zero_mean: Variance with integer values around zero
91+
((-2, -1, 0, 1, 2)) variance(col0::i16, SAMPLE::enum) = 2.5::fp64?
92+
((-2, -1, 0, 1, 2)) variance(col0::i64, POPULATION::enum) = 2.0::fp64?
93+
94+
# integer_three_values: Variance with three integer values
95+
((10, 20, 30)) variance(col0::i32, SAMPLE::enum) = 100.0::fp64?
96+
((10, 20, 30)) variance(col0::i8, POPULATION::enum) = 66.66666666666667::fp64?

0 commit comments

Comments
 (0)