You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

parse_base.h 6.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /**
  2. * Copyright 2019 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef PIPELINE_PARSE_PARSE_BASE_H_
  17. #define PIPELINE_PARSE_PARSE_BASE_H_
  18. #include <string>
  19. #include <memory>
  20. #include "pybind11/pybind11.h"
  21. #include "ir/anf.h"
  22. #include "ir/func_graph.h"
  23. #include "ir/manager.h"
  24. #include "pybind_api/export_flags.h"
  25. namespace py = pybind11;
  26. namespace mindspore {
  27. namespace parse {
  28. // define the node type
  29. enum AstMainType : int {
  30. AST_MAIN_TYPE_STMT = 0, // ast.Stmt
  31. AST_MAIN_TYPE_EXPR = 1, // ast.Expr
  32. AST_MAIN_TYPE_SLICE = 2, // ast.Slice
  33. AST_MAIN_TYPE_UNKNOWN = 0xFF // Error
  34. };
  35. enum AstSubType : int {
  36. AST_SUB_TYPE_AND = 3, // ast.And
  37. AST_SUB_TYPE_OR = 4, // ast.Or
  38. AST_SUB_TYPE_NAME = 5, // ast.Name
  39. AST_SUB_TYPE_TUPLE = 6, // ast.Tuple
  40. AST_SUB_TYPE_SUBSCRIPT = 7, // ast.Subscript
  41. AST_SUB_TYPE_STARRED = 8, // ast.Starred
  42. AST_SUB_TYPE_UNKNOWN = 0xFF // Error
  43. };
  44. // define the parse target type
  45. enum ParseTargetTypeDef {
  46. PARSE_TARGET_FUNCTION = 0, // function
  47. PARSE_TARGET_METHOD = 1, // method
  48. PARSE_TARGET_OBJECT_INSTANCE = 2, // object instance
  49. PARSE_TARGET_UNKNOW = 0xFF // ERROR TYPE
  50. };
  51. // define python module name
  52. const char PYTHON_MOD_PARSE_MODULE[] = "mindspore._extends.parse";
  53. const char PYTHON_MOD_PARSE_OBJECT_FUNCTION[] = "parse_cb";
  54. const char PYTHON_MOD_RESOLVE_FUNCTION[] = "resolve_symbol";
  55. const char PYTHON_MOD_RESOLVE_GET_OBJ_KEY[] = "get_object_key";
  56. const char PYTHON_MOD_PARSE_CHECK_IS_CLASS_MEMBER[] = "is_class_member";
  57. const char PYTHON_MOD_RESOLVE_GET_OBJ_TYPE[] = "get_obj_type";
  58. const char PYTHON_MOD_GET_OBJ_ID[] = "get_obj_id";
  59. const char PYTHON_MOD_GET_CLASS_INSTANCE_TYPE[] = "get_class_instance_type";
  60. const char PYTHON_MOD_CREATE_OBJ_INSTANCE[] = "create_obj_instance";
  61. const char PYTHON_MOD_GET_DATACLASS_ATTRS[] = "get_dataclass_attributes";
  62. const char PYTHON_MOD_GET_DATACLASS_METHODS[] = "get_dataclass_methods";
  63. const char PYTHON_MOD_GET_MODULE_NAMESPACE[] = "get_module_namespace";
  64. const char PYTHON_MOD_GET_MEMBER_NAMESPACE_SYMBOL[] = "get_class_member_namespace_symbol";
  65. const char PYTHON_MOD_GET_PARSE_METHOD[] = "get_parse_method_of_class";
  66. const char PYTHON_MOD_GET_BPROP_METHOD[] = "get_bprop_method_of_class";
  67. const char PYTHON_PARSE_GET_ARGS[] = "get_args";
  68. const char PYTHON_PARSE_GET_ARGS_DEFAULT_VALUES[] = "get_args_default_values";
  69. const char PYTHON_PARSE_GET_NODE_TYPE[] = "get_node_type";
  70. const char PYTHON_PARSE_GET_AST_TYPE[] = "get_ast_type";
  71. const char PYTHON_PARSE_GET_NAMESPACE_SYMBOL[] = "get_namespace_symbol";
  72. const char PYTHON_PARSE_GET_AST_NAMESPACE_SYMBOL[] = "get_ast_namespace_symbol";
  73. const char PYTHON_PARSE_GET_OPERATION_NAMESPACE_SYMBOL[] = "get_operation_namespace_symbol";
  74. const char PYTHON_PARSE_GET_LOCATION[] = "get_location";
  75. const char PYTHON_PARSE_EXPAND_EXPR_STATEMENT[] = "expand_expr_statement";
  76. const char PYTHON_PARSE_GENERATE_SCOPE[] = "generate_scope";
  77. const char PYTHON_PARSE_GET_SCOPE_NAME[] = "get_scope_name";
  78. const char PYTHON_PARSE_CLASS_SLICE[] = "create_slice_obj";
  79. const char PYTHON_PARSE_CLASS_ELLIPSIS[] = "create_ellipsis_obj";
  80. const char PYTHON_MOD_GET_DEFAULT_INPUT[] = "get_default_input";
  81. // define the common name
  82. const char NAMED_PRIMITIVE_ITER[] = "iter";
  83. const char NAMED_PRIMITIVE_NEXT[] = "next";
  84. const char NAMED_PRIMITIVE_GETITEM[] = "getitem";
  85. const char NAMED_PRIMITIVE_SETITEM[] = "setitem";
  86. const char NAMED_PRIMITIVE_HASNEXT[] = "hasnext";
  87. const char NAMED_PRIMITIVE_BOOL[] = "bool"; // bool: P.identity
  88. const char NAMED_PRIMITIVE_MAKETUPLE[] = "make_tuple";
  89. const char NAMED_PRIMITIVE_MAKELIST[] = "make_list";
  90. const char NAMED_PRIMITIVE_MAKESLICE[] = "make_slice";
  91. const char NAMED_PRIMITIVE_MAKEDICT[] = "make_dict";
  92. const char NAMED_METAGRAPH_UNPACKCALL[] = "unpack_call";
  93. // define NAMED_PRIMITIVE_GETATTR "getattr"
  94. // define python inline attr
  95. const char PYTHON_GET_METHOD_SELF_CLASS[] = "__self__";
  96. const char PYTHON_GET_OBJ_DESC[] = "__str__";
  97. const char PYTHON_EXTERN_PARSE_METHOD[] = "__parse_method__";
  98. const char PYTHON_EXTERN_MINDSPORE_FLAG[] = "_mindspore_flags";
  99. // define the parse constant
  100. const int MAX_COMPARISON_OPS_SUPPORTED = 1;
  101. const char CUSTOM_BPROP_NAME[] = "bprop";
  102. // define the Namespace name
  103. const char RESOLVE_NAMESPACE_NAME_AST[] = "Ast"; // for ast type namespace
  104. const char RESOLVE_NAMESPACE_NAME_CLASS_MEMBER[] = "ClassMember"; // for class member namespace
  105. const char RESOLVE_NAMESPACE_NAME_SYMBOL_STR[] = "SymbolStr"; // for symbol str namespace
  106. const char RESOLVE_NAMESPACE_NAME_COMMON_OPS[] = "CommonOPS"; // for common ops, eg: hasnext, next
  107. const char RESOLVE_NAMESPACE_NAME_MODULE[] = "Module"; // fro Module namespace
  108. // define Resolve type
  109. enum ResolveTypeDef : int {
  110. RESOLVE_TYPE_NONE = 0, // resolve None
  111. RESOLVE_TYPE_FUNCTION = 1, // reslove function
  112. RESOLVE_TYPE_METHOD = 2, // resolve class method
  113. RESOLVE_TYPE_CLASS_TYPE = 3, // resolve class type
  114. RESOLVE_TYPE_CLASS_INSTANCE = 4, // resolve the class instance of common class
  115. RESOLVE_TYPE_INVALID = 0xFF // resolve invalid
  116. };
  117. // define the class instance detail type When the type is RESOLVE_TYPE_CLASS_INSTANCE
  118. enum ClassInstanceTypeDef {
  119. CLASS_INSTANCE_TYPE_CELL = 0, // class instance type is Cell
  120. CLASS_INSTANCE_TYPE_PRIMITIVE = 1, // class instance type is Primitive
  121. CLASS_INSTANCE_TYPE_INVALID = 0xFF
  122. };
  123. // Convert python object to ValuePtr
  124. bool ConvertData(const py::object &obj, ValuePtr *data, bool use_signature = false);
  125. // Convert python obj to graph
  126. FuncGraphPtr ConvertToFuncGraph(const py::object &obj,
  127. const std::string &python_mod_get_parse_method = PYTHON_MOD_GET_PARSE_METHOD);
  128. // Parse the python object to graph
  129. FuncGraphPtr ParsePythonCode(const py::object &obj,
  130. const std::string &python_mod_get_parse_method = PYTHON_MOD_GET_PARSE_METHOD);
  131. } // namespace parse
  132. } // namespace mindspore
  133. #endif // PIPELINE_PARSE_PARSE_BASE_H_