未验证 提交 dc225ed2 编写于 作者: L liym27 提交者: GitHub

OP (tensor_array_read_write) error message enhancement. test=develop (#23468)

上级 3cb5623d
......@@ -31,9 +31,14 @@ class ArrayOp : public framework::OperatorBase {
size_t GetOffset(const framework::Scope &scope,
const platform::Place &place) const {
auto *i = scope.FindVar(Input("I"));
PADDLE_ENFORCE(i != nullptr, "I must be set");
PADDLE_ENFORCE_NOT_NULL(
i, platform::errors::NotFound("Input(I) is not found."));
auto &i_tensor = i->Get<framework::LoDTensor>();
PADDLE_ENFORCE_EQ(i_tensor.numel(), 1);
PADDLE_ENFORCE_EQ(i_tensor.numel(), 1,
platform::errors::InvalidArgument(
"Input(I) must have numel 1. "
"But received %d, and it's shape is [%s].",
i_tensor.numel(), i_tensor.dims()));
// get device context from pool
platform::DeviceContextPool &pool = platform::DeviceContextPool::Instance();
......
......@@ -83,8 +83,7 @@ class WriteToArrayInferShape : public framework::InferShapeBase {
void operator()(framework::InferShapeContext *context) const override {
PADDLE_ENFORCE_EQ(
context->HasInput("I"), true,
platform::errors::InvalidArgument(
"Read/Write array operation must set the subscript index."));
platform::errors::NotFound("Input(I) of WriteToArrayOp is not found."));
// TODO(wangchaochaohu) control flow Op do not support runtime infer shape
// Later we add [ontext->GetInputDim("I")) == 1] check when it's supported
......@@ -93,11 +92,9 @@ class WriteToArrayInferShape : public framework::InferShapeBase {
return;
}
PADDLE_ENFORCE_EQ(
context->HasOutput("Out"), true,
platform::errors::InvalidArgument(
"Read/Write array operation must set the output Tensor "
"to get the result."));
PADDLE_ENFORCE_EQ(context->HasOutput("Out"), true,
platform::errors::NotFound(
"Output(Out) of WriteToArrayOp is not found."));
context->SetOutputDim("Out", context->GetInputDim("X"));
// When compile time, we need to:
......@@ -139,15 +136,14 @@ class ReadFromArrayOp : public ArrayOp {
void RunImpl(const framework::Scope &scope,
const platform::Place &place) const override {
auto *x = scope.FindVar(Input("X"));
PADDLE_ENFORCE_NOT_NULL(
x,
platform::errors::InvalidArgument(
"X(Input Variable) must be set when we call read array operation"));
PADDLE_ENFORCE_NOT_NULL(x,
platform::errors::NotFound(
"Input(X) of ReadFromArrayOp is not found."));
auto &x_array = x->Get<framework::LoDTensorArray>();
auto *out = scope.FindVar(Output("Out"));
PADDLE_ENFORCE_NOT_NULL(out, platform::errors::InvalidArgument(
"Out(Output Varibale) must be set when we "
"call read array operation"));
PADDLE_ENFORCE_NOT_NULL(
out, platform::errors::NotFound(
"Output(Out) of ReadFromArrayOp is not found."));
size_t offset = GetOffset(scope, place);
if (offset < x_array.size()) {
auto *out_tensor = out->GetMutable<framework::LoDTensor>();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册