/*
 * Copyright (c) 2022 Huawei Device 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.
 */

package ohos.hdi.nnrt.v1_0;

import ohos.hdi.nnrt.v1_0.NnrtTypes;

struct Activation
{
    enum ActivationType activationType;
    float alpha;
    float minVal;
    float maxVal;
    boolean approximate;
};

struct AddFusion
{
    enum ActivationType activationType;
};

struct ArgMaxFusion
{
    long axis;
    long topK;
    boolean keepDims;
    boolean outMaxValue;
};

struct AvgPoolFusion
{
    long[] kernelSize;
    long[] strides;
    long[] pad;
    enum PadMode padMode;
    enum RoundMode roundMode;
    enum Format format;
    boolean global;
    enum ActivationType activationType;
};

struct BatchToSpaceND
{
    long[] blockShape;
    long[][] crops;
};

struct BiasAdd
{
};

struct Cast
{
};

struct Concat
{
    long axis;
};

struct Conv2DFusion
{
    long[] kernelSize;
    long[] stride;
    long[] dilation;
    enum PadMode padMode;
    long[] padList;
    long group;
    long inChannel;
    long outChannel;
    enum ActivationType activationType;
};

struct Conv2dTransposeFusion
{
    long[] kernelSize;
    long[] stride;
    long[] dilation;
    enum PadMode padMode;
    long[] padList;
    long group;
    long inChannel;
    long outChannel;
    enum ActivationType activationType;
    long[] outputPaddings;
};

struct DivFusion
{
    enum ActivationType activationType;
};

struct Eltwise
{
    enum EltwiseMode mode;
};

struct ExpandDims
{
};

struct Fill
{
};

struct FullConnection
{
    boolean hasBias;
    boolean useAxis;
    long axis;
    enum ActivationType activationType;
};

struct FusedBatchNorm
{
    float epsilon;
};

struct Gather
{
};

struct LayerNormFusion
{
    long beginNormAxis;
    float epsilon;
    boolean elementwiseAffine;
    long beginParamsAxis;
};

struct LessEqual
{
};

struct MatMulFusion
{
    boolean transposeA;
    boolean transposeB;
    enum ActivationType activationType;
};

struct Maximum
{
};

struct MaxPoolFusion
{
    long[] kernelSize;
    long[] strides;
    long[] pad;
    enum PadMode padMode;
    enum Format format;
    boolean global;
    enum ActivationType activationType;
};

struct MulFusion
{
    enum ActivationType activationType;
};

struct OneHot
{
    long axis;
};

struct PadFusion
{
    long[][] paddings;
    enum PaddingMode paddingMode;
    float constantValue;
};

struct PowFusion
{
    float scale;
    float shift;
};

struct PReLUFusion
{
    boolean channelShared;
};

struct QuantDTypeCast
{
    long srcT;
    long dstT;
};

struct ReduceFusion
{
    boolean keepDims;
    enum ReduceMode mode;
    boolean reduceToEnd;
    float coeff;
};

struct Reshape
{
};

struct Resize
{
    enum ResizeMethod method;
    long newHeight;
    long newWidth;
    boolean preserveAspectRatio;
    enum CoordinateTransformMode coordinateTransformMode;
    float cubicCoeff;
    long excludeOutside;
    float extrapolationValue;
    enum NearestMode nearestMode;
};

struct Rsqrt
{
};

struct ScaleFusion
{
    long axis;
    enum ActivationType activationType;
};

struct Shape
{
};

struct SliceFusion
{
    long[] axes;
};

struct Softmax
{
    long[] axis;
};

struct SpaceToBatchND
{
    long[] blockShape;
    long[][] paddings;
};

struct Split
{
    long outputNum;
    long[] sizeSplits;
    long axis;
};

struct Sqrt
{
};

struct SquaredDifference
{
};

struct Squeeze
{
    long[] axis;
};

struct Stack
{
    long axis;
};

struct StridedSlice
{
    long beginMask;
    long endMask;
    long ellipsisMask;
    long newAxisMask;
    long shrinkAxisMask;
};

struct SubFusion
{
    enum ActivationType activationType;
};

struct TileFusion
{
    long[] dims;
};

struct TopKFusion
{
    boolean sorted;
    long axis;
};

struct Transpose
{
};

struct Unsqueeze
{
    long[] axis;
};