|
|
|
@@ -66,23 +66,14 @@ void ValidateOperation(const AnfNodePtr &node) { |
|
|
|
MS_LOG(EXCEPTION) << "Illegal primitive: " << prim->name(); |
|
|
|
} |
|
|
|
|
|
|
|
void ValidateAbstract(const AnfNodePtr &node) { |
|
|
|
if (node == nullptr) { |
|
|
|
MS_LOG(DEBUG) << "Node to validate is invalid"; |
|
|
|
return; |
|
|
|
} |
|
|
|
bool CheckAbstractScalar(const AnfNodePtr &node) { |
|
|
|
AbstractBasePtr ptrBase = node->abstract(); |
|
|
|
if (ptrBase == nullptr) { |
|
|
|
MS_LOG(DEBUG) << "Abstract is null in node: " << node->DebugString(); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (ptrBase->isa<AbstractClass>() || ptrBase->isa<AbstractJTagged>()) { |
|
|
|
// Validate a type. |
|
|
|
MS_LOG(EXCEPTION) << "Illegal type in the graph: " << ptrBase->ToString(); |
|
|
|
} |
|
|
|
if (ptrBase->isa<AbstractScalar>()) { |
|
|
|
TypePtr ptrType = ptrBase->GetTypeTrack(); |
|
|
|
MS_EXCEPTION_IF_NULL(ptrType); |
|
|
|
if (ptrType->isa<EnvType>()) { |
|
|
|
MS_LOG(EXCEPTION) << "Illegal type in the graph: " << ptrBase->ToString() << " for node=" << node->DebugString(); |
|
|
|
} |
|
|
|
if (ptrType->isa<Problem>() || ptrType->isa<External>()) { |
|
|
|
// only send string in external |
|
|
|
if (!IsValueNode<StringImm>(node)) { |
|
|
|
@@ -91,26 +82,39 @@ void ValidateAbstract(const AnfNodePtr &node) { |
|
|
|
<< " for node=" << node->DebugString(); |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
void ValidateAbstract(const AnfNodePtr &node) { |
|
|
|
if (node == nullptr) { |
|
|
|
MS_LOG(DEBUG) << "Node to validate is invalid"; |
|
|
|
return; |
|
|
|
} |
|
|
|
if (ptrBase->isa<AbstractError>()) { |
|
|
|
// NOTICE: validate dead code? |
|
|
|
MS_LOG(DEBUG) << "AbstractError in the graph: " << ptrBase->ToString(); |
|
|
|
AbstractBasePtr ptrBase = node->abstract(); |
|
|
|
if (ptrBase == nullptr) { |
|
|
|
MS_LOG(DEBUG) << "Abstract is null in node: " << node->DebugString(); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (ptrBase->isa<AbstractType>() || ptrBase->isa<AbstractFunction>() || ptrBase->isa<AbstractTuple>() || |
|
|
|
ptrBase->isa<AbstractList>() || ptrBase->isa<AbstractTensor>() || ptrBase->isa<AbstractRowTensor>() || |
|
|
|
ptrBase->isa<AbstractSparseTensor>() || ptrBase->isa<abstract::AbstractRefKey>() || ptrBase->isa<AbstractRef>()) { |
|
|
|
if (ptrBase->isa<AbstractClass>() || ptrBase->isa<AbstractJTagged>()) { |
|
|
|
// Validate a type. |
|
|
|
MS_LOG(EXCEPTION) << "Illegal type in the graph: " << ptrBase->ToString() << " for node=" << node->DebugString(); |
|
|
|
} |
|
|
|
if (CheckAbstractScalar(node)) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (ptrBase->isa<abstract::AbstractNone>()) { |
|
|
|
if (ptrBase->isa<AbstractError>()) { |
|
|
|
// NOTICE: validate dead code? |
|
|
|
MS_LOG(DEBUG) << "AbstractError in the graph: " << ptrBase->ToString(); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// UMonad or IOMonad |
|
|
|
if (ptrBase->isa<abstract::AbstractMonad>()) { |
|
|
|
bool checkAbstractIslegal = |
|
|
|
ptrBase->isa<AbstractType>() || ptrBase->isa<AbstractFunction>() || ptrBase->isa<AbstractTuple>() || |
|
|
|
ptrBase->isa<AbstractList>() || ptrBase->isa<AbstractTensor>() || ptrBase->isa<AbstractRowTensor>() || |
|
|
|
ptrBase->isa<AbstractSparseTensor>() || ptrBase->isa<abstract::AbstractRefKey>() || ptrBase->isa<AbstractRef>() || |
|
|
|
ptrBase->isa<abstract::AbstractNone>() || ptrBase->isa<abstract::AbstractMonad>(); |
|
|
|
if (checkAbstractIslegal) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
|