• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2023 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 
17 #ifndef MINDSPORE_CORE_BASE_STRUCTURE_OPS_H_
18 #define MINDSPORE_CORE_BASE_STRUCTURE_OPS_H_
19 
20 #include <iostream>
21 #include <memory>
22 #include <string>
23 #include "ir/anf.h"
24 #include "ir/primitive.h"
25 #include "ops/structure_op_name.h"
26 #include "utils/hash_map.h"
27 #include "ops/image_op_name.h"
28 
29 namespace mindspore {
30 static constexpr char kDoSignaturePrimitivePrefix[] = "S_Prim_";
31 namespace prim {
32 // String
33 GVAR_DEF(PrimitivePtr, kPrimStringEq, std::make_shared<Primitive>(kStringEqOpName));
34 GVAR_DEF(PrimitivePtr, kPrimStringLt, std::make_shared<Primitive>(kStringLtOpName));
35 GVAR_DEF(PrimitivePtr, kPrimStringGt, std::make_shared<Primitive>(kStringGtOpName));
36 GVAR_DEF(PrimitivePtr, kPrimStringLe, std::make_shared<Primitive>(kStringLeOpName));
37 GVAR_DEF(PrimitivePtr, kPrimStringGe, std::make_shared<Primitive>(kStringGeOpName));
38 GVAR_DEF(PrimitivePtr, kPrimStringConcat, std::make_shared<Primitive>(kStringConcatOpName));
39 GVAR_DEF(PrimitivePtr, kPrimStringNot, std::make_shared<Primitive>(kStringNotOpName));
40 GVAR_DEF(PrimitivePtr, kPrimStringIn, std::make_shared<Primitive>(kStringInOpName));
41 GVAR_DEF(PrimitivePtr, kPrimStringMul, std::make_shared<Primitive>(kStringMulOpName));
42 GVAR_DEF(PrimitivePtr, kPrimStringGetItem, std::make_shared<Primitive>(kStringGetItemOpName));
43 
44 // Stack ops
45 GVAR_DEF(PrimitivePtr, kPrimStackInit, std::make_shared<Primitive>("StackInit"));
46 GVAR_DEF(PrimitivePtr, kPrimStackDestroy, std::make_shared<Primitive>("StackDestroy"));
47 GVAR_DEF(PrimitivePtr, kPrimStackPush, std::make_shared<Primitive>("StackPush"));
48 GVAR_DEF(PrimitivePtr, kPrimStackPop, std::make_shared<Primitive>("StackPop"));
49 
50 // TensorList
51 GVAR_DEF(PrimitivePtr, kPrimTensorListFromTensor, std::make_shared<Primitive>("TensorListFromTensor"));
52 GVAR_DEF(PrimitivePtr, kPrimTensorListReserve, std::make_shared<Primitive>("TensorListReserve"));
53 GVAR_DEF(PrimitivePtr, kPrimTensorListStack, std::make_shared<Primitive>("TensorListStack"));
54 GVAR_DEF(PrimitivePtr, kPrimTensorListSetItem, std::make_shared<Primitive>("TensorListSetItem"));
55 
56 // Structures
57 GVAR_DEF(PrimitivePtr, kPrimMakeKeywordArg, std::make_shared<Primitive>("make_keyword_arg"));
58 GVAR_DEF(PrimitivePtr, kPrimReducedShape, std::make_shared<Primitive>("reduced_shape"));
59 GVAR_DEF(PrimitivePtr, kPrimStopGradient, std::make_shared<Primitive>("StopGradient"));
60 GVAR_DEF(PrimitivePtr, kPrimFakeBprop, std::make_shared<Primitive>("fake_bprop"));
61 GVAR_DEF(PrimitivePtr, kPrimBroadcastGradientArgs, std::make_shared<Primitive>("BroadcastGradientArgs"));
62 GVAR_DEF(PrimitivePtr, kPrimDynamicBroadcastGradientArgs,
63          std::make_shared<Primitive>(kDynamicBroadcastGradientArgsOpName));
64 GVAR_DEF(PrimitivePtr, kPrimConvertToAdapterTensor, std::make_shared<Primitive>("ConvertToAdapterTensor"));
65 GVAR_DEF(PrimitivePtr, kPrimConvertToMsTensor, std::make_shared<Primitive>("ConvertToMsTensor"));
66 GVAR_DEF(PrimitivePtr, kPrimDtypeToEnum, std::make_shared<Primitive>("DtypeToEnum"));
67 
68 // Statements
69 GVAR_DEF(PrimitivePtr, kPrimUnroll, std::make_shared<Primitive>("Unroll"));
70 GVAR_DEF(PrimitivePtr, kPrimVmapStackAssign, std::make_shared<Primitive>(kVmapStackAssignOpName));
71 GVAR_DEF(PrimitivePtr, kPrimVmapUnstackAssign, std::make_shared<Primitive>(kVmapUnstackAssignOpName));
72 GVAR_DEF(PrimitivePtr, kPrimMakeSlice, std::make_shared<Primitive>(kMakeSliceOpName));
73 GVAR_DEF(PrimitivePtr, kPrimSliceGetItem, std::make_shared<Primitive>(kSliceGetItemOpName));
74 GVAR_DEF(PrimitivePtr, kPrimGetAttr, std::make_shared<Primitive>("getattr"));
75 GVAR_DEF(PrimitivePtr, kPrimTileShape, std::make_shared<Primitive>("tile_shape"));
76 GVAR_DEF(PrimitivePtr, kPrimGenerateShapeIndex, std::make_shared<Primitive>("generate_shape_index"));
77 GVAR_DEF(PrimitivePtr, kPrimGenerateInverseIndex, std::make_shared<Primitive>("generate_inverse_index"));
78 GVAR_DEF(PrimitivePtr, kPrimCond, std::make_shared<Primitive>(kCondOpName));
79 GVAR_DEF(PrimitivePtr, kPrimJoinedStr, std::make_shared<Primitive>(kJoinedStrOpName));
80 GVAR_DEF(PrimitivePtr, kPrimTileSize, std::make_shared<Primitive>("TileSize"));
81 GVAR_DEF(PrimitivePtr, kPrimNormalizeSlice, std::make_shared<Primitive>("NormalizeSlice"));
82 GVAR_DEF(PrimitivePtr, kPrimNormalizeDimIndex, std::make_shared<Primitive>("NormalizeDimIndex"));
83 GVAR_DEF(PrimitivePtr, kPrimRemakeTupleIndex, std::make_shared<Primitive>("RemakeTupleIndex"));
84 GVAR_DEF(PrimitivePtr, kPrimNormalizeTupleIndex, std::make_shared<Primitive>("NormalizeTupleIndex"));
85 GVAR_DEF(PrimitivePtr, kPrimEllipsisToSlice, std::make_shared<Primitive>("EllipsisToSlice"));
86 GVAR_DEF(PrimitivePtr, kPrimGetSqueezeSliceShape, std::make_shared<Primitive>("GetSqueezeSliceShape"));
87 GVAR_DEF(PrimitivePtr, kPrimRemoveExpandedDims, std::make_shared<Primitive>("RemoveExpandedDims"));
88 GVAR_DEF(PrimitivePtr, kPrimGetTupleIndexInfo, std::make_shared<Primitive>("GetTupleIndexInfo"));
89 
90 // Debug ops
91 GVAR_DEF(PrimitivePtr, kPrimAssert, std::make_shared<Primitive>("Assert"));
92 #ifndef ENABLE_SECURITY
93 GVAR_DEF(PrimitivePtr, kPrimScalarSummary, std::make_shared<Primitive>("ScalarSummary"));
94 GVAR_DEF(PrimitivePtr, kPrimImageSummary, std::make_shared<Primitive>("ImageSummary"));
95 GVAR_DEF(PrimitivePtr, kPrimTensorSummary, std::make_shared<Primitive>("TensorSummary"));
96 GVAR_DEF(PrimitivePtr, kPrimHistogramSummary, std::make_shared<Primitive>("HistogramSummary"));
97 GVAR_DEF(PrimitivePtr, kPrimHistogramFixedWidth, std::make_shared<Primitive>("HistogramFixedWidth"));
98 GVAR_DEF(PrimitivePtr, kPrimTensorDump, std::make_shared<Primitive>(kTensorDump));
99 #endif
100 GVAR_DEF(PrimitivePtr, kPrimDebug, std::make_shared<Primitive>("Debug"));
101 
102 // Dynamic shape testing
103 GVAR_DEF(PrimitivePtr, kPrimConvertToDynamic, std::make_shared<Primitive>("ConvertToDynamic"));
104 GVAR_DEF(PrimitivePtr, kPrimGpuConvertToDynamicShape, std::make_shared<Primitive>("GpuConvertToDynamicShape"));
105 GVAR_DEF(PrimitivePtr, kPrimErrorOnDynamicShapeInput, std::make_shared<Primitive>("ErrorOnDynamicShapeInput"));
106 
107 // Dynamic shape.
108 GVAR_DEF(PrimitivePtr, kPrimIsDimUnknown, std::make_shared<Primitive>("IsDimUnKnown"));
109 GVAR_DEF(PrimitivePtr, kPrimIsShapeUnknown, std::make_shared<Primitive>("IsShapeUnKnown"));
110 GVAR_DEF(PrimitivePtr, kPrimIsElementUnknown, std::make_shared<Primitive>("IsElementUnknown"));
111 GVAR_DEF(PrimitivePtr, kPrimIsTensorBoolCond, std::make_shared<Primitive>("IsTensorBoolCond"));
112 
113 // GetNext
114 GVAR_DEF(PrimitivePtr, kPrimGetNext, std::make_shared<Primitive>(kGetNextOpName));
115 GVAR_DEF(PrimitivePtr, kPrimGetNextFromQueue, std::make_shared<Primitive>(kGetNextFromQueueOpName));
116 GVAR_DEF(PrimitivePtr, kPrimDynamicGetNextV2, std::make_shared<Primitive>(kDynamicGetNextV2OpName));
117 GVAR_DEF(PrimitivePtr, kPrimDynamicGetNextAscend, std::make_shared<Primitive>(kDynamicGetNextAscendOpName));
118 
119 class DoSignaturePrimitive : public Primitive {
120  public:
DoSignaturePrimitive(const std::string & name,const ValuePtr & function)121   explicit DoSignaturePrimitive(const std::string &name, const ValuePtr &function)
122       : Primitive(kDoSignaturePrimitivePrefix + name), function_(function) {}
123 
124   ~DoSignaturePrimitive() override = default;
125 
MS_DECLARE_PARENT(DoSignaturePrimitive,Primitive)126   MS_DECLARE_PARENT(DoSignaturePrimitive, Primitive)
127 
128   const ValuePtr function() const { return function_; }
129 
130  private:
131   ValuePtr function_;
132 };
133 using DoSignaturePrimitivePtr = std::shared_ptr<DoSignaturePrimitive>;
134 
135 class DoTransPrimitiveFunction : public Primitive {
136  public:
DoTransPrimitiveFunction(const PrimitivePtr & prim)137   explicit DoTransPrimitiveFunction(const PrimitivePtr &prim) : Primitive("T-PrimFunc-" + prim->name()), prim_(prim) {}
138 
139   ~DoTransPrimitiveFunction() override = default;
140 
MS_DECLARE_PARENT(DoTransPrimitiveFunction,Primitive)141   MS_DECLARE_PARENT(DoTransPrimitiveFunction, Primitive)
142 
143   const PrimitivePtr function() const { return prim_; }
144 
has_given_init_size()145   bool has_given_init_size() const { return has_given_init_size_; }
146 
set_given_init_size(size_t args_size)147   void set_given_init_size(size_t args_size) {
148     has_given_init_size_ = true;
149     given_init_size_ = args_size;
150   }
151 
given_init_size()152   size_t given_init_size() const { return given_init_size_; }
153 
154  private:
155   PrimitivePtr prim_;
156   size_t given_init_size_;
157   bool has_given_init_size_{false};
158 };
159 using DoTransPrimitiveFunctionPtr = std::shared_ptr<DoTransPrimitiveFunction>;
160 }  // namespace prim
161 }  // namespace mindspore
162 
163 #endif  // MINDSPORE_CORE_BASE_STRUCTURE_OPS_H_
164