|
|
|
@@ -118,6 +118,7 @@ class IrExportBuilder { |
|
|
|
bool SetValueInfoProto(const AnfNodePtr &node, mind_ir::ValueInfoProto *const value_proto); |
|
|
|
bool SetParamToTensorProto(const ParameterPtr ¶m, mind_ir::TensorProto *const tensor_proto); |
|
|
|
bool SetTensorProto(const AbstractBasePtr &abstract, mind_ir::TensorProto *const tensor_proto); |
|
|
|
bool SetCSRTensorToProto(const AbstractBasePtr &abstract, mind_ir::AttributeProto *const attr_proto); |
|
|
|
bool SetAttributeProto(const AnfNodePtr &node, mind_ir::NodeProto *const node_proto); |
|
|
|
bool SetAbstractToNodeProto(const CNodePtr &node, mind_ir::NodeProto *const node_proto); |
|
|
|
bool SetAbstractToNodeProto(const abstract::AbstractBasePtr &abstract, mind_ir::AttributeProto *const attr_proto); |
|
|
|
@@ -529,6 +530,17 @@ bool IrExportBuilder::SetTensorToAttributeProto(const ValuePtr &value, mind_ir:: |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
bool IrExportBuilder::SetCSRTensorToProto(const AbstractBasePtr &abstract, mind_ir::AttributeProto *const attr_proto) { |
|
|
|
abstract::AbstractCSRTensorPtr csr_tensor_abs = abstract->cast<abstract::AbstractCSRTensorPtr>(); |
|
|
|
MS_EXCEPTION_IF_NULL(csr_tensor_abs); |
|
|
|
attr_proto->set_type(mind_ir::AttributeProto_AttributeType_CSR_TENSOR); |
|
|
|
(void)SetTensorProto(csr_tensor_abs->indptr(), attr_proto->add_tensors()); |
|
|
|
(void)SetTensorProto(csr_tensor_abs->indices(), attr_proto->add_tensors()); |
|
|
|
(void)SetTensorProto(csr_tensor_abs->values(), attr_proto->add_tensors()); |
|
|
|
auto dense_proto = attr_proto->add_values(); |
|
|
|
return SetAbstractToNodeProto(csr_tensor_abs->dense_shape(), dense_proto); |
|
|
|
} |
|
|
|
|
|
|
|
bool IrExportBuilder::SetTensorProto(const AbstractBasePtr &abstract, mind_ir::TensorProto *const tensor_proto) { |
|
|
|
auto type = abstract->BuildType(); |
|
|
|
auto shape = abstract->BuildShape(); |
|
|
|
@@ -691,7 +703,7 @@ bool IrExportBuilder::SetAbstractToNodeProto(const AbstractBasePtr &abs, mind_ir |
|
|
|
attr_proto->set_type(mind_ir::AttributeProto_AttributeType_IOMONAD); |
|
|
|
} else if (type->isa<CSRTensorType>()) { |
|
|
|
auto csr_tensor_abs = abs->cast<abstract::AbstractCSRTensorPtr>(); |
|
|
|
if (!SetAbstractToNodeProto(csr_tensor_abs->element(), attr_proto)) { |
|
|
|
if (!SetCSRTensorToProto(csr_tensor_abs, attr_proto)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
} else { |
|
|
|
|