|
|
|
@ -80,7 +80,7 @@ class CompileTimeInferShapeContext : public InferShapeContext {
|
|
|
|
|
PADDLE_ENFORCE_EQ(
|
|
|
|
|
in_var_names.size(), out_var_names.size(),
|
|
|
|
|
platform::errors::PreconditionNotMet(
|
|
|
|
|
"Op [%s]: Input var number shoule be equal with output var number",
|
|
|
|
|
"Op [%s]: Input var number should be equal with output var number",
|
|
|
|
|
op_.Type()));
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < in_var_names.size(); ++i) {
|
|
|
|
@ -663,7 +663,7 @@ void OpDesc::Flush() {
|
|
|
|
|
|
|
|
|
|
void OpDesc::CheckAttrs() {
|
|
|
|
|
PADDLE_ENFORCE(!Type().empty(),
|
|
|
|
|
"CheckAttr() can not be called before type is setted.");
|
|
|
|
|
"CheckAttr() can not be called before type is set.");
|
|
|
|
|
auto *checker = OpInfoMap::Instance().Get(Type()).Checker();
|
|
|
|
|
if (checker == nullptr) {
|
|
|
|
|
// checker is not configured. That operator could be generated by Paddle,
|
|
|
|
@ -706,7 +706,7 @@ void OpDesc::InferShape(const BlockDesc &block) const {
|
|
|
|
|
void OpDesc::InferVarType(BlockDesc *block) const {
|
|
|
|
|
// There are a few places that var type can be set.
|
|
|
|
|
// When VarDesc is created, default set to LOD_TENSOR.
|
|
|
|
|
// When output variable is created, default is defaut set to LOD_TENSOR.
|
|
|
|
|
// When output variable is created, default is default set to LOD_TENSOR.
|
|
|
|
|
// We limit here to be the only place that operator defines its customized
|
|
|
|
|
// var type inference. Hence, we don't do any "default" setting here.
|
|
|
|
|
auto &info = OpInfoMap::Instance().Get(this->Type());
|
|
|
|
|