/** * Copyright 2019 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "operator/ops.h" #include #include #include "pipeline/parse/python_adapter.h" #include "pipeline/parse/data_converter.h" namespace mindspore { // namespace to support primitive operators namespace prim { // Arithmetic const PrimitivePtr kPrimScalarAdd = std::make_shared("scalar_add"); const PrimitivePtr kPrimScalarSub = std::make_shared("scalar_sub"); const PrimitivePtr kPrimScalarMul = std::make_shared("scalar_mul"); const PrimitivePtr kPrimScalarDiv = std::make_shared("scalar_div"); const PrimitivePtr kPrimScalarFloordiv = std::make_shared("scalar_floordiv"); const PrimitivePtr kPrimScalarMod = std::make_shared("scalar_mod"); const PrimitivePtr kPrimScalarPow = std::make_shared("scalar_pow"); const PrimitivePtr kPrimScalarTrunc = std::make_shared("scalar_trunc"); const PrimitivePtr kPrimScalarFloor = std::make_shared("scalar_floor"); const PrimitivePtr kPrimScalarUadd = std::make_shared("scalar_uadd"); const PrimitivePtr kPrimScalarUsub = std::make_shared("scalar_usub"); const PrimitivePtr kPrimScalarExp = std::make_shared("scalar_exp"); const PrimitivePtr kPrimScalarLog = std::make_shared("scalar_log"); const PrimitivePtr kPrimScalarSin = std::make_shared("scalar_sin"); const PrimitivePtr kPrimScalarCos = std::make_shared("scalar_cos"); const PrimitivePtr kPrimScalarTan = std::make_shared("scalar_tan"); // Comparisons const PrimitivePtr kPrimScalarEq = std::make_shared("scalar_eq"); const PrimitivePtr kPrimScalarLt = std::make_shared("scalar_lt"); const PrimitivePtr kPrimScalarGt = std::make_shared("scalar_gt"); const PrimitivePtr kPrimScalarNe = std::make_shared("scalar_ne"); const PrimitivePtr kPrimScalarLe = std::make_shared("scalar_le"); const PrimitivePtr kPrimScalarGe = std::make_shared("scalar_ge"); const PrimitivePtr kPrimBoolNot = std::make_shared("bool_not"); const PrimitivePtr kPrimBoolAnd = std::make_shared("bool_and"); const PrimitivePtr kPrimBoolOr = std::make_shared("bool_or"); const PrimitivePtr kPrimBoolEq = std::make_shared("bool_eq"); // Type introspection const PrimitivePtr kPrimTypeOf = std::make_shared("typeof"); const PrimitivePtr kPrimHasType = std::make_shared("hastype"); // Statements const PrimitivePtr kPrimSwitch = std::make_shared("switch"); const PrimitivePtr kPrimReturn = std::make_shared("return"); const PrimitivePtr kPrimAssign = std::make_shared("Assign"); const PrimitivePtr kPrimAssignAdd = std::make_shared("AssignAdd"); const PrimitivePtr kPrimAssignSub = std::make_shared("AssignSub"); const PrimitivePtr kPrimSelect = std::make_shared("Select"); const PrimitivePtr kPrimDistribute = std::make_shared("distribute"); const PrimitivePtr kPrimDot = std::make_shared("dot"); const PrimitivePtr kPrimIm2Col = std::make_shared("im2col"); const PrimitivePtr kPrimCol2Im = std::make_shared("col2im"); const PrimitivePtr kPrimIm2ColV1 = std::make_shared("im2col_v1"); const PrimitivePtr kPrimCol2ImV1 = std::make_shared("col2im_v1"); const PrimitivePtr kPrimResolve = std::make_shared("resolve"); const PrimitivePtr kPrimEmbed = std::make_shared("embed"); const PrimitivePtr kPrimRefToEmbed = std::make_shared("RefToEmbed"); const PrimitivePtr kPrimCreateInstance = std::make_shared("create_instance"); // Structure const PrimitivePtr kPrimStringEqual = std::make_shared("string_equal"); const PrimitivePtr kPrimStringConcat = std::make_shared("string_concat"); const PrimitivePtr kPrimMakeTuple = std::make_shared("make_tuple"); const PrimitivePtr kPrimMakeList = std::make_shared("make_list"); const PrimitivePtr kPrimMakeDict = std::make_shared("make_dict"); const PrimitivePtr kPrimMakeKeywordArg = std::make_shared("make_keyword_arg"); const PrimitivePtr kPrimExtractKeywordArg = std::make_shared("extract_keyword_arg"); const PrimitivePtr kPrimMakeSlice = std::make_shared("make_slice"); const PrimitivePtr kPrimMakeRecord = std::make_shared("make_record"); const PrimitivePtr kPrimTupleGetItem = std::make_shared("tuple_getitem"); const PrimitivePtr kPrimListGetItem = std::make_shared("list_getitem"); const PrimitivePtr kPrimArrayGetItem = std::make_shared("array_getitem"); const PrimitivePtr kPrimTupleSetItem = std::make_shared("tuple_setitem"); const PrimitivePtr kPrimListSetItem = std::make_shared("list_setitem"); const PrimitivePtr kPrimArraySetItem = std::make_shared("array_setitem"); const PrimitivePtr kPrimDictGetItem = std::make_shared("dict_getitem"); const PrimitivePtr kPrimDictSetItem = std::make_shared("dict_setitem"); const PrimitivePtr kPrimListAppend = std::make_shared("list_append"); const PrimitivePtr kPrimGetAttr = std::make_shared("getattr"); const PrimitivePtr kPrimTupleLen = std::make_shared("tuple_len"); const PrimitivePtr kPrimDictLen = std::make_shared("dict_len"); const PrimitivePtr kPrimListLen = std::make_shared("list_len"); const PrimitivePtr kPrimArrayLen = std::make_shared("array_len"); const PrimitivePtr kPrimListMap = std::make_shared("list_map"); const PrimitivePtr kPrimListReduce = std::make_shared("list_reduce"); const PrimitivePtr kPrimTupleReversed = std::make_shared("tuple_reversed"); const PrimitivePtr kPrimTileShape = std::make_shared("tile_shape"); const PrimitivePtr kPrimReducedShape = std::make_shared("reduced_shape"); const PrimitivePtr kPrimTupleDiv = std::make_shared("tuple_div"); const PrimitivePtr kPrimTupleToArray = std::make_shared("tuple_to_array"); const PrimitivePtr kPrimShapeMul = std::make_shared("shape_mul"); const PrimitivePtr kPrimGenerateShapeIndex = std::make_shared("generate_shape_index"); const PrimitivePtr kPrimGenerateInverseIndex = std::make_shared("generate_inverse_index"); const PrimitivePtr kPrimTupleEqual = std::make_shared("tuple_equal"); const PrimitivePtr kPrimListEqual = std::make_shared("list_equal"); const PrimitivePtr kPrimMakeRange = std::make_shared("make_range"); const PrimitivePtr kPrimStopGradient = std::make_shared("stop_gradient"); // Arrays const PrimitivePtr kPrimScalarToArray = std::make_shared("scalar_to_array"); const PrimitivePtr kPrimArrayToScalar = std::make_shared("array_to_scalar"); const PrimitivePtr kPrimBroadcastShape = std::make_shared("broadcast_shape"); const PrimitivePtr kPrimArrayMap = std::make_shared("array_map"); const PrimitivePtr kPrimArrayReduce = std::make_shared("array_reduce"); const PrimitivePtr kPrimShape = std::make_shared("Shape"); const PrimitivePtr kPrimCast = std::make_shared("Cast"); const PrimitivePtr kPrimConcat = std::make_shared("Concat"); const PrimitivePtr kPrimSqueeze = std::make_shared("Squeeze"); const PrimitivePtr kPrimTranspose = std::make_shared("Transpose"); const PrimitivePtr kPrimGatherV2 = std::make_shared("GatherV2"); const PrimitivePtr kPrimSize = std::make_shared("Size"); const PrimitivePtr kPrimArgMax = std::make_shared("Argmax"); const PrimitivePtr kPrimPack = std::make_shared("Pack"); const PrimitivePtr kPrimUnsortedSegmentSum = std::make_shared("UnsortedSegmentSum"); const PrimitivePtr kPrimConcatOffset = std::make_shared("ConcatOffset"); const PrimitivePtr kPrimReshape = std::make_shared("Reshape"); const PrimitivePtr kPrimTile = std::make_shared("Tile"); const PrimitivePtr kPrimAddN = std::make_shared("AddN"); const PrimitivePtr KPrimTransData = std::make_shared("TransData"); // Maths const PrimitivePtr kPrimTensorAdd = std::make_shared("TensorAdd"); const PrimitivePtr kPrimMatMul = std::make_shared("MatMul"); const PrimitivePtr kPrimBatchMatMul = std::make_shared("BatchMatMul"); const PrimitivePtr kPrimMaximumGrad = std::make_shared("MaximumGrad"); const PrimitivePtr kPrimMinimumGrad = std::make_shared("MinimumGrad"); const PrimitivePtr kPrimReduceMean = std::make_shared("ReduceMean"); const PrimitivePtr kPrimReduceSum = std::make_shared("ReduceSum"); const PrimitivePtr kPrimReduceAll = std::make_shared("ReduceAll"); const PrimitivePtr kPrimReduceMax = std::make_shared("ReduceMax"); const PrimitivePtr kPrimReduceMin = std::make_shared("ReduceMin"); const PrimitivePtr kPrimNeg = std::make_shared("Neg"); const PrimitivePtr kPrimSub = std::make_shared("Sub"); const PrimitivePtr kPrimMul = std::make_shared("Mul"); const PrimitivePtr kPrimMinimum = std::make_shared("Minimum"); const PrimitivePtr kPrimMaximum = std::make_shared("Maximum"); const PrimitivePtr kPrimSquare = std::make_shared("Square"); const PrimitivePtr kPrimEqual = std::make_shared("Equal"); const PrimitivePtr kPrimLess = std::make_shared("Less"); const PrimitivePtr kPrimLessEqual = std::make_shared("LessEqual"); // NN const PrimitivePtr kPrimFlatten = std::make_shared("Flatten"); const PrimitivePtr kPrimLogSoftmax = std::make_shared("LogSoftmax"); const PrimitivePtr kPrimLogSoftmaxGrad = std::make_shared("LogSoftmaxGrad"); const PrimitivePtr kPrimTanh = std::make_shared("Tanh"); const PrimitivePtr kPrimTanhGrad = std::make_shared("TanhGrad"); const PrimitivePtr kPrimPooling = std::make_shared("Pooling"); const PrimitivePtr kPrimPoolingGrad = std::make_shared("PoolingGrad"); const PrimitivePtr kPrimMaxPool = std::make_shared("MaxPool"); const PrimitivePtr kPrimMaxPoolGrad = std::make_shared("MaxPoolGrad"); const PrimitivePtr kPrimFusedBatchNorm = std::make_shared("FusedBatchNorm"); const PrimitivePtr kPrimConv2D = std::make_shared("Conv2D"); const PrimitivePtr kPrimFusedBatchNormGrad = std::make_shared("FusedBatchNormGrad"); const PrimitivePtr kPrimReluGrad = std::make_shared("ReluGrad"); const PrimitivePtr kPrimConv2DBackpropInput = std::make_shared("Conv2DBackpropInput"); const PrimitivePtr kPrimConv2DBackpropFilter = std::make_shared("Conv2DBackpropFilter"); const PrimitivePtr kPrimDepthwiseConv2dNative = std::make_shared("DepthwiseConv2dNative"); const PrimitivePtr kPrimDepthwiseConv2dNativeBackpropFilter = std::make_shared("DepthwiseConv2dNativeBackpropFilter"); const PrimitivePtr kPrimDepthwiseConv2dNativeBackpropInput = std::make_shared("DepthwiseConv2dNativeBackpropInput"); const PrimitivePtr kPrimBiasAddGrad = std::make_shared("BiasAddGrad"); const PrimitivePtr kPrimSoftmaxCrossEntropyWithLogits = std::make_shared("SoftmaxCrossEntropyWithLogits"); const PrimitivePtr kPrimSparseSoftmaxCrossEntropyWithLogits = std::make_shared("SparseSoftmaxCrossEntropyWithLogits"); const PrimitivePtr kPrimMomentum = std::make_shared("Momentum"); const PrimitivePtr kPrimApplyMomentum = std::make_shared("ApplyMomentum"); const PrimitivePtr kPrimLayerNorm = std::make_shared("LayerNorm"); const PrimitivePtr kPrimLayerNormGrad = std::make_shared("LayerNormGrad"); const PrimitivePtr kPrimLayerNormXBackprop = std::make_shared("LayerNormXBackprop"); const PrimitivePtr kPrimLayerNormBetaGammaBackprop = std::make_shared("LayerNormBetaGammaBackprop"); const PrimitivePtr kPrimDropoutGenMask = std::make_shared("DropoutGenMask"); const PrimitivePtr kPrimOneHot = std::make_shared("OneHot"); const PrimitivePtr kPrimGelu = std::make_shared("Gelu"); const PrimitivePtr kPrimGeluGrad = std::make_shared("GeluGrad"); const PrimitivePtr kPrimRelu = std::make_shared("ReLU"); const PrimitivePtr kPrimZerosLikeTensor = std::make_shared("zeros_like_tensor"); const PrimitivePtr kPrimFakeBprop = std::make_shared("fake_bprop"); // Other miscellaneous const PrimitivePtr kPrimIdentity = std::make_shared("identity"); const PrimitivePtr kPrimPartial = std::make_shared("partial"); const PrimitivePtr kPrimJ = std::make_shared("J"); const PrimitivePtr kPrimEnvSetItem = std::make_shared("env_setitem"); const PrimitivePtr kPrimEnvGetItem = std::make_shared("env_getitem"); const PrimitivePtr kPrimEnvAdd = std::make_shared("env_add"); const PrimitivePtr kPrimMakeRefKey = std::make_shared("MakeRefKey"); const PrimitivePtr kPrimGetRefKey = std::make_shared("get_ref_key"); const PrimitivePtr kPrimGetRefValue = std::make_shared("get_ref_value"); const PrimitivePtr kPrimGetRefOrigin = std::make_shared("get_ref_origin"); const PrimitivePtr kPrimInsertGradientOf = std::make_shared("InsertGradientOf"); const PrimitivePtr kPrimPrintShapeType = std::make_shared("PrintShapeType"); const PrimitivePtr kPrimSameTypeShape = std::make_shared("SameTypeShape"); const PrimitivePtr kPrimPrint = std::make_shared("Print"); const PrimitivePtr kPrimMakeRef = std::make_shared("make_ref"); const PrimitivePtr kPrimDepend = std::make_shared("depend"); const PrimitivePtr kPrimStateSetItem = std::make_shared("state_setitem"); const PrimitivePtr kPrimBroadcastGradientArgs = std::make_shared("BroadcastGradientArgs"); const PrimitivePtr kPrimControlDepend = std::make_shared("ControlDepend"); const PrimitivePtr kPrimIs_ = std::make_shared("is_"); const PrimitivePtr kPrimIsNot = std::make_shared("is_not"); const PrimitivePtr kPrimInDict = std::make_shared("in_dict"); const PrimitivePtr kPrimNotInDict = std::make_shared("not_in_dict"); // Comm ops const PrimitivePtr kPrimMirror = std::make_shared("_MirrorOperator"); const PrimitivePtr kPrimVirtualDiv = std::make_shared("_VirtualDiv"); const PrimitivePtr kPrimVirtualDataset = std::make_shared("_VirtualDataset"); const PrimitivePtr kPrimAllReduce = std::make_shared("AllReduce"); // Debug ops const PrimitivePtr kPrimScalarSummary = std::make_shared("ScalarSummary"); const PrimitivePtr kPrimImageSummary = std::make_shared("ImageSummary"); const PrimitivePtr kPrimTensorSummary = std::make_shared("TensorSummary"); const PrimitivePtr kPrimHistogramSummary = std::make_shared("HistogramSummary"); ValuePtr GetPythonOps(const std::string &op_name, const std::string &module_name) { py::object obj = parse::python_adapter::GetPyFn(module_name, op_name); ValuePtr node = nullptr; bool succ = parse::ConvertData(obj, &node); if (!succ) { MS_LOG(EXCEPTION) << "get Python op " << op_name << " from " << module_name << " fail"; } return node; } } // namespace prim } // namespace mindspore