Skip to content

Commit 7219621

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 6275d23 commit 7219621

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
@@ -1432,6 +1432,46 @@ aggregate_functions:
14321432
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
14331433
nullability: DECLARED_OUTPUT
14341434
return: fp64?
1435+
- args:
1436+
- name: x
1437+
value: i8
1438+
- name: distribution
1439+
options: [ SAMPLE, POPULATION]
1440+
options:
1441+
rounding:
1442+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1443+
nullability: DECLARED_OUTPUT
1444+
return: fp64?
1445+
- args:
1446+
- name: x
1447+
value: i16
1448+
- name: distribution
1449+
options: [ SAMPLE, POPULATION]
1450+
options:
1451+
rounding:
1452+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1453+
nullability: DECLARED_OUTPUT
1454+
return: fp64?
1455+
- args:
1456+
- name: x
1457+
value: i32
1458+
- name: distribution
1459+
options: [ SAMPLE, POPULATION]
1460+
options:
1461+
rounding:
1462+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1463+
nullability: DECLARED_OUTPUT
1464+
return: fp64?
1465+
- args:
1466+
- name: x
1467+
value: i64
1468+
- name: distribution
1469+
options: [ SAMPLE, POPULATION]
1470+
options:
1471+
rounding:
1472+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1473+
nullability: DECLARED_OUTPUT
1474+
return: fp64?
14351475
- name: "variance"
14361476
description: Calculates variance for a set of values.
14371477
impls:
@@ -1475,6 +1515,46 @@ aggregate_functions:
14751515
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
14761516
nullability: DECLARED_OUTPUT
14771517
return: fp64?
1518+
- args:
1519+
- name: x
1520+
value: i8
1521+
- name: distribution
1522+
options: [ SAMPLE, POPULATION]
1523+
options:
1524+
rounding:
1525+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1526+
nullability: DECLARED_OUTPUT
1527+
return: fp64?
1528+
- args:
1529+
- name: x
1530+
value: i16
1531+
- name: distribution
1532+
options: [ SAMPLE, POPULATION]
1533+
options:
1534+
rounding:
1535+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1536+
nullability: DECLARED_OUTPUT
1537+
return: fp64?
1538+
- args:
1539+
- name: x
1540+
value: i32
1541+
- name: distribution
1542+
options: [ SAMPLE, POPULATION]
1543+
options:
1544+
rounding:
1545+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1546+
nullability: DECLARED_OUTPUT
1547+
return: fp64?
1548+
- args:
1549+
- name: x
1550+
value: i64
1551+
- name: distribution
1552+
options: [ SAMPLE, POPULATION]
1553+
options:
1554+
rounding:
1555+
values: [ TIE_TO_EVEN, TIE_AWAY_FROM_ZERO, TRUNCATE, CEILING, FLOOR ]
1556+
nullability: DECLARED_OUTPUT
1557+
return: fp64?
14781558
- name: "corr"
14791559
description: >
14801560
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)