MLBEDSW-3148: Refactor Operation

- op.type is now an enum instead of a string
- Removed unused operator codes
- Refactored some attributes like npu_block_type, fused_activation_function
- Refactored operator index calculation
- Refactored a number of operator sets

Change-Id: I641f65ee375794b7aec42abc0664251ae37d78e8
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
diff --git a/ethosu/vela/tflite_mapping.py b/ethosu/vela/tflite_mapping.py
index c25f415..8a53039 100644
--- a/ethosu/vela/tflite_mapping.py
+++ b/ethosu/vela/tflite_mapping.py
@@ -22,6 +22,8 @@
 import numpy as np
 
 from .data_type import DataType
+from .operation import CustomType
+from .operation import Op
 from .tflite import AbsOptions
 from .tflite import AddNOptions
 from .tflite import AddOptions
@@ -396,16 +398,16 @@
         attrs["custom_options_format"] = op_data.CustomOptionsFormat()
 
         if np.array_equal(custom_options, self.CUSTOM_OPTIONS_NPU_OP):
-            attrs["custom_type"] = "ExistingNpuOp"
+            attrs["custom_type"] = CustomType.ExistingNpuOp
 
         return attrs
 
     def serialize(self, builder, attrs):
-        custom_type = attrs.get("custom_type", "")
+        custom_type = attrs.get("custom_type", CustomType.ThirdPartyOp)
         self.custom_opt_format = attrs.get("custom_options_format", self.CUSTOM_OPTIONS_FORMAT_DEFAULT)
 
         # Set NPU op custom options for the TensorFlow Lite custom operator
-        if custom_type == "NpuOp":
+        if custom_type == CustomType.NpuOp:
             custom_options = self.CUSTOM_OPTIONS_NPU_OP
         else:
             custom_options = attrs.get("custom_options", [])
@@ -426,11 +428,11 @@
 
 activation_function_map = {
     ActivationFunctionType.NONE: None,
-    ActivationFunctionType.RELU: "Relu",
-    ActivationFunctionType.RELU_N1_TO_1: "ReluN1To1",
-    ActivationFunctionType.RELU6: "Relu6",
-    ActivationFunctionType.TANH: "Tanh",
-    ActivationFunctionType.SIGN_BIT: "SignBit",
+    ActivationFunctionType.RELU: Op.Relu,
+    ActivationFunctionType.RELU_N1_TO_1: Op.ReluN1To1,
+    ActivationFunctionType.RELU6: Op.Relu6,
+    ActivationFunctionType.TANH: Op.Tanh,
+    ActivationFunctionType.SIGN_BIT: Op.SignBit,
 }
 
 activation_function_inv_map = inverse_map(activation_function_map)
@@ -478,52 +480,50 @@
 
 is_int_vec = True
 
-custom_prefix = "Custom_"
-
 builtin_operator_map = {
-    BuiltinOperator.ADD: ("AddAct", OptionsSerializer("AddOptions", (fused_act, "pot_scale_int16"))),
-    BuiltinOperator.AVERAGE_POOL_2D: ("AvgPoolAct", pool2d_opts),
-    BuiltinOperator.CONCATENATION: ("ConcatTFLite", OptionsSerializer("ConcatenationOptions", ("axis", fused_act))),
-    BuiltinOperator.CONV_2D: ("Conv2DBiasAct", conv2d_opts),
-    BuiltinOperator.DEPTHWISE_CONV_2D: ("DepthwiseConv2dBiasAct", depthwise_opts),
-    BuiltinOperator.DEPTH_TO_SPACE: ("DepthToSpace", OptionsSerializer("DepthToSpaceOptions", ("block_size",))),
-    BuiltinOperator.DEQUANTIZE: ("Dequantize", OptionsSerializer("DequantizeOptions")),
-    BuiltinOperator.EMBEDDING_LOOKUP: ("EmbeddingLookup", None),
-    BuiltinOperator.FLOOR: ("Floor", None),
+    BuiltinOperator.ADD: (Op.Add, OptionsSerializer("AddOptions", (fused_act, "pot_scale_int16"))),
+    BuiltinOperator.AVERAGE_POOL_2D: (Op.AvgPool, pool2d_opts),
+    BuiltinOperator.CONCATENATION: (Op.ConcatTFLite, OptionsSerializer("ConcatenationOptions", ("axis", fused_act))),
+    BuiltinOperator.CONV_2D: (Op.Conv2DBias, conv2d_opts),
+    BuiltinOperator.DEPTHWISE_CONV_2D: (Op.DepthwiseConv2DBias, depthwise_opts),
+    BuiltinOperator.DEPTH_TO_SPACE: (Op.DepthToSpace, OptionsSerializer("DepthToSpaceOptions", ("block_size",))),
+    BuiltinOperator.DEQUANTIZE: (Op.Dequantize, OptionsSerializer("DequantizeOptions")),
+    BuiltinOperator.EMBEDDING_LOOKUP: (Op.EmbeddingLookup, None),
+    BuiltinOperator.FLOOR: (Op.Floor, None),
     BuiltinOperator.FULLY_CONNECTED: (
-        "FullyConnectedAct",
+        Op.FullyConnected,
         OptionsSerializer("FullyConnectedOptions", (fused_act, "weights_format", "asymmetric_quantize_inputs")),
     ),
-    BuiltinOperator.HASHTABLE_LOOKUP: ("HashtableLookup", None),
-    BuiltinOperator.L2_NORMALIZATION: ("L2NormAct", OptionsSerializer("L2NormOptions", (fused_act,))),
-    BuiltinOperator.L2_POOL_2D: ("L2Pool2D", pool2d_opts),
+    BuiltinOperator.HASHTABLE_LOOKUP: (Op.HashtableLookup, None),
+    BuiltinOperator.L2_NORMALIZATION: (Op.L2Norm, OptionsSerializer("L2NormOptions", (fused_act,))),
+    BuiltinOperator.L2_POOL_2D: (Op.L2Pool2D, pool2d_opts),
     BuiltinOperator.LOCAL_RESPONSE_NORMALIZATION: (
-        "LRN",
+        Op.LRN,
         OptionsSerializer("LocalResponseNormalizationOptions", ("radius", "bias", "alpha", "beta")),
     ),
-    BuiltinOperator.LOGISTIC: ("Sigmoid", None),
-    BuiltinOperator.LSH_PROJECTION: ("LSHProjection", OptionsSerializer("LSHProjectionOptions", ("type",))),
-    BuiltinOperator.LSTM: ("LstmAct", lstm_opts),
-    BuiltinOperator.MAX_POOL_2D: ("MaxPool", pool2d_opts),
-    BuiltinOperator.MUL: ("MulAct", OptionsSerializer("MulOptions", (fused_act,))),
-    BuiltinOperator.RELU: ("Relu", None),
-    BuiltinOperator.RELU_N1_TO_1: ("ReluN1To1", None),
-    BuiltinOperator.RELU6: ("Relu6", None),
-    BuiltinOperator.RESHAPE: ("Reshape", OptionsSerializer("ReshapeOptions", (("new_shape", is_int_vec),))),
+    BuiltinOperator.LOGISTIC: (Op.Sigmoid, None),
+    BuiltinOperator.LSH_PROJECTION: (Op.LSHProjection, OptionsSerializer("LSHProjectionOptions", ("type",))),
+    BuiltinOperator.LSTM: (Op.Lstm, lstm_opts),
+    BuiltinOperator.MAX_POOL_2D: (Op.MaxPool, pool2d_opts),
+    BuiltinOperator.MUL: (Op.Mul, OptionsSerializer("MulOptions", (fused_act,))),
+    BuiltinOperator.RELU: (Op.Relu, None),
+    BuiltinOperator.RELU_N1_TO_1: (Op.ReluN1To1, None),
+    BuiltinOperator.RELU6: (Op.Relu6, None),
+    BuiltinOperator.RESHAPE: (Op.Reshape, OptionsSerializer("ReshapeOptions", (("new_shape", is_int_vec),))),
     BuiltinOperator.RESIZE_BILINEAR: (
-        "ResizeBilinear",
+        Op.ResizeBilinear,
         OptionsSerializer("ResizeBilinearOptions", ("align_corners", "half_pixel_centers")),
     ),
-    BuiltinOperator.RNN: ("RnnAct", rnn_opts),
-    BuiltinOperator.SOFTMAX: ("Softmax", OptionsSerializer("SoftmaxOptions", ("beta",))),
-    BuiltinOperator.SPACE_TO_DEPTH: ("SpaceToDepth", OptionsSerializer("SpaceToDepthOptions", ("block_size",))),
+    BuiltinOperator.RNN: (Op.Rnn, rnn_opts),
+    BuiltinOperator.SOFTMAX: (Op.Softmax, OptionsSerializer("SoftmaxOptions", ("beta",))),
+    BuiltinOperator.SPACE_TO_DEPTH: (Op.SpaceToDepth, OptionsSerializer("SpaceToDepthOptions", ("block_size",))),
     BuiltinOperator.SVDF: (
-        "SvdfAct",
+        Op.Svdf,
         OptionsSerializer("SVDFOptions", ("rank", fused_act, "asymmetric_quantize_inputs")),
     ),
-    BuiltinOperator.TANH: ("Tanh", None),
+    BuiltinOperator.TANH: (Op.Tanh, None),
     BuiltinOperator.CONCAT_EMBEDDINGS: (
-        "ConcatEmbeddings",
+        Op.ConcatEmbeddings,
         OptionsSerializer(
             "ConcatEmbeddingsOptions",
             (
@@ -538,40 +538,40 @@
         ),
     ),
     BuiltinOperator.SKIP_GRAM: (
-        "SkipGram",
+        Op.SkipGram,
         OptionsSerializer("SkipGramOptions", ("ngram_size", "max_skip_size", "include_all_ngrams")),
     ),
-    BuiltinOperator.CALL: ("Call", OptionsSerializer("CallOptions", ("subgraph",))),
+    BuiltinOperator.CALL: (Op.Call, OptionsSerializer("CallOptions", ("subgraph",))),
     BuiltinOperator.EMBEDDING_LOOKUP_SPARSE: (
-        "EmbeddingLookupSparse",
+        Op.EmbeddingLookupSparse,
         OptionsSerializer("EmbeddingLookupSparseOptions", ("combiner",)),
     ),
-    BuiltinOperator.PAD: ("Pad", OptionsSerializer("PadOptions")),
-    BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_RNN: ("UnidirectionalSequenceRnnAct", seq_rnn_opts),
-    BuiltinOperator.GATHER: ("GatherV2", OptionsSerializer("GatherOptions", ("axis",))),
-    BuiltinOperator.BATCH_TO_SPACE_ND: ("BatchToSpaceND", OptionsSerializer("BatchToSpaceNDOptions")),
-    BuiltinOperator.SPACE_TO_BATCH_ND: ("SpaceToBatchND", OptionsSerializer("SpaceToBatchNDOptions")),
-    BuiltinOperator.TRANSPOSE: ("Transpose", OptionsSerializer("TransposeOptions")),
-    BuiltinOperator.MEAN: ("Mean", None),
-    BuiltinOperator.SUB: ("SubAct", OptionsSerializer("SubOptions", (fused_act, "pot_scale_int16",))),
-    BuiltinOperator.DIV: ("DivAct", OptionsSerializer("DivOptions", (fused_act,))),
-    BuiltinOperator.SQUEEZE: ("Squeeze", OptionsSerializer("SqueezeOptions", (("squeeze_dims", is_int_vec),))),
-    BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_LSTM: ("UnidirectionalSequenceLstmAct", unidir_seq_lstm_opts),
+    BuiltinOperator.PAD: (Op.Pad, OptionsSerializer("PadOptions")),
+    BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_RNN: (Op.UnidirectionalSequenceRnn, seq_rnn_opts),
+    BuiltinOperator.GATHER: (Op.GatherV2, OptionsSerializer("GatherOptions", ("axis",))),
+    BuiltinOperator.BATCH_TO_SPACE_ND: (Op.BatchToSpaceND, OptionsSerializer("BatchToSpaceNDOptions")),
+    BuiltinOperator.SPACE_TO_BATCH_ND: (Op.SpaceToBatchND, OptionsSerializer("SpaceToBatchNDOptions")),
+    BuiltinOperator.TRANSPOSE: (Op.Transpose, OptionsSerializer("TransposeOptions")),
+    BuiltinOperator.MEAN: (Op.Mean, None),
+    BuiltinOperator.SUB: (Op.Sub, OptionsSerializer("SubOptions", (fused_act, "pot_scale_int16",))),
+    BuiltinOperator.DIV: (Op.Div, OptionsSerializer("DivOptions", (fused_act,))),
+    BuiltinOperator.SQUEEZE: (Op.Squeeze, OptionsSerializer("SqueezeOptions", (("squeeze_dims", is_int_vec),))),
+    BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_LSTM: (Op.UnidirectionalSequenceLstm, unidir_seq_lstm_opts),
     BuiltinOperator.STRIDED_SLICE: (
-        "StridedSlice",
+        Op.StridedSlice,
         OptionsSerializer(
             "StridedSliceOptions", ("begin_mask", "end_mask", "ellipsis_mask", "new_axis_mask", "shrink_axis_mask")
         ),
     ),
-    BuiltinOperator.BIDIRECTIONAL_SEQUENCE_RNN: ("BidirectionalSequenceRnnAct", bidir_seq_rnn_opts),
-    BuiltinOperator.EXP: ("Exp", OptionsSerializer("ExpOptions")),
-    BuiltinOperator.TOPK_V2: ("TopKV2", OptionsSerializer("TopKV2Options")),
-    BuiltinOperator.SPLIT: ("Split", OptionsSerializer("SplitOptions", ("num_splits",))),
-    BuiltinOperator.LOG_SOFTMAX: ("LogSoftmax", OptionsSerializer("LogSoftmaxOptions")),
-    BuiltinOperator.DELEGATE: ("Delegate", None),
-    BuiltinOperator.BIDIRECTIONAL_SEQUENCE_LSTM: ("BidirectionalSequenceLstmAct", bidir_seq_lstm_opts),
+    BuiltinOperator.BIDIRECTIONAL_SEQUENCE_RNN: (Op.BidirectionalSequenceRnn, bidir_seq_rnn_opts),
+    BuiltinOperator.EXP: (Op.Exp, OptionsSerializer("ExpOptions")),
+    BuiltinOperator.TOPK_V2: (Op.TopKV2, OptionsSerializer("TopKV2Options")),
+    BuiltinOperator.SPLIT: (Op.Split, OptionsSerializer("SplitOptions", ("num_splits",))),
+    BuiltinOperator.LOG_SOFTMAX: (Op.LogSoftmax, OptionsSerializer("LogSoftmaxOptions")),
+    BuiltinOperator.DELEGATE: (Op.Delegate, None),
+    BuiltinOperator.BIDIRECTIONAL_SEQUENCE_LSTM: (Op.BidirectionalSequenceLstm, bidir_seq_lstm_opts),
     BuiltinOperator.CAST: (
-        "Cast",
+        Op.Cast,
         OptionsSerializer(
             "CastOptions",
             (
@@ -580,109 +580,112 @@
             ),
         ),
     ),
-    BuiltinOperator.PRELU: ("Prelu", None),
-    BuiltinOperator.MAXIMUM: ("Maximum", OptionsSerializer("MaximumMinimumOptions")),
+    BuiltinOperator.PRELU: (Op.Prelu, None),
+    BuiltinOperator.MAXIMUM: (Op.Maximum, OptionsSerializer("MaximumMinimumOptions")),
     BuiltinOperator.ARG_MAX: (
-        "ArgMax",
+        Op.ArgMax,
         OptionsSerializer("ArgMaxOptions", (("output_type", datatype_deserialize, datatype_serialize),)),
     ),
-    BuiltinOperator.MINIMUM: ("Minimum", OptionsSerializer("MaximumMinimumOptions")),
-    BuiltinOperator.LESS: ("Less", OptionsSerializer("LessOptions")),
-    BuiltinOperator.NEG: ("Neg", OptionsSerializer("NegOptions")),
-    BuiltinOperator.PADV2: ("PadV2", OptionsSerializer("PadV2Options")),
-    BuiltinOperator.GREATER: ("Greater", OptionsSerializer("GreaterOptions")),
-    BuiltinOperator.GREATER_EQUAL: ("GreaterEqual", OptionsSerializer("GreaterEqualOptions")),
-    BuiltinOperator.LESS_EQUAL: ("LessEqual", OptionsSerializer("LessEqualOptions")),
-    BuiltinOperator.SELECT: ("Select", OptionsSerializer("SelectOptions")),
-    BuiltinOperator.SLICE: ("Slice", OptionsSerializer("SliceOptions")),
-    BuiltinOperator.SIN: ("Sin", None),
+    BuiltinOperator.MINIMUM: (Op.Minimum, OptionsSerializer("MaximumMinimumOptions")),
+    BuiltinOperator.LESS: (Op.Less, OptionsSerializer("LessOptions")),
+    BuiltinOperator.NEG: (Op.Neg, OptionsSerializer("NegOptions")),
+    BuiltinOperator.PADV2: (Op.PadV2, OptionsSerializer("PadV2Options")),
+    BuiltinOperator.GREATER: (Op.Greater, OptionsSerializer("GreaterOptions")),
+    BuiltinOperator.GREATER_EQUAL: (Op.GreaterEqual, OptionsSerializer("GreaterEqualOptions")),
+    BuiltinOperator.LESS_EQUAL: (Op.LessEqual, OptionsSerializer("LessEqualOptions")),
+    BuiltinOperator.SELECT: (Op.Select, OptionsSerializer("SelectOptions")),
+    BuiltinOperator.SLICE: (Op.Slice, OptionsSerializer("SliceOptions")),
+    BuiltinOperator.SIN: (Op.Sin, None),
     BuiltinOperator.TRANSPOSE_CONV: (
-        "Conv2DBackpropInput",
+        Op.Conv2DBackpropInput,
         OptionsSerializer("TransposeConvOptions", (padding, "stride_w", "stride_h")),
     ),
     BuiltinOperator.SPARSE_TO_DENSE: (
-        "SparseToDense",
+        Op.SparseToDense,
         OptionsSerializer("SparseToDenseOptions", ("validate_indices",)),
     ),
-    BuiltinOperator.TILE: ("Tile", OptionsSerializer("TileOptions")),
-    BuiltinOperator.EXPAND_DIMS: ("ExpandDims", OptionsSerializer("ExpandDimsOptions")),
-    BuiltinOperator.EQUAL: ("Equal", OptionsSerializer("EqualOptions")),
-    BuiltinOperator.NOT_EQUAL: ("NotEqual", OptionsSerializer("NotEqualOptions")),
-    BuiltinOperator.LOG: ("Log", None),
-    BuiltinOperator.SUM: ("Sum", None),
-    BuiltinOperator.SQRT: ("Sqrt", None),
-    BuiltinOperator.RSQRT: ("Rsqrt", None),
+    BuiltinOperator.TILE: (Op.Tile, OptionsSerializer("TileOptions")),
+    BuiltinOperator.EXPAND_DIMS: (Op.ExpandDims, OptionsSerializer("ExpandDimsOptions")),
+    BuiltinOperator.EQUAL: (Op.Equal, OptionsSerializer("EqualOptions")),
+    BuiltinOperator.NOT_EQUAL: (Op.NotEqual, OptionsSerializer("NotEqualOptions")),
+    BuiltinOperator.LOG: (Op.Log, None),
+    BuiltinOperator.SUM: (Op.Sum, None),
+    BuiltinOperator.SQRT: (Op.Sqrt, None),
+    BuiltinOperator.RSQRT: (Op.Rsqrt, None),
     BuiltinOperator.SHAPE: (
-        "Shape",
+        Op.Shape,
         OptionsSerializer("ShapeOptions", (("out_type", datatype_deserialize, datatype_serialize),)),
     ),
-    BuiltinOperator.POW: ("Pow", OptionsSerializer("PowOptions")),
+    BuiltinOperator.POW: (Op.Pow, OptionsSerializer("PowOptions")),
     BuiltinOperator.ARG_MIN: (
-        "ArgMin",
+        Op.ArgMin,
         OptionsSerializer("ArgMinOptions", (("output_type", datatype_deserialize, datatype_serialize),)),
     ),
     BuiltinOperator.FAKE_QUANT: (
-        "FakeQuantWithMinMaxArgs",
+        Op.FakeQuantWithMinMaxArgs,
         OptionsSerializer("FakeQuantOptions", ("min", "max", "num_bits", "narrow_range")),
     ),
-    BuiltinOperator.REDUCE_PROD: ("Prod", reducer_opts),
-    BuiltinOperator.REDUCE_MAX: ("Max", reducer_opts),
-    BuiltinOperator.PACK: ("Pack", OptionsSerializer("PackOptions", ("values_count", "axis"))),
-    BuiltinOperator.LOGICAL_OR: ("LogicalOr", OptionsSerializer("LogicalOrOptions")),
-    BuiltinOperator.ONE_HOT: ("OneHot", OptionsSerializer("OneHotOptions", ("axis",))),
-    BuiltinOperator.LOGICAL_AND: ("LogicalAnd", OptionsSerializer("LogicalAndOptions")),
-    BuiltinOperator.LOGICAL_NOT: ("LogicalNot", OptionsSerializer("LogicalNotOptions")),
-    BuiltinOperator.UNPACK: ("Unpack", OptionsSerializer("UnpackOptions", ("num", "axis"))),
-    BuiltinOperator.REDUCE_MIN: ("Min", reducer_opts),
-    BuiltinOperator.FLOOR_DIV: ("FloorDiv", OptionsSerializer("FloorDivOptions")),
-    BuiltinOperator.REDUCE_ANY: ("Any", reducer_opts),
-    BuiltinOperator.SQUARE: ("Square", OptionsSerializer("SquareOptions")),
-    BuiltinOperator.ZEROS_LIKE: ("ZerosLike", OptionsSerializer("ZerosLikeOptions")),
-    BuiltinOperator.FILL: ("Fill", OptionsSerializer("FillOptions")),
-    BuiltinOperator.FLOOR_MOD: ("FloorMod", OptionsSerializer("FloorModOptions")),
-    BuiltinOperator.RANGE: ("Range", OptionsSerializer("RangeOptions")),
+    BuiltinOperator.REDUCE_PROD: (Op.Prod, reducer_opts),
+    BuiltinOperator.REDUCE_MAX: (Op.Max, reducer_opts),
+    BuiltinOperator.PACK: (Op.Pack, OptionsSerializer("PackOptions", ("values_count", "axis"))),
+    BuiltinOperator.LOGICAL_OR: (Op.LogicalOr, OptionsSerializer("LogicalOrOptions")),
+    BuiltinOperator.ONE_HOT: (Op.OneHot, OptionsSerializer("OneHotOptions", ("axis",))),
+    BuiltinOperator.LOGICAL_AND: (Op.LogicalAnd, OptionsSerializer("LogicalAndOptions")),
+    BuiltinOperator.LOGICAL_NOT: (Op.LogicalNot, OptionsSerializer("LogicalNotOptions")),
+    BuiltinOperator.UNPACK: (Op.Unpack, OptionsSerializer("UnpackOptions", ("num", "axis"))),
+    BuiltinOperator.REDUCE_MIN: (Op.Min, reducer_opts),
+    BuiltinOperator.FLOOR_DIV: (Op.FloorDiv, OptionsSerializer("FloorDivOptions")),
+    BuiltinOperator.REDUCE_ANY: (Op.Any, reducer_opts),
+    BuiltinOperator.SQUARE: (Op.Square, OptionsSerializer("SquareOptions")),
+    BuiltinOperator.ZEROS_LIKE: (Op.ZerosLike, OptionsSerializer("ZerosLikeOptions")),
+    BuiltinOperator.FILL: (Op.Fill, OptionsSerializer("FillOptions")),
+    BuiltinOperator.FLOOR_MOD: (Op.FloorMod, OptionsSerializer("FloorModOptions")),
+    BuiltinOperator.RANGE: (Op.Range, OptionsSerializer("RangeOptions")),
     BuiltinOperator.RESIZE_NEAREST_NEIGHBOR: (
-        "ResizeNearestNeighbor",
+        Op.ResizeNearestNeighbor,
         OptionsSerializer("ResizeNearestNeighborOptions", ("align_corners", "half_pixel_centers")),
     ),
-    BuiltinOperator.LEAKY_RELU: ("LeakyRelu", OptionsSerializer("LeakyReluOptions", ("alpha",))),
-    BuiltinOperator.SQUARED_DIFFERENCE: ("SquaredDifference", OptionsSerializer("SquaredDifferenceOptions")),
-    BuiltinOperator.MIRROR_PAD: ("MirrorPad", OptionsSerializer("MirrorPadOptions", ("mode",))),
-    BuiltinOperator.ABS: ("Abs", OptionsSerializer("AbsOptions")),
-    BuiltinOperator.SPLIT_V: ("SplitV", OptionsSerializer("SplitVOptions", ("num_splits",))),
+    BuiltinOperator.LEAKY_RELU: (Op.LeakyRelu, OptionsSerializer("LeakyReluOptions", ("alpha",))),
+    BuiltinOperator.SQUARED_DIFFERENCE: (Op.SquaredDifference, OptionsSerializer("SquaredDifferenceOptions")),
+    BuiltinOperator.MIRROR_PAD: (Op.MirrorPad, OptionsSerializer("MirrorPadOptions", ("mode",))),
+    BuiltinOperator.ABS: (Op.Abs, OptionsSerializer("AbsOptions")),
+    BuiltinOperator.SPLIT_V: (Op.SplitV, OptionsSerializer("SplitVOptions", ("num_splits",))),
     BuiltinOperator.UNIQUE: (
-        "Unique",
+        Op.Unique,
         OptionsSerializer("UniqueOptions", (("idx_out_type", datatype_deserialize, datatype_serialize),)),
     ),
-    BuiltinOperator.CEIL: ("Ceil", None),
-    BuiltinOperator.REVERSE_V2: ("ReverseV2", OptionsSerializer("ReverseV2Options")),
-    BuiltinOperator.ADD_N: ("AddN", OptionsSerializer("AddNOptions")),
-    BuiltinOperator.GATHER_ND: ("GatherNd", OptionsSerializer("GatherNdOptions")),
-    BuiltinOperator.COS: ("Cos", OptionsSerializer("CosOptions")),
-    BuiltinOperator.WHERE: ("Where", OptionsSerializer("WhereOptions")),
-    BuiltinOperator.RANK: ("Rank", OptionsSerializer("RankOptions")),
-    BuiltinOperator.ELU: ("Elu", None),
+    BuiltinOperator.CEIL: (Op.Ceil, None),
+    BuiltinOperator.REVERSE_V2: (Op.ReverseV2, OptionsSerializer("ReverseV2Options")),
+    BuiltinOperator.ADD_N: (Op.AddN, OptionsSerializer("AddNOptions")),
+    BuiltinOperator.GATHER_ND: (Op.GatherNd, OptionsSerializer("GatherNdOptions")),
+    BuiltinOperator.COS: (Op.Cos, OptionsSerializer("CosOptions")),
+    BuiltinOperator.WHERE: (Op.Where, OptionsSerializer("WhereOptions")),
+    BuiltinOperator.RANK: (Op.Rank, OptionsSerializer("RankOptions")),
+    BuiltinOperator.ELU: (Op.Elu, None),
     BuiltinOperator.REVERSE_SEQUENCE: (
-        "ReverseSequence",
+        Op.ReverseSequence,
         OptionsSerializer("ReverseSequenceOptions", ("seq_dim", "batch_dim")),
     ),
-    BuiltinOperator.MATRIX_DIAG: ("MatrixDiag", OptionsSerializer("MatrixDiagOptions")),
-    BuiltinOperator.QUANTIZE: ("Quantize", OptionsSerializer("QuantizeOptions")),
-    BuiltinOperator.MATRIX_SET_DIAG: ("MatrixSetDiag", OptionsSerializer("MatrixSetDiagOptions")),
-    BuiltinOperator.ROUND: ("Round", None),
-    BuiltinOperator.HARD_SWISH: ("HardSwish", OptionsSerializer("HardSwishOptions")),
-    BuiltinOperator.IF: ("If", OptionsSerializer("IfOptions", ("then_subgraph_index", "else_subgraph_index"))),
-    BuiltinOperator.WHILE: ("While", OptionsSerializer("WhileOptions", ("cond_subgraph_index", "body_subgraph_index"))),
-    BuiltinOperator.NON_MAX_SUPPRESSION_V4: ("NonMaxSuppressionV4", OptionsSerializer("NonMaxSuppressionV4Options")),
-    BuiltinOperator.NON_MAX_SUPPRESSION_V5: ("NonMaxSuppressionV5", OptionsSerializer("NonMaxSuppressionV5Options")),
-    BuiltinOperator.SCATTER_ND: ("ScatterNd", OptionsSerializer("ScatterNdOptions")),
-    BuiltinOperator.SELECT_V2: ("SelectV2", OptionsSerializer("SelectV2Options")),
-    BuiltinOperator.DENSIFY: ("Densify", OptionsSerializer("DensifyOptions")),
-    BuiltinOperator.SEGMENT_SUM: ("SegmentSum", OptionsSerializer("SegmentSumOptions")),
-    BuiltinOperator.BATCH_MATMUL: ("BatchMatMul", OptionsSerializer("BatchMatMulOptions", ("adj_x", "adj_y"))),
-    BuiltinOperator.CUSTOM: (custom_prefix, CustomOptionsSerializer()),
+    BuiltinOperator.MATRIX_DIAG: (Op.MatrixDiag, OptionsSerializer("MatrixDiagOptions")),
+    BuiltinOperator.QUANTIZE: (Op.Quantize, OptionsSerializer("QuantizeOptions")),
+    BuiltinOperator.MATRIX_SET_DIAG: (Op.MatrixSetDiag, OptionsSerializer("MatrixSetDiagOptions")),
+    BuiltinOperator.ROUND: (Op.Round, None),
+    BuiltinOperator.HARD_SWISH: (Op.HardSwish, OptionsSerializer("HardSwishOptions")),
+    BuiltinOperator.IF: (Op.If, OptionsSerializer("IfOptions", ("then_subgraph_index", "else_subgraph_index"))),
+    BuiltinOperator.WHILE: (
+        Op.While,
+        OptionsSerializer("WhileOptions", ("cond_subgraph_index", "body_subgraph_index")),
+    ),
+    BuiltinOperator.NON_MAX_SUPPRESSION_V4: (Op.NonMaxSuppressionV4, OptionsSerializer("NonMaxSuppressionV4Options")),
+    BuiltinOperator.NON_MAX_SUPPRESSION_V5: (Op.NonMaxSuppressionV5, OptionsSerializer("NonMaxSuppressionV5Options")),
+    BuiltinOperator.SCATTER_ND: (Op.ScatterNd, OptionsSerializer("ScatterNdOptions")),
+    BuiltinOperator.SELECT_V2: (Op.SelectV2, OptionsSerializer("SelectV2Options")),
+    BuiltinOperator.DENSIFY: (Op.Densify, OptionsSerializer("DensifyOptions")),
+    BuiltinOperator.SEGMENT_SUM: (Op.SegmentSum, OptionsSerializer("SegmentSumOptions")),
+    BuiltinOperator.BATCH_MATMUL: (Op.BatchMatMul, OptionsSerializer("BatchMatMulOptions", ("adj_x", "adj_y"))),
+    BuiltinOperator.CUSTOM: (Op.Custom, CustomOptionsSerializer()),
 }
 
 builtin_operator_inv_map = {v[0]: (k, v[1]) for k, v in builtin_operator_map.items()}
 
-builtin_operator_inv_map["NpuOp"] = (BuiltinOperator.CUSTOM, CustomOptionsSerializer())
+builtin_operator_inv_map[Op.CustomNpuOp] = (BuiltinOperator.CUSTOM, CustomOptionsSerializer())