chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 12:40:42 +08:00
commit e25996e7db
15472 changed files with 3536181 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
if(WIN32)
cc_test(
test_op_signature
SRCS test_op_signature.cc
DEPS type_info common)
else()
cc_test(
test_op_signature
SRCS test_op_signature.cc
DEPS phi common)
endif()
+636
View File
@@ -0,0 +1,636 @@
/* Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
Licensed 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 "test/cpp/phi/ops/test_op_signature.h"
#include <gtest/gtest.h>
#include <memory>
#include <unordered_set>
#include "paddle/fluid/operators/ops_signature/signatures.h"
#include "paddle/phi/core/compat/op_utils.h"
namespace phi {
namespace tests {
// The unittests in this file are just order to pass the CI-Coverage
// so it isn't necessary to check the all cases.
TEST(ARG_MAP, fill_constant) {
TestArgumentMappingContext arg_case1(
{"ShapeTensor", "ValueTensor"}, {}, {}, {}, {"Out"});
auto signature1 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case1);
EXPECT_STREQ(signature1.name, "full_sr");
TestArgumentMappingContext arg_case2(
{"ShapeTensor"},
{},
{{"str_value", paddle::any{std::string{"10"}}}},
{},
{"Out"});
auto signature2 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case2);
EXPECT_STREQ(signature2.name, "full_sr");
TestArgumentMappingContext arg_case3(
{"ShapeTensor"},
{},
{{"value", paddle::any{0}}, {"str_value", paddle::any{std::string{""}}}},
{},
{"Out"});
auto signature3 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case3);
EXPECT_STREQ(signature3.name, "full_sr");
TestArgumentMappingContext arg_case4(
{"ShapeTensorList", "ValueTensor"}, {}, {}, {}, {"Out"});
auto signature4 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case4);
EXPECT_STREQ(signature4.name, "full_sr");
TestArgumentMappingContext arg_case5(
{"ShapeTensorList"},
{},
{{"str_value", paddle::any{std::string{"10"}}}},
{},
{"Out"});
auto signature5 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case5);
EXPECT_STREQ(signature5.name, "full_sr");
TestArgumentMappingContext arg_case6(
{"ShapeTensorList"},
{},
{{"value", paddle::any{0}}, {"str_value", paddle::any{std::string{""}}}},
{},
{"Out"});
auto signature6 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case6);
EXPECT_STREQ(signature6.name, "full_sr");
TestArgumentMappingContext arg_case7(
{"ValueTensor"},
{},
{{"shape", paddle::any{std::vector<int64_t>{2, 3}}}},
{},
{"Out"});
auto signature7 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case7);
EXPECT_STREQ(signature7.name, "full_sr");
TestArgumentMappingContext arg_case8(
{},
{},
{{"shape", paddle::any{std::vector<int64_t>{2, 3}}},
{"value", paddle::any{0}},
{"str_value", paddle::any{std::string{""}}}},
{},
{"Out"});
auto signature8 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case8);
EXPECT_STREQ(signature8.name, "full_sr");
TestArgumentMappingContext arg_case9(
{},
{},
{{"shape", paddle::any{std::vector<int64_t>{2, 3}}},
{"str_value", paddle::any{std::string{"10"}}}},
{},
{"Out"});
auto signature9 = (*OpUtilsMap::Instance().GetArgumentMappingFn(
"fill_constant"))(arg_case9);
EXPECT_STREQ(signature9.name, "full_sr");
}
TEST(ARG_MAP, set_value) {
TestArgumentMappingContext arg_case(
{"Input", "StartsTensorList", "EndsTensorList", "StepsTensorList"},
{},
{{"fp32_values", paddle::any{std::vector<float>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case)
.name,
"set_value");
TestArgumentMappingContext arg_case1(
{"Input", "StartsTensorList", "EndsTensorList", "StepsTensorList"},
{},
{{"fp64_values", paddle::any{std::vector<double>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case1)
.name,
"set_value");
TestArgumentMappingContext arg_case2(
{"Input", "StartsTensorList", "EndsTensorList", "StepsTensorList"},
{},
{{"int32_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case2)
.name,
"set_value");
TestArgumentMappingContext arg_case3(
{"Input", "StartsTensorList", "EndsTensorList", "StepsTensorList"},
{},
{{"int64_values", paddle::any{std::vector<int64_t>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case3)
.name,
"set_value");
TestArgumentMappingContext arg_case4(
{"Input", "StartsTensorList", "EndsTensorList", "StepsTensorList"},
{},
{{"bool_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case4)
.name,
"set_value");
TestArgumentMappingContext arg_case5(
{"Input", "StartsTensorList", "EndsTensorList", "ValueTensor"},
{},
{},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case5)
.name,
"set_value_with_tensor");
TestArgumentMappingContext arg_case6(
{"Input", "StartsTensorList", "EndsTensorList"},
{},
{{"fp64_values", paddle::any{std::vector<double>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case6)
.name,
"set_value");
TestArgumentMappingContext arg_case7(
{"Input", "StartsTensorList", "EndsTensorList"},
{},
{{"int32_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case7)
.name,
"set_value");
TestArgumentMappingContext arg_case8(
{"Input", "StartsTensorList", "EndsTensorList"},
{},
{{"int64_values", paddle::any{std::vector<int64_t>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case8)
.name,
"set_value");
TestArgumentMappingContext arg_case9(
{"Input", "StartsTensorList", "EndsTensorList"},
{},
{{"bool_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case9)
.name,
"set_value");
TestArgumentMappingContext arg_case10(
{"Input", "StartsTensorList", "StepsTensorList", "ValueTensor"},
{},
{},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case10)
.name,
"set_value_with_tensor");
TestArgumentMappingContext arg_case11(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"fp64_values", paddle::any{std::vector<double>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case11)
.name,
"set_value");
TestArgumentMappingContext arg_case12(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"int32_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case12)
.name,
"set_value");
TestArgumentMappingContext arg_case13(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"int64_values", paddle::any{std::vector<int64_t>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case13)
.name,
"set_value");
TestArgumentMappingContext arg_case14(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"bool_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case14)
.name,
"set_value");
TestArgumentMappingContext arg_case15(
{"Input", "StartsTensorList", "ValueTensor"}, {}, {}, {"Out"}, {});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case15)
.name,
"set_value_with_tensor");
TestArgumentMappingContext arg_case16(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"fp32_values", paddle::any{std::vector<float>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case16)
.name,
"set_value");
TestArgumentMappingContext arg_case17(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"fp64_values", paddle::any{std::vector<double>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case17)
.name,
"set_value");
TestArgumentMappingContext arg_case18(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"int32_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case18)
.name,
"set_value");
TestArgumentMappingContext arg_case19(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"int64_values", paddle::any{std::vector<int64_t>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case19)
.name,
"set_value");
TestArgumentMappingContext arg_case20(
{"Input", "StartsTensorList", "StepsTensorList"},
{},
{{"bool_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case20)
.name,
"set_value");
TestArgumentMappingContext arg_case21(
{"Input", "EndsTensorList", "StepsTensorList", "ValueTensor"},
{},
{},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case21)
.name,
"set_value_with_tensor");
TestArgumentMappingContext arg_case22(
{"Input", "EndsTensorList", "StepsTensorList"},
{},
{{"fp64_values", paddle::any{std::vector<double>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case22)
.name,
"set_value");
TestArgumentMappingContext arg_case23(
{"Input", "EndsTensorList", "StepsTensorList"},
{},
{{"int32_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case23)
.name,
"set_value");
TestArgumentMappingContext arg_case24(
{"Input", "EndsTensorList", "StepsTensorList"},
{},
{{"int64_values", paddle::any{std::vector<int64_t>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case24)
.name,
"set_value");
TestArgumentMappingContext arg_case25(
{"Input", "EndsTensorList", "StepsTensorList"},
{},
{{"bool_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case25)
.name,
"set_value");
TestArgumentMappingContext arg_case26(
{"Input", "EndsTensorList", "ValueTensor"}, {}, {}, {"Out"}, {});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case26)
.name,
"set_value_with_tensor");
TestArgumentMappingContext arg_case27(
{"Input", "EndsTensorList"},
{},
{{"fp32_values", paddle::any{std::vector<float>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case27)
.name,
"set_value");
TestArgumentMappingContext arg_case28(
{"Input", "EndsTensorList"},
{},
{{"fp64_values", paddle::any{std::vector<double>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case28)
.name,
"set_value");
TestArgumentMappingContext arg_case29(
{"Input", "EndsTensorList"},
{},
{{"int32_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case29)
.name,
"set_value");
TestArgumentMappingContext arg_case30(
{"Input", "EndsTensorList"},
{},
{{"int64_values", paddle::any{std::vector<int64_t>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case30)
.name,
"set_value");
TestArgumentMappingContext arg_case31(
{"Input", "EndsTensorList"},
{},
{{"bool_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case31)
.name,
"set_value");
TestArgumentMappingContext arg_case32(
{"Input", "StepsTensorList", "ValueTensor"}, {}, {}, {"Out"}, {});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case32)
.name,
"set_value_with_tensor");
TestArgumentMappingContext arg_case33(
{"Input", "StepsTensorList"},
{},
{{"fp32_values", paddle::any{std::vector<float>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case33)
.name,
"set_value");
TestArgumentMappingContext arg_case34(
{"Input", "StepsTensorList"},
{},
{{"fp64_values", paddle::any{std::vector<double>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case34)
.name,
"set_value");
TestArgumentMappingContext arg_case35(
{"Input", "StepsTensorList"},
{},
{{"int32_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case35)
.name,
"set_value");
TestArgumentMappingContext arg_case36(
{"Input", "StepsTensorList"},
{},
{{"int64_values", paddle::any{std::vector<int64_t>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case36)
.name,
"set_value");
TestArgumentMappingContext arg_case37(
{"Input", "StepsTensorList"},
{},
{{"bool_values", paddle::any{std::vector<int>{1}}}},
{"Out"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value"))(arg_case37)
.name,
"set_value");
}
TEST(ARG_MAP, set_value_grad) {
TestArgumentMappingContext arg_case(
{"Out@GRAD", "StartsTensorList", "EndsTensorList"},
{},
{},
{"Input@GRAD", "ValueTensor@GRAD"},
{});
EXPECT_STREQ(
(*OpUtilsMap::Instance().GetArgumentMappingFn("set_value_grad"))(arg_case)
.name,
"set_value_grad");
TestArgumentMappingContext arg_case1(
{"Out@GRAD", "StartsTensorList", "StepsTensorList"},
{},
{},
{"Input@GRAD", "ValueTensor@GRAD"},
{});
EXPECT_STREQ((*OpUtilsMap::Instance().GetArgumentMappingFn("set_value_grad"))(
arg_case1)
.name,
"set_value_grad");
TestArgumentMappingContext arg_case2({"Out@GRAD", "StartsTensorList"},
{},
{},
{"Input@GRAD", "ValueTensor@GRAD"},
{});
EXPECT_STREQ((*OpUtilsMap::Instance().GetArgumentMappingFn("set_value_grad"))(
arg_case2)
.name,
"set_value_grad");
TestArgumentMappingContext arg_case3(
{"Out@GRAD", "EndsTensorList", "StepsTensorList"},
{},
{},
{"Input@GRAD", "ValueTensor@GRAD"},
{});
EXPECT_STREQ((*OpUtilsMap::Instance().GetArgumentMappingFn("set_value_grad"))(
arg_case3)
.name,
"set_value_grad");
TestArgumentMappingContext arg_case4({"Out@GRAD", "EndsTensorList"},
{},
{},
{"Input@GRAD", "ValueTensor@GRAD"},
{});
EXPECT_STREQ((*OpUtilsMap::Instance().GetArgumentMappingFn("set_value_grad"))(
arg_case4)
.name,
"set_value_grad");
TestArgumentMappingContext arg_case5({"Out@GRAD", "StepsTensorList"},
{},
{},
{"Input@GRAD", "ValueTensor@GRAD"},
{});
EXPECT_STREQ((*OpUtilsMap::Instance().GetArgumentMappingFn("set_value_grad"))(
arg_case5)
.name,
"set_value_grad");
}
TEST(ARG_MAP, allclose) {
TestArgumentMappingContext arg_case1(
{"Input", "Other", "Rtol"},
{},
{{"atol", paddle::any(std::string{"1e-8"})},
{"equal_nan", paddle::any(false)}},
{"Out"},
{});
auto signature1 =
(*OpUtilsMap::Instance().GetArgumentMappingFn("allclose"))(arg_case1);
EXPECT_STREQ(signature1.name, "allclose");
EXPECT_STREQ(signature1.attr_names[0], "Rtol");
TestArgumentMappingContext arg_case2(
{"Input", "Other", "Atol"},
{},
{{"rtol", paddle::any(std::string{"1e-5"})},
{"equal_nan", paddle::any(false)}},
{"Out"},
{});
auto signature2 =
(*OpUtilsMap::Instance().GetArgumentMappingFn("allclose"))(arg_case2);
EXPECT_STREQ(signature2.name, "allclose");
EXPECT_STREQ(signature2.attr_names[1], "Atol");
}
TEST(ARG_MAP, reshape) {
TestArgumentMappingContext arg_case1({"X", "ShapeTensor"}, {}, {}, {"Out"});
auto signature1 =
(*OpUtilsMap::Instance().GetArgumentMappingFn("reshape2"))(arg_case1);
EXPECT_STREQ(signature1.name, "reshape");
TestArgumentMappingContext arg_case2({"X", "Shape"}, {}, {}, {"Out"});
auto signature2 =
(*OpUtilsMap::Instance().GetArgumentMappingFn("reshape2"))(arg_case2);
EXPECT_STREQ(signature2.name, "reshape");
TestArgumentMappingContext arg_case3(
{"X"}, {}, {{"shape", paddle::any(std::vector<int>({1, 2}))}}, {"Out"});
auto signature3 =
(*OpUtilsMap::Instance().GetArgumentMappingFn("reshape2"))(arg_case3);
EXPECT_STREQ(signature3.name, "reshape");
}
} // namespace tests
} // namespace phi
+120
View File
@@ -0,0 +1,120 @@
/* Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
Licensed 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. */
#pragma once
#include <gtest/gtest.h>
#include <memory>
#include <unordered_map>
#include <unordered_set>
#include "paddle/phi/core/compat/op_utils.h"
namespace phi {
namespace tests {
class TestArgumentMappingContext : public phi::ArgumentMappingContext {
public:
TestArgumentMappingContext(
std::unordered_set<std::string> dense_tensor_ins,
std::unordered_set<std::string> sr_ins,
std::unordered_map<std::string, paddle::any> op_attrs,
std::unordered_set<std::string> dense_tensor_outs,
std::unordered_set<std::string> sr_outs = {})
: dense_tensor_inputs(dense_tensor_ins),
selected_rows_inputs(sr_ins),
attrs(op_attrs),
dense_tensor_outputs(dense_tensor_outs),
selected_rows_outputs(sr_outs) {}
bool HasInput(const std::string& name) const override {
return dense_tensor_inputs.count(name) > 0 ||
selected_rows_inputs.count(name) > 0;
}
bool HasOutput(const std::string& name) const override {
return dense_tensor_outputs.count(name) > 0 ||
selected_rows_outputs.count(name) > 0;
}
bool HasAttr(const std::string& name) const override {
return attrs.count(name) > 0;
}
paddle::any Attr(const std::string& name) const override {
return attrs.at(name);
}
size_t InputSize(const std::string& name) const override {
return dense_tensor_inputs.count(name) + selected_rows_inputs.count(name);
}
size_t OutputSize(const std::string& name) const override {
return dense_tensor_outputs.size() + selected_rows_outputs.size();
}
bool IsDenseTensorInput(const std::string& name) const override {
return dense_tensor_inputs.count(name) > 0;
}
bool IsDenseTensorInputs(const std::string& name) const override {
return dense_tensor_inputs.count(name) > 0;
}
bool IsSelectedRowsInput(const std::string& name) const override {
return selected_rows_inputs.count(name) > 0;
}
bool IsSelectedRowsInputs(const std::string& name) const override {
return selected_rows_inputs.count(name) > 0;
}
// add member if needed
bool IsDenseTensorVectorInput(const std::string& name) const override {
return false;
}
bool IsSparseCooTensorInput(const std::string& name) const override {
return false;
}
bool IsSparseCsrTensorInput(const std::string& name) const override {
return false;
}
bool IsSparseCooTensorOutput(const std::string& name) const override {
return false;
}
bool IsDenseTensorOutput(const std::string& name) const override {
return dense_tensor_outputs.count(name) > 0;
}
bool IsSelectedRowsOutput(const std::string& name) const override {
return selected_rows_outputs.count(name) > 0;
}
bool IsForInferShape() const override { return false; }
private:
const std::unordered_set<std::string> dense_tensor_inputs;
const std::unordered_set<std::string> selected_rows_inputs;
const std::unordered_map<std::string, paddle::any> attrs;
const std::unordered_set<std::string> dense_tensor_outputs;
const std::unordered_set<std::string> selected_rows_outputs;
};
} // namespace tests
} // namespace phi