From f793db370951fcf03f648e246af6fab29e961786 Mon Sep 17 00:00:00 2001 From: xonx4l Date: Fri, 26 Dec 2025 07:33:55 +0530 Subject: [PATCH 1/2] add support for f16 --- datafusion/common/src/scalar/consts.rs | 12 ++++++++++++ datafusion/common/src/scalar/mod.rs | 18 ++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/datafusion/common/src/scalar/consts.rs b/datafusion/common/src/scalar/consts.rs index 8cb446b1c9211..eb988b8339239 100644 --- a/datafusion/common/src/scalar/consts.rs +++ b/datafusion/common/src/scalar/consts.rs @@ -17,24 +17,36 @@ // Constants defined for scalar construction. +// Next F16 value avove π (upper bound) +pub(super) const PI_UPPER_F16: half::f16 = half::f16::from_bits(0x4249); + // Next f32 value above π (upper bound) pub(super) const PI_UPPER_F32: f32 = std::f32::consts::PI.next_up(); // Next f64 value above π (upper bound) pub(super) const PI_UPPER_F64: f64 = std::f64::consts::PI.next_up(); +// Next f16 value below -π (lower bound) +pub(super) const NEGATIVE_PI_LOWER_F16: half::f16 = half::f16::from_bits(0xC249); + // Next f32 value below -π (lower bound) pub(super) const NEGATIVE_PI_LOWER_F32: f32 = (-std::f32::consts::PI).next_down(); // Next f64 value below -π (lower bound) pub(super) const NEGATIVE_PI_LOWER_F64: f64 = (-std::f64::consts::PI).next_down(); +// Next f16 value above π/2 (upper bound) +pub(super) const FRAC_PI_2_UPPER_F16: half::f16 = half::f16::from_bits(0x3E49); + // Next f32 value above π/2 (upper bound) pub(super) const FRAC_PI_2_UPPER_F32: f32 = std::f32::consts::FRAC_PI_2.next_up(); // Next f64 value above π/2 (upper bound) pub(super) const FRAC_PI_2_UPPER_F64: f64 = std::f64::consts::FRAC_PI_2.next_up(); +// Next f32 value below -π/2 (lower bound) +pub(super) const NEGATIVE_FRAC_PI_2_LOWER_F16: half::f16 = half::f16::from_bits(0xBE49); + // Next f32 value below -π/2 (lower bound) pub(super) const NEGATIVE_FRAC_PI_2_LOWER_F32: f32 = (-std::f32::consts::FRAC_PI_2).next_down(); diff --git a/datafusion/common/src/scalar/mod.rs b/datafusion/common/src/scalar/mod.rs index 8b68b29d3c32c..e4e048ad3c0d8 100644 --- a/datafusion/common/src/scalar/mod.rs +++ b/datafusion/common/src/scalar/mod.rs @@ -1342,8 +1342,7 @@ impl ScalarValue { /// Returns a [`ScalarValue`] representing PI's upper bound pub fn new_pi_upper(datatype: &DataType) -> Result { match datatype { - // TODO: half::f16 doesn't seem to have equivalent - // https://github.com/apache/datafusion/issues/19465 + DataType::Float16 => Ok(ScalarValue::Float16(Some(consts::PI_UPPER_F16))), DataType::Float32 => Ok(ScalarValue::from(consts::PI_UPPER_F32)), DataType::Float64 => Ok(ScalarValue::from(consts::PI_UPPER_F64)), _ => { @@ -1355,8 +1354,9 @@ impl ScalarValue { /// Returns a [`ScalarValue`] representing -PI's lower bound pub fn new_negative_pi_lower(datatype: &DataType) -> Result { match datatype { - // TODO: half::f16 doesn't seem to have equivalent - // https://github.com/apache/datafusion/issues/19465 + DataType::Float16 => { + Ok(ScalarValue::Float16(Some(consts::NEGATIVE_PI_LOWER_F16))) + } DataType::Float32 => Ok(ScalarValue::from(consts::NEGATIVE_PI_LOWER_F32)), DataType::Float64 => Ok(ScalarValue::from(consts::NEGATIVE_PI_LOWER_F64)), _ => { @@ -1368,8 +1368,9 @@ impl ScalarValue { /// Returns a [`ScalarValue`] representing FRAC_PI_2's upper bound pub fn new_frac_pi_2_upper(datatype: &DataType) -> Result { match datatype { - // TODO: half::f16 doesn't seem to have equivalent - // https://github.com/apache/datafusion/issues/19465 + DataType::Float16 => { + Ok(ScalarValue::Float16(Some(consts::FRAC_PI_2_UPPER_F16))) + } DataType::Float32 => Ok(ScalarValue::from(consts::FRAC_PI_2_UPPER_F32)), DataType::Float64 => Ok(ScalarValue::from(consts::FRAC_PI_2_UPPER_F64)), _ => { @@ -1381,8 +1382,9 @@ impl ScalarValue { // Returns a [`ScalarValue`] representing FRAC_PI_2's lower bound pub fn new_neg_frac_pi_2_lower(datatype: &DataType) -> Result { match datatype { - // TODO: half::f16 doesn't seem to have equivalent - // https://github.com/apache/datafusion/issues/19465 + DataType::Float16 => Ok(ScalarValue::Float16(Some( + consts::NEGATIVE_FRAC_PI_2_LOWER_F16, + ))), DataType::Float32 => { Ok(ScalarValue::from(consts::NEGATIVE_FRAC_PI_2_LOWER_F32)) } From 088b72a69ebc1b4e6799afe10a05dbecca0fe05d Mon Sep 17 00:00:00 2001 From: xonx4l Date: Fri, 26 Dec 2025 07:51:47 +0530 Subject: [PATCH 2/2] typo fix --- datafusion/common/src/scalar/consts.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/common/src/scalar/consts.rs b/datafusion/common/src/scalar/consts.rs index eb988b8339239..599c2523cd2c7 100644 --- a/datafusion/common/src/scalar/consts.rs +++ b/datafusion/common/src/scalar/consts.rs @@ -17,7 +17,7 @@ // Constants defined for scalar construction. -// Next F16 value avove π (upper bound) +// Next F16 value above π (upper bound) pub(super) const PI_UPPER_F16: half::f16 = half::f16::from_bits(0x4249); // Next f32 value above π (upper bound)