我是靠谱客的博主 激情早晨,最近开发中收集的这篇文章主要介绍MindSpore解读评注(8)对mindspore\ccsrc\pipeline\jit\parse\parse_bas的部分注释,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对mindsporeccsrcpipelinejitparseparse_bas的部分注释
知识浅薄,还有许多未理解之处,欢迎各位纠正、讨论。
相对路径:mindsporeccsrcpipelinejitparseparse_bas
这部分代码是解析功能的基础,包含一些函数和类型的声明。

头文件

```cpp

#ifndef MINDSPORE_CCSRC_PIPELINE_JIT_PARSE_PARSE_BASE_H_//防止双重定义
#define MINDSPORE_CCSRC_PIPELINE_JIT_PARSE_PARSE_BASE_H_//预编译命令
//导入系统库
#include <string>
#include <memory>
//引用自定义头文件
#include "pybind11/pybind11.h"
#include "ir/anf.h"
#include "ir/func_graph.h"
#include "ir/manager.h"
#include "pybind_api/export_flags.h"


```

资源导入```cpp

namespace py = pybind11;//建立pybind11命名空间,其主要功能有简单demo,调用类函数的成员函数
namespace mindspore {//创建一个名为mindspore的空间,并在其中嵌套一个名为parse(作语法分析)的空间
namespace parse {
// define the node type
// 定义节点类型
enum AstMainType : int64_t {
    //Ast主类型
  AST_MAIN_TYPE_STMT = 0,       // ast.Stmt 声明 语句对象
  AST_MAIN_TYPE_EXPR = 1,       // ast.Expr 运算表达式
  AST_MAIN_TYPE_SLICE = 2,      // ast.Slice 切片
  AST_MAIN_TYPE_UNKNOWN = 0xFF  // Error 未知状态就是error错误
  // 0x其实就是16进制,15*16 + 15 = 255 相当于补码的-1
};
enum AstSubType : int64_t {
    //Ast子类型
  AST_SUB_TYPE_AND = 3,        // ast.And 且
  AST_SUB_TYPE_OR = 4,         // ast.Or 或
  AST_SUB_TYPE_NAME = 5,       // ast.Name
  AST_SUB_TYPE_TUPLE = 6,      // ast.Tuple 元组空间
  AST_SUB_TYPE_SUBSCRIPT = 7,  // ast.Subscript 下标字
  AST_SUB_TYPE_STARRED = 8,    // ast.Starred 星号标记
  AST_SUB_TYPE_ATTRIBUTE = 9,  // ast.Attribute 属性
  AST_SUB_TYPE_UNKNOWN = 0xFF  // Error 未知状态就是error错误
};
// define the parse target type
// 定义解析目标类型
enum ParseTargetTypeDef {
    //解析目标类型Def
  PARSE_TARGET_FUNCTION = 0,         // function 功能函数
  PARSE_TARGET_METHOD = 1,           // method 方法
  PARSE_TARGET_OBJECT_INSTANCE = 2,  // object instance 对象实例
  PARSE_TARGET_UNKNOW = 0xFF         // ERROR TYPE 错误类型
};


```

定义python模块名```cpp

// define python module name
// const char定义一个指向字符(串)常量的指针
const char PYTHON_MOD_PARSE_MODULE[] = "mindspore._extends.parse";
const char PYTHON_MOD_PARSE_OBJECT_FUNCTION[] = "parse_cb";
const char PYTHON_MOD_RESOLVE_FUNCTION[] = "resolve_symbol";
const char PYTHON_MOD_RESOLVE_GET_OBJ_KEY[] = "get_object_key";
const char PYTHON_MOD_PARSE_CHECK_IS_CLASS_MEMBER[] = "is_class_member";
const char PYTHON_MOD_RESOLVE_GET_OBJ_TYPE[] = "get_obj_type";
const char PYTHON_MOD_GET_OBJ_ID[] = "get_obj_id";
const char PYTHON_MOD_GET_CLASS_INSTANCE_TYPE[] = "get_class_instance_type";
const char PYTHON_MOD_CREATE_OBJ_INSTANCE[] = "create_obj_instance";
const char PYTHON_MOD_GET_DATACLASS_ATTRS[] = "get_dataclass_attributes";
const char PYTHON_MOD_GET_DATACLASS_METHODS[] = "get_dataclass_methods";
const char PYTHON_MOD_GET_MODULE_NAMESPACE[] = "get_module_namespace";
const char PYTHON_MOD_GET_MEMBER_NAMESPACE_SYMBOL[] = "get_class_member_namespace_symbol";
const char PYTHON_MOD_GET_PARSE_METHOD[] = "get_parse_method_of_class";
const char PYTHON_MOD_GET_BPROP_METHOD[] = "get_bprop_method_of_class";
const char PYTHON_MOD_GET_OBJECT_DESCRIPTION[] = "get_object_description";
const char PYTHON_MOD_CONVERT_TO_MS_TENSOR[] = "convert_to_ms_tensor";
const char PYTHON_PARSE_GET_ARGS[] = "get_args";
const char PYTHON_PARSE_GET_ARGS_DEFAULT_VALUES[] = "get_args_default_values";
const char PYTHON_PARSE_GET_NODE_TYPE[] = "get_node_type";
const char PYTHON_PARSE_GET_AST_TYPE[] = "get_ast_type";
const char PYTHON_PARSE_GET_NAMESPACE_SYMBOL[] = "get_namespace_symbol";
const char PYTHON_PARSE_GET_AST_NAMESPACE_SYMBOL[] = "get_ast_namespace_symbol";
const char PYTHON_PARSE_GET_OPERATION_NAMESPACE_SYMBOL[] = "get_operation_namespace_symbol";
const char PYTHON_PARSE_GET_LOCATION[] = "get_location";
const char PYTHON_PARSE_EXPAND_EXPR_STATEMENT[] = "expand_expr_statement";
const char PYTHON_PARSE_GENERATE_SCOPE[] = "generate_scope";
const char PYTHON_PARSE_GET_SCOPE_NAME[] = "get_scope_name";
const char PYTHON_PARSE_ANALYZE_SUPER[] = "analyze_super";
const char PYTHON_PARSE_CLASS_SLICE[] = "create_slice_obj";
const char PYTHON_PARSE_CLASS_ELLIPSIS[] = "create_ellipsis_obj";
// define the common name
// 定义公共名称(关键字)
const char NAMED_PRIMITIVE_LEN[] = "len";
const char NAMED_PRIMITIVE_BODY[] = "body";
const char NAMED_PRIMITIVE_ASSIGN[] = "Assign";
const char NAMED_PRIMITIVE_AUGASSIGN[] = "AugAssign";
const char NAMED_PRIMITIVE_FOR[] = "For";
const char NAMED_PRIMITIVE_IF[] = "If";
const char NAMED_PRIMITIVE_WHILE[] = "While";
const char NAMED_PRIMITIVE_VALUE[] = "value";
const char NAMED_PRIMITIVE_FUNC[] = "func";
const char NAMED_PRIMITIVE_TEST[] = "test";
const char NAMED_PRIMITIVE_LEFT[] = "left";
const char NAMED_PRIMITIVE_CALL[] = "Call";
const char NAMED_PRIMITIVE_SUBSCRIPT[] = "Subscript";
const char NAMED_PRIMITIVE_ATTRIBUTE[] = "Attribute";
const char NAMED_PRIMITIVE_COMPARE[] = "Compare";
const char NAMED_PRIMITIVE_NAMECONSTANT[] = "NameConstant";
const char NAMED_PRIMITIVE_COMPARATORS[] = "comparators";
const char NAMED_PRIMITIVE_TARGET[] = "target";
const char NAMED_PRIMITIVE_SLICE[] = "slice";
const char NAMED_PRIMITIVE_NAME[] = "Name";
const char NAMED_PRIMITIVE_NUM[] = "Num";
const char NAMED_PRIMITIVE_STR[] = "Str";
const char NAMED_PRIMITIVE_ITER[] = "iter";
const char NAMED_PRIMITIVE_NEXT[] = "next";
const char NAMED_PRIMITIVE_GETITEM[] = "getitem";
const char NAMED_PRIMITIVE_SETITEM[] = "setitem";
const char NAMED_PRIMITIVE_HASNEXT[] = "hasnext";
const char NAMED_PRIMITIVE_BOOL[] = "bool_";  // bool: P.identity
const char NAMED_PRIMITIVE_MAKETUPLE[] = "MakeTuple";
const char NAMED_PRIMITIVE_MAKELIST[] = "make_list";
const char NAMED_PRIMITIVE_MAKESLICE[] = "make_slice";
const char NAMED_PRIMITIVE_MAKEDICT[] = "make_dict";
const char NAMED_METAGRAPH_UNPACKCALL[] = "unpack_call";
// define NAMED_PRIMITIVE_GETATTR "getattr"
// define python inline attr
//定义命名基元 "getattr"
//定义python内联属性
const char PYTHON_GET_METHOD_LEN[] = "__len__";
const char PYTHON_GET_METHOD_SELF_CLASS[] = "__self__";
const char PYTHON_GET_OBJ_DESC[] = "__str__";
const char PYTHON_EXTERN_PARSE_METHOD[] = "__parse_method__";
const char PYTHON_EXTERN_MINDSPORE_FLAG[] = "_mindspore_flags";
// define the parse constant
//定义解析常量
const int64_t MAX_COMPARISON_OPS_SUPPORTED = 1;//支持的最大比较操作数
const char CUSTOM_BPROP_NAME[] = "bprop";//自定义BPROP名称
const char STAGE_NAME[] = "pipeline_stage";//定义名称为管道阶段
// define the Namespace name
//定义名称空间名称
const char RESOLVE_NAMESPACE_NAME_AST[] = "Ast";                   // for ast type namespace 对于ast类型命名空间
const char RESOLVE_NAMESPACE_NAME_CLASS_MEMBER[] = "ClassMember";  // for class member namespace 对于类成员命名空间
const char RESOLVE_NAMESPACE_NAME_SYMBOL_STR[] = "SymbolStr";      // for symbol str namespace 对于字符符号(str)命名空间
const char RESOLVE_NAMESPACE_NAME_COMMON_OPS[] = "CommonOPS";      // for common ops, eg: hasnext, next 对于普通操作,例如:hasnext、next
const char RESOLVE_NAMESPACE_NAME_MODULE[] = "Module";             // for Module namespace 用于模块名称空间

```

定义解析类型```cpp

// define Resolve type
//定义解析类型
enum ResolveTypeDef : int64_t {
  RESOLVE_TYPE_NONE = 0,            // resolve None 一无所获
  RESOLVE_TYPE_FUNCTION = 1,        // resolve function 解析函数
  RESOLVE_TYPE_METHOD = 2,          // resolve class method 解析类方法
  RESOLVE_TYPE_CLASS_TYPE = 3,      // resolve class type 解析类类型
  RESOLVE_TYPE_CLASS_INSTANCE = 4,  // resolve the class instance of common class 解析公共类的类实例
  RESOLVE_TYPE_INVALID = 0xFF       // resolve invalid 解决无效
};
// define the class instance detail type When the type is RESOLVE_TYPE_CLASS_INSTANCE
//当类型为RESOLVEu typeu classu instance时,定义类实例详细信息类型
enum ClassInstanceTypeDef {
  CLASS_INSTANCE_TYPE_CELL = 0,       // class instance type is Cell
  CLASS_INSTANCE_TYPE_PRIMITIVE = 1,  // class instance type is Primitive
  CLASS_INSTANCE_TYPE_INVALID = 0xFF
};


```
声明定义函数```cpp

// Convert python object to ValuePtr
// 将python对象转换为值Ptr
bool ConvertData(const py::object &obj, ValuePtr *data, bool use_signature = false, const TypePtr &dtype = nullptr);
//转换数据
// Convert python obj to graph
//将python 对象转换为图形
FuncGraphPtr ConvertToFuncGraph(const py::object &obj,
                                const std::string &python_mod_get_parse_method = PYTHON_MOD_GET_PARSE_METHOD);
//转换成函数图
// Parse the python object to graph
//将python对象解析为图形
FuncGraphPtr ParsePythonCode(const py::object &obj,
                             const std::string &python_mod_get_parse_method = PYTHON_MOD_GET_PARSE_METHOD);
// 解析Python代码
// add wrap for cell top graph.
// 为单元格顶部图形添加换行。
FuncGraphPtr MakeTopGraph(const py::object &cell, const ValuePtr &cell_ptr);//制作顶部图形
}  // namespace parse
}  // namespace mindspore
#endif  // MINDSPORE_CCSRC_PIPELINE_JIT_PARSE_PARSE_BASE_H_


```

以上即为本篇的所有内容,因学识与能力有限,如有不足之处,请多多包涵与指教。

最后

以上就是激情早晨为你收集整理的MindSpore解读评注(8)对mindspore\ccsrc\pipeline\jit\parse\parse_bas的部分注释的全部内容,希望文章能够帮你解决MindSpore解读评注(8)对mindspore\ccsrc\pipeline\jit\parse\parse_bas的部分注释所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部