datafusion_functions/math/
bounds.rs1use datafusion_common::ScalarValue;
19use datafusion_expr::interval_arithmetic::Interval;
20
21pub(super) fn unbounded_bounds(input: &[&Interval]) -> crate::Result<Interval> {
22 let data_type = input[0].data_type();
23
24 Interval::make_unbounded(&data_type)
25}
26
27pub(super) fn sin_bounds(input: &[&Interval]) -> crate::Result<Interval> {
28 let data_type = input[0].data_type();
30
31 Interval::make_symmetric_unit_interval(&data_type)
32}
33
34pub(super) fn asin_bounds(input: &[&Interval]) -> crate::Result<Interval> {
35 let data_type = input[0].data_type();
37
38 Interval::make_symmetric_half_pi_interval(&data_type)
39}
40
41pub(super) fn atan_bounds(input: &[&Interval]) -> crate::Result<Interval> {
42 let data_type = input[0].data_type();
44
45 Interval::make_symmetric_half_pi_interval(&data_type)
46}
47
48pub(super) fn acos_bounds(input: &[&Interval]) -> crate::Result<Interval> {
49 let data_type = input[0].data_type();
51
52 Interval::try_new(
53 ScalarValue::new_zero(&data_type)?,
54 ScalarValue::new_pi_upper(&data_type)?,
55 )
56}
57
58pub(super) fn acosh_bounds(input: &[&Interval]) -> crate::Result<Interval> {
59 let data_type = input[0].data_type();
61
62 Interval::make_non_negative_infinity_interval(&data_type)
63}
64
65pub(super) fn cos_bounds(input: &[&Interval]) -> crate::Result<Interval> {
66 let data_type = input[0].data_type();
68
69 Interval::make_symmetric_unit_interval(&data_type)
70}
71
72pub(super) fn cosh_bounds(input: &[&Interval]) -> crate::Result<Interval> {
73 let data_type = input[0].data_type();
75
76 Interval::try_new(
77 ScalarValue::new_one(&data_type)?,
78 ScalarValue::try_from(&data_type)?,
79 )
80}
81
82pub(super) fn exp_bounds(input: &[&Interval]) -> crate::Result<Interval> {
83 let data_type = input[0].data_type();
85
86 Interval::make_non_negative_infinity_interval(&data_type)
87}
88
89pub(super) fn radians_bounds(input: &[&Interval]) -> crate::Result<Interval> {
90 let data_type = input[0].data_type();
92
93 Interval::make_symmetric_pi_interval(&data_type)
94}
95
96pub(super) fn sqrt_bounds(input: &[&Interval]) -> crate::Result<Interval> {
97 let data_type = input[0].data_type();
99
100 Interval::make_non_negative_infinity_interval(&data_type)
101}
102
103pub(super) fn tanh_bounds(input: &[&Interval]) -> crate::Result<Interval> {
104 let data_type = input[0].data_type();
106
107 Interval::make_symmetric_unit_interval(&data_type)
108}