This is an automated email from the ASF dual-hosted git repository.
liuneng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git
The following commit(s) were added to refs/heads/main by this push:
new 42a103b9e [CH] Support expm1 function (#5422)
42a103b9e is described below
commit 42a103b9e1d80249b9bedb71881eaeb4696632b1
Author: exmy <[email protected]>
AuthorDate: Thu Apr 18 20:42:53 2024 +0800
[CH] Support expm1 function (#5422)
What changes were proposed in this pull request?
How was this patch tested?
Pass CI
---
.../Parser/scalar_function_parser/expm1.cpp | 59 ++++++++++++++++++++++
.../gluten/expression/ExpressionMappings.scala | 1 +
.../utils/clickhouse/ClickHouseTestSettings.scala | 1 -
.../utils/clickhouse/ClickHouseTestSettings.scala | 1 -
.../apache/gluten/expression/ExpressionNames.scala | 1 +
5 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/cpp-ch/local-engine/Parser/scalar_function_parser/expm1.cpp
b/cpp-ch/local-engine/Parser/scalar_function_parser/expm1.cpp
new file mode 100644
index 000000000..7470da62b
--- /dev/null
+++ b/cpp-ch/local-engine/Parser/scalar_function_parser/expm1.cpp
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+
+#include <Parser/FunctionParser.h>
+
+namespace DB
+{
+namespace ErrorCodes
+{
+ extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH;
+}
+}
+
+namespace local_engine
+{
+class FunctionParserExpm1 : public FunctionParser
+{
+public:
+ explicit FunctionParserExpm1(SerializedPlanParser * plan_parser_) :
FunctionParser(plan_parser_) {}
+ ~FunctionParserExpm1() override = default;
+
+ static constexpr auto name = "expm1";
+
+ String getName() const override { return name; }
+
+ const ActionsDAG::Node * parse(
+ const substrait::Expression_ScalarFunction & substrait_func,
+ ActionsDAGPtr & actions_dag) const override
+ {
+ /// parse expm1(x) as exp(x) - 1
+ auto parsed_args = parseFunctionArguments(substrait_func, "",
actions_dag);
+ if (parsed_args.size() != 1)
+ throw Exception(ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH,
"Function {} requires exactly one arguments", getName());
+
+ const auto * x_node = parsed_args[0];
+ const auto * exp_node = toFunctionNode(actions_dag, "exp", {x_node});
+ const auto * one_const_node = addColumnToActionsDAG(actions_dag,
std::make_shared<DataTypeFloat64>(), 1.0);
+ const auto * result_node = toFunctionNode(actions_dag, "minus",
{exp_node, one_const_node});
+
+ return convertNodeTypeIfNeeded(substrait_func, result_node,
actions_dag);
+ }
+};
+
+static FunctionParserRegister<FunctionParserExpm1> register_expm1;
+}
diff --git
a/gluten-core/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
b/gluten-core/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
index e34ea8840..0f529947a 100644
---
a/gluten-core/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
+++
b/gluten-core/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
@@ -110,6 +110,7 @@ object ExpressionMappings {
Sig[Ceil](CEIL),
Sig[Floor](FLOOR),
Sig[Exp](EXP),
+ Sig[Expm1](EXPM1),
Sig[Pow](POWER),
Sig[Pmod](PMOD),
Sig[Round](ROUND),
diff --git
a/gluten-ut/spark32/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
b/gluten-ut/spark32/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
index a51157e62..7831424ed 100644
---
a/gluten-ut/spark32/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
+++
b/gluten-ut/spark32/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
@@ -844,7 +844,6 @@ class ClickHouseTestSettings extends BackendTestSettings {
enableSuite[GlutenMathExpressionsSuite]
.exclude("tanh")
.exclude("rint")
- .exclude("expm1")
.exclude("unhex")
.exclude("atan2")
.exclude("round/bround")
diff --git
a/gluten-ut/spark33/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
b/gluten-ut/spark33/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
index 144d103c0..002501097 100644
---
a/gluten-ut/spark33/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
+++
b/gluten-ut/spark33/src/test/scala/org/apache/gluten/utils/clickhouse/ClickHouseTestSettings.scala
@@ -849,7 +849,6 @@ class ClickHouseTestSettings extends BackendTestSettings {
enableSuite[GlutenMathExpressionsSuite]
.exclude("tanh")
.exclude("rint")
- .exclude("expm1")
.exclude("unhex")
.exclude("atan2")
.exclude("round/bround/floor/ceil")
diff --git
a/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
b/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
index f097d5362..851c81a8d 100644
---
a/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
+++
b/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
@@ -137,6 +137,7 @@ object ExpressionNames {
final val CEIL = "ceil"
final val FLOOR = "floor"
final val EXP = "exp"
+ final val EXPM1 = "expm1"
final val POWER = "power"
final val PMOD = "pmod"
final val ROUND = "round"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]