|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|