This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new bd9a272a9f Port tan, tanh to datafusion-functions (#9535)
bd9a272a9f is described below
commit bd9a272a9f4dd572a256809bb0615f454b19e913
Author: Chih Wang <[email protected]>
AuthorDate: Tue Mar 12 21:37:39 2024 +0800
Port tan, tanh to datafusion-functions (#9535)
* Port tan function
* Port tanh function
* Remove length checking of arg_types in return_type
---------
Co-authored-by: Andrew Lamb <[email protected]>
---
datafusion/expr/src/built_in_function.rs | 13 ----
datafusion/expr/src/expr_fn.rs | 4 -
datafusion/functions/src/math/mod.rs | 8 +-
datafusion/functions/src/math/tan.rs | 98 ++++++++++++++++++++++++
datafusion/functions/src/math/tanh.rs | 98 ++++++++++++++++++++++++
datafusion/physical-expr/src/functions.rs | 2 -
datafusion/physical-expr/src/math_expressions.rs | 2 -
datafusion/proto/proto/datafusion.proto | 4 +-
datafusion/proto/src/generated/pbjson.rs | 6 --
datafusion/proto/src/generated/prost.rs | 8 +-
datafusion/proto/src/logical_plan/from_proto.rs | 6 +-
datafusion/proto/src/logical_plan/to_proto.rs | 2 -
12 files changed, 208 insertions(+), 43 deletions(-)
diff --git a/datafusion/expr/src/built_in_function.rs
b/datafusion/expr/src/built_in_function.rs
index 41a71711e2..6435eaee16 100644
--- a/datafusion/expr/src/built_in_function.rs
+++ b/datafusion/expr/src/built_in_function.rs
@@ -100,10 +100,6 @@ pub enum BuiltinScalarFunction {
Sinh,
/// sqrt
Sqrt,
- /// tan
- Tan,
- /// tanh
- Tanh,
/// trunc
Trunc,
/// cot
@@ -320,8 +316,6 @@ impl BuiltinScalarFunction {
BuiltinScalarFunction::Sqrt => Volatility::Immutable,
BuiltinScalarFunction::Cbrt => Volatility::Immutable,
BuiltinScalarFunction::Cot => Volatility::Immutable,
- BuiltinScalarFunction::Tan => Volatility::Immutable,
- BuiltinScalarFunction::Tanh => Volatility::Immutable,
BuiltinScalarFunction::Trunc => Volatility::Immutable,
BuiltinScalarFunction::ArrayElement => Volatility::Immutable,
BuiltinScalarFunction::ArrayExcept => Volatility::Immutable,
@@ -629,8 +623,6 @@ impl BuiltinScalarFunction {
| BuiltinScalarFunction::Sinh
| BuiltinScalarFunction::Sqrt
| BuiltinScalarFunction::Cbrt
- | BuiltinScalarFunction::Tan
- | BuiltinScalarFunction::Tanh
| BuiltinScalarFunction::Trunc
| BuiltinScalarFunction::Cot => match input_expr_types[0] {
Float32 => Ok(Float32),
@@ -913,8 +905,6 @@ impl BuiltinScalarFunction {
| BuiltinScalarFunction::Sin
| BuiltinScalarFunction::Sinh
| BuiltinScalarFunction::Sqrt
- | BuiltinScalarFunction::Tan
- | BuiltinScalarFunction::Tanh
| BuiltinScalarFunction::Cot => {
// math expressions expect 1 argument of type f64 or f32
// priority is given to f64 because e.g. `sqrt(1i32)` is in IR
(real numbers) and thus we
@@ -964,7 +954,6 @@ impl BuiltinScalarFunction {
| BuiltinScalarFunction::Sinh
| BuiltinScalarFunction::Sqrt
| BuiltinScalarFunction::Cbrt
- | BuiltinScalarFunction::Tanh
| BuiltinScalarFunction::Trunc
| BuiltinScalarFunction::Pi
) {
@@ -1010,8 +999,6 @@ impl BuiltinScalarFunction {
BuiltinScalarFunction::Sin => &["sin"],
BuiltinScalarFunction::Sinh => &["sinh"],
BuiltinScalarFunction::Sqrt => &["sqrt"],
- BuiltinScalarFunction::Tan => &["tan"],
- BuiltinScalarFunction::Tanh => &["tanh"],
BuiltinScalarFunction::Trunc => &["trunc"],
// conditional functions
diff --git a/datafusion/expr/src/expr_fn.rs b/datafusion/expr/src/expr_fn.rs
index fc094ffaa0..12eafa6ccd 100644
--- a/datafusion/expr/src/expr_fn.rs
+++ b/datafusion/expr/src/expr_fn.rs
@@ -538,11 +538,9 @@ scalar_expr!(Sqrt, sqrt, num, "square root of a number");
scalar_expr!(Cbrt, cbrt, num, "cube root of a number");
scalar_expr!(Sin, sin, num, "sine");
scalar_expr!(Cos, cos, num, "cosine");
-scalar_expr!(Tan, tan, num, "tangent");
scalar_expr!(Cot, cot, num, "cotangent");
scalar_expr!(Sinh, sinh, num, "hyperbolic sine");
scalar_expr!(Cosh, cosh, num, "hyperbolic cosine");
-scalar_expr!(Tanh, tanh, num, "hyperbolic tangent");
scalar_expr!(Atan, atan, num, "inverse tangent");
scalar_expr!(Asinh, asinh, num, "inverse hyperbolic sine");
scalar_expr!(Acosh, acosh, num, "inverse hyperbolic cosine");
@@ -1202,11 +1200,9 @@ mod test {
test_unary_scalar_expr!(Cbrt, cbrt);
test_unary_scalar_expr!(Sin, sin);
test_unary_scalar_expr!(Cos, cos);
- test_unary_scalar_expr!(Tan, tan);
test_unary_scalar_expr!(Cot, cot);
test_unary_scalar_expr!(Sinh, sinh);
test_unary_scalar_expr!(Cosh, cosh);
- test_unary_scalar_expr!(Tanh, tanh);
test_unary_scalar_expr!(Atan, atan);
test_unary_scalar_expr!(Asinh, asinh);
test_unary_scalar_expr!(Acosh, acosh);
diff --git a/datafusion/functions/src/math/mod.rs
b/datafusion/functions/src/math/mod.rs
index 3741cc2802..e7ede6043a 100644
--- a/datafusion/functions/src/math/mod.rs
+++ b/datafusion/functions/src/math/mod.rs
@@ -21,12 +21,16 @@ mod abs;
mod acos;
mod asin;
mod nans;
+mod tan;
+mod tanh;
// create UDFs
make_udf_function!(nans::IsNanFunc, ISNAN, isnan);
make_udf_function!(abs::AbsFunc, ABS, abs);
make_udf_function!(acos::AcosFunc, ACOS, acos);
make_udf_function!(asin::AsinFunc, ASIN, asin);
+make_udf_function!(tan::TanFunc, TAN, tan);
+make_udf_function!(tanh::TanhFunc, TANH, tanh);
// Export the functions out of this package, both as expr_fn as well as a list
of functions
export_functions!(
@@ -45,5 +49,7 @@ export_functions!(
asin,
num,
"returns the arc sine or inverse sine of a number"
- )
+ ),
+ (tan, num, "returns the tangent of a number"),
+ (tanh, num, "returns the hyperbolic tangent of a number")
);
diff --git a/datafusion/functions/src/math/tan.rs
b/datafusion/functions/src/math/tan.rs
new file mode 100644
index 0000000000..ea3e002f84
--- /dev/null
+++ b/datafusion/functions/src/math/tan.rs
@@ -0,0 +1,98 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+//! Math function: `tan()`.
+
+use std::any::Any;
+use std::sync::Arc;
+
+use arrow::datatypes::DataType;
+use arrow_array::{ArrayRef, Float32Array, Float64Array};
+use datafusion_common::{exec_err, DataFusionError, Result};
+use datafusion_expr::Volatility;
+use datafusion_expr::{ColumnarValue, ScalarUDFImpl, Signature};
+
+#[derive(Debug)]
+pub struct TanFunc {
+ signature: Signature,
+}
+
+impl TanFunc {
+ pub fn new() -> Self {
+ Self {
+ signature: Signature::uniform(
+ 1,
+ vec![DataType::Float64, DataType::Float32],
+ Volatility::Immutable,
+ ),
+ }
+ }
+}
+
+impl ScalarUDFImpl for TanFunc {
+ fn as_any(&self) -> &dyn Any {
+ self
+ }
+
+ fn name(&self) -> &str {
+ "tan"
+ }
+
+ fn signature(&self) -> &Signature {
+ &self.signature
+ }
+
+ fn return_type(&self, arg_types: &[DataType]) -> Result<DataType> {
+ let arg_type = &arg_types[0];
+
+ match arg_type {
+ DataType::Float64 => Ok(DataType::Float64),
+ DataType::Float32 => Ok(DataType::Float32),
+
+ // For other types (possible values null/int), use Float 64
+ _ => Ok(DataType::Float64),
+ }
+ }
+
+ fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
+ let args = ColumnarValue::values_to_arrays(args)?;
+
+ let arr: ArrayRef = match args[0].data_type() {
+ DataType::Float64 =>
Arc::new(make_function_scalar_inputs_return_type!(
+ &args[0],
+ self.name(),
+ Float64Array,
+ Float64Array,
+ { f64::tan }
+ )),
+ DataType::Float32 =>
Arc::new(make_function_scalar_inputs_return_type!(
+ &args[0],
+ self.name(),
+ Float32Array,
+ Float32Array,
+ { f32::tan }
+ )),
+ other => {
+ return exec_err!(
+ "Unsupported data type {other:?} for function {}",
+ self.name()
+ )
+ }
+ };
+ Ok(ColumnarValue::Array(arr))
+ }
+}
diff --git a/datafusion/functions/src/math/tanh.rs
b/datafusion/functions/src/math/tanh.rs
new file mode 100644
index 0000000000..af34681919
--- /dev/null
+++ b/datafusion/functions/src/math/tanh.rs
@@ -0,0 +1,98 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+//! Math function: `tanh()`.
+
+use std::any::Any;
+use std::sync::Arc;
+
+use arrow::datatypes::DataType;
+use arrow_array::{ArrayRef, Float32Array, Float64Array};
+use datafusion_common::{exec_err, DataFusionError, Result};
+use datafusion_expr::Volatility;
+use datafusion_expr::{ColumnarValue, ScalarUDFImpl, Signature};
+
+#[derive(Debug)]
+pub struct TanhFunc {
+ signature: Signature,
+}
+
+impl TanhFunc {
+ pub fn new() -> Self {
+ Self {
+ signature: Signature::uniform(
+ 1,
+ vec![DataType::Float64, DataType::Float32],
+ Volatility::Immutable,
+ ),
+ }
+ }
+}
+
+impl ScalarUDFImpl for TanhFunc {
+ fn as_any(&self) -> &dyn Any {
+ self
+ }
+
+ fn name(&self) -> &str {
+ "tanh"
+ }
+
+ fn signature(&self) -> &Signature {
+ &self.signature
+ }
+
+ fn return_type(&self, arg_types: &[DataType]) -> Result<DataType> {
+ let arg_type = &arg_types[0];
+
+ match arg_type {
+ DataType::Float64 => Ok(DataType::Float64),
+ DataType::Float32 => Ok(DataType::Float32),
+
+ // For other types (possible values null/int), use Float 64
+ _ => Ok(DataType::Float64),
+ }
+ }
+
+ fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
+ let args = ColumnarValue::values_to_arrays(args)?;
+
+ let arr: ArrayRef = match args[0].data_type() {
+ DataType::Float64 =>
Arc::new(make_function_scalar_inputs_return_type!(
+ &args[0],
+ self.name(),
+ Float64Array,
+ Float64Array,
+ { f64::tanh }
+ )),
+ DataType::Float32 =>
Arc::new(make_function_scalar_inputs_return_type!(
+ &args[0],
+ self.name(),
+ Float32Array,
+ Float32Array,
+ { f32::tanh }
+ )),
+ other => {
+ return exec_err!(
+ "Unsupported data type {other:?} for function {}",
+ self.name()
+ )
+ }
+ };
+ Ok(ColumnarValue::Array(arr))
+ }
+}
diff --git a/datafusion/physical-expr/src/functions.rs
b/datafusion/physical-expr/src/functions.rs
index 2bce52bf78..5d13f94569 100644
--- a/datafusion/physical-expr/src/functions.rs
+++ b/datafusion/physical-expr/src/functions.rs
@@ -282,8 +282,6 @@ pub fn create_physical_fun(
BuiltinScalarFunction::Sinh => Arc::new(math_expressions::sinh),
BuiltinScalarFunction::Sqrt => Arc::new(math_expressions::sqrt),
BuiltinScalarFunction::Cbrt => Arc::new(math_expressions::cbrt),
- BuiltinScalarFunction::Tan => Arc::new(math_expressions::tan),
- BuiltinScalarFunction::Tanh => Arc::new(math_expressions::tanh),
BuiltinScalarFunction::Trunc => {
Arc::new(|args|
make_scalar_function_inner(math_expressions::trunc)(args))
}
diff --git a/datafusion/physical-expr/src/math_expressions.rs
b/datafusion/physical-expr/src/math_expressions.rs
index a8c115ba3a..db8855cb54 100644
--- a/datafusion/physical-expr/src/math_expressions.rs
+++ b/datafusion/physical-expr/src/math_expressions.rs
@@ -159,10 +159,8 @@ math_unary_function!("sqrt", sqrt);
math_unary_function!("cbrt", cbrt);
math_unary_function!("sin", sin);
math_unary_function!("cos", cos);
-math_unary_function!("tan", tan);
math_unary_function!("sinh", sinh);
math_unary_function!("cosh", cosh);
-math_unary_function!("tanh", tanh);
math_unary_function!("asin", asin);
math_unary_function!("acos", acos);
math_unary_function!("atan", atan);
diff --git a/datafusion/proto/proto/datafusion.proto
b/datafusion/proto/proto/datafusion.proto
index 6899fcf7c7..bd4d8b45b1 100644
--- a/datafusion/proto/proto/datafusion.proto
+++ b/datafusion/proto/proto/datafusion.proto
@@ -559,7 +559,7 @@ enum ScalarFunction {
Signum = 15;
Sin = 16;
Sqrt = 17;
- Tan = 18;
+ // Tan = 18;
Trunc = 19;
// 20 was Array
// RegexpMatch = 21;
@@ -620,7 +620,7 @@ enum ScalarFunction {
Atanh = 76;
Sinh = 77;
Cosh = 78;
- Tanh = 79;
+ // Tanh = 79;
Pi = 80;
Degrees = 81;
Radians = 82;
diff --git a/datafusion/proto/src/generated/pbjson.rs
b/datafusion/proto/src/generated/pbjson.rs
index b915dbffbb..aaa0764b1e 100644
--- a/datafusion/proto/src/generated/pbjson.rs
+++ b/datafusion/proto/src/generated/pbjson.rs
@@ -23127,7 +23127,6 @@ impl serde::Serialize for ScalarFunction {
Self::Signum => "Signum",
Self::Sin => "Sin",
Self::Sqrt => "Sqrt",
- Self::Tan => "Tan",
Self::Trunc => "Trunc",
Self::BitLength => "BitLength",
Self::Btrim => "Btrim",
@@ -23175,7 +23174,6 @@ impl serde::Serialize for ScalarFunction {
Self::Atanh => "Atanh",
Self::Sinh => "Sinh",
Self::Cosh => "Cosh",
- Self::Tanh => "Tanh",
Self::Pi => "Pi",
Self::Degrees => "Degrees",
Self::Radians => "Radians",
@@ -23237,7 +23235,6 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
"Signum",
"Sin",
"Sqrt",
- "Tan",
"Trunc",
"BitLength",
"Btrim",
@@ -23285,7 +23282,6 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
"Atanh",
"Sinh",
"Cosh",
- "Tanh",
"Pi",
"Degrees",
"Radians",
@@ -23376,7 +23372,6 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
"Signum" => Ok(ScalarFunction::Signum),
"Sin" => Ok(ScalarFunction::Sin),
"Sqrt" => Ok(ScalarFunction::Sqrt),
- "Tan" => Ok(ScalarFunction::Tan),
"Trunc" => Ok(ScalarFunction::Trunc),
"BitLength" => Ok(ScalarFunction::BitLength),
"Btrim" => Ok(ScalarFunction::Btrim),
@@ -23424,7 +23419,6 @@ impl<'de> serde::Deserialize<'de> for ScalarFunction {
"Atanh" => Ok(ScalarFunction::Atanh),
"Sinh" => Ok(ScalarFunction::Sinh),
"Cosh" => Ok(ScalarFunction::Cosh),
- "Tanh" => Ok(ScalarFunction::Tanh),
"Pi" => Ok(ScalarFunction::Pi),
"Degrees" => Ok(ScalarFunction::Degrees),
"Radians" => Ok(ScalarFunction::Radians),
diff --git a/datafusion/proto/src/generated/prost.rs
b/datafusion/proto/src/generated/prost.rs
index 6149e02fb7..07a0f30a2f 100644
--- a/datafusion/proto/src/generated/prost.rs
+++ b/datafusion/proto/src/generated/prost.rs
@@ -2861,7 +2861,7 @@ pub enum ScalarFunction {
Signum = 15,
Sin = 16,
Sqrt = 17,
- Tan = 18,
+ /// Tan = 18;
Trunc = 19,
/// 20 was Array
/// RegexpMatch = 21;
@@ -2922,7 +2922,7 @@ pub enum ScalarFunction {
Atanh = 76,
Sinh = 77,
Cosh = 78,
- Tanh = 79,
+ /// Tanh = 79;
Pi = 80,
Degrees = 81,
Radians = 82,
@@ -3005,7 +3005,6 @@ impl ScalarFunction {
ScalarFunction::Signum => "Signum",
ScalarFunction::Sin => "Sin",
ScalarFunction::Sqrt => "Sqrt",
- ScalarFunction::Tan => "Tan",
ScalarFunction::Trunc => "Trunc",
ScalarFunction::BitLength => "BitLength",
ScalarFunction::Btrim => "Btrim",
@@ -3053,7 +3052,6 @@ impl ScalarFunction {
ScalarFunction::Atanh => "Atanh",
ScalarFunction::Sinh => "Sinh",
ScalarFunction::Cosh => "Cosh",
- ScalarFunction::Tanh => "Tanh",
ScalarFunction::Pi => "Pi",
ScalarFunction::Degrees => "Degrees",
ScalarFunction::Radians => "Radians",
@@ -3109,7 +3107,6 @@ impl ScalarFunction {
"Signum" => Some(Self::Signum),
"Sin" => Some(Self::Sin),
"Sqrt" => Some(Self::Sqrt),
- "Tan" => Some(Self::Tan),
"Trunc" => Some(Self::Trunc),
"BitLength" => Some(Self::BitLength),
"Btrim" => Some(Self::Btrim),
@@ -3157,7 +3154,6 @@ impl ScalarFunction {
"Atanh" => Some(Self::Atanh),
"Sinh" => Some(Self::Sinh),
"Cosh" => Some(Self::Cosh),
- "Tanh" => Some(Self::Tanh),
"Pi" => Some(Self::Pi),
"Degrees" => Some(Self::Degrees),
"Radians" => Some(Self::Radians),
diff --git a/datafusion/proto/src/logical_plan/from_proto.rs
b/datafusion/proto/src/logical_plan/from_proto.rs
index 131ac78847..e8c84ec128 100644
--- a/datafusion/proto/src/logical_plan/from_proto.rs
+++ b/datafusion/proto/src/logical_plan/from_proto.rs
@@ -60,7 +60,7 @@ use datafusion_expr::{
lower, lpad, ltrim, md5, nanvl, now, octet_length, overlay, pi, power,
radians,
random, repeat, replace, reverse, right, round, rpad, rtrim, sha224,
sha256, sha384,
sha512, signum, sin, sinh, split_part, sqrt, starts_with, strpos, substr,
- substr_index, substring, tan, tanh, to_hex, translate, trim, trunc, upper,
uuid,
+ substr_index, substring, to_hex, translate, trim, trunc, upper, uuid,
AggregateFunction, Between, BinaryExpr, BuiltInWindowFunction,
BuiltinScalarFunction,
Case, Cast, Expr, GetFieldAccess, GetIndexedField, GroupingSet,
GroupingSet::GroupingSets,
@@ -445,12 +445,10 @@ impl From<&protobuf::ScalarFunction> for
BuiltinScalarFunction {
ScalarFunction::Cbrt => Self::Cbrt,
ScalarFunction::Sin => Self::Sin,
ScalarFunction::Cos => Self::Cos,
- ScalarFunction::Tan => Self::Tan,
ScalarFunction::Cot => Self::Cot,
ScalarFunction::Atan => Self::Atan,
ScalarFunction::Sinh => Self::Sinh,
ScalarFunction::Cosh => Self::Cosh,
- ScalarFunction::Tanh => Self::Tanh,
ScalarFunction::Asinh => Self::Asinh,
ScalarFunction::Acosh => Self::Acosh,
ScalarFunction::Atanh => Self::Atanh,
@@ -1479,11 +1477,9 @@ pub fn parse_expr(
ScalarFunction::Cbrt => Ok(cbrt(parse_expr(&args[0], registry,
codec)?)),
ScalarFunction::Sin => Ok(sin(parse_expr(&args[0], registry,
codec)?)),
ScalarFunction::Cos => Ok(cos(parse_expr(&args[0], registry,
codec)?)),
- ScalarFunction::Tan => Ok(tan(parse_expr(&args[0], registry,
codec)?)),
ScalarFunction::Atan => Ok(atan(parse_expr(&args[0], registry,
codec)?)),
ScalarFunction::Sinh => Ok(sinh(parse_expr(&args[0], registry,
codec)?)),
ScalarFunction::Cosh => Ok(cosh(parse_expr(&args[0], registry,
codec)?)),
- ScalarFunction::Tanh => Ok(tanh(parse_expr(&args[0], registry,
codec)?)),
ScalarFunction::Atanh => {
Ok(atanh(parse_expr(&args[0], registry, codec)?))
}
diff --git a/datafusion/proto/src/logical_plan/to_proto.rs
b/datafusion/proto/src/logical_plan/to_proto.rs
index 6d0d81f61b..c25e2e1ecd 100644
--- a/datafusion/proto/src/logical_plan/to_proto.rs
+++ b/datafusion/proto/src/logical_plan/to_proto.rs
@@ -1426,11 +1426,9 @@ impl TryFrom<&BuiltinScalarFunction> for
protobuf::ScalarFunction {
BuiltinScalarFunction::Cbrt => Self::Cbrt,
BuiltinScalarFunction::Sin => Self::Sin,
BuiltinScalarFunction::Cos => Self::Cos,
- BuiltinScalarFunction::Tan => Self::Tan,
BuiltinScalarFunction::Cot => Self::Cot,
BuiltinScalarFunction::Sinh => Self::Sinh,
BuiltinScalarFunction::Cosh => Self::Cosh,
- BuiltinScalarFunction::Tanh => Self::Tanh,
BuiltinScalarFunction::Atan => Self::Atan,
BuiltinScalarFunction::Asinh => Self::Asinh,
BuiltinScalarFunction::Acosh => Self::Acosh,