Elementwise: &Elementwise [ Relu, Pow, Add, Sub, Mul, Div, Abs, Ceil, Log, Sqrt, Exp, LeakyRelu ]

GraphFusion:
  - FlashAttentionFusionPass:
      version: 1
      nodes:
          - node_1: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]
          - node_2: [ Mul ]
          - node_3: [ Softmax, SoftmaxV2 ]
          - node_4: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]

      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]
        - [ node_3, node_4 ]

  - FlashAttentionFusionPass_V2:
      version: 1
      nodes:
        - node_1: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]
        - node_2: [ Mul ]
        - node_3: [ TransData ]
        - node_4: [ Softmax, SoftmaxV2 ]
        - node_5: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]

      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]
        - [ node_3, node_4 ]
        - [ node_4, node_5 ]

  - BMMStridedSliceDGeluFusionPass:
      version: 1
      nodes:
        - node_1: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]
        - node_2: [StridedSliceD]
        - node_3: [Relu]
      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]

  - BMMConfusionTransposeDFusionPass:
      version: 1
      nodes:
        - node_1: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]
        - node_2: [ ConfusionTransposeD ]
        - node_3: [ Relu ]
      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]

  - BMMConfusionTransposeDFusionPass_V2:
      version: 1
      nodes:
        - node_1: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]
        - node_2: [ ConfusionTransposeD ]
      edges:
        - [ node_1, node_2 ]

  - Conv2DAddGroupNormFusionPass:
      version: 0
      struct: [ Conv2D, Add, GroupNorm ]

  - RMSnormAddFusionPass:
      version: 0
      struct: [ RMSnorm, Add ]

  - ConvToFullyConnectionFusionPass:
      version: 0
      struct: [ Conv ]

  - ZConcatv2dFusionPass:
      version: 0
      struct: [ ConcatV2d, ConcatV2d ]

  - BatchMatMulReduceMeanFusionPass:
      version: 1
      nodes:
        - node_1: [ BatchMatMulV2, BatchMatMul, MatMul, MatMulV2 ]
        - node_2: [ Add ]
        - node_3: [ Relu ]
        - node_4: [ ReduceMean ]
      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]
        - [ node_3, node_4 ]

  - PadDepthwiseConv2dFusionPass:
      version: 0
      struct: [ PadD, DepthwiseConv2D ]

  - ConvBatchnormFusionPass:
      version: 1
      nodes:
        - node_1: [ Conv2d, Conv3d, DepthwiseConv2d ]
        - node_2: [ Batchnorm ]

      edges:
        - [ node_1, node_2 ]

  - AConv2dMulFusion:
      version: 1
      nodes:
        - node_1: [ Conv2d, Conv3d ]
        - node_2: [ Mul ]

      edges:
        - [ node_1, node_2 ]

  - TBEConvAddFusion:
      version: 1
      nodes:
        - node_1: [ Conv2d, Conv3d ]
        - node_2: [ Add ]

      edges:
        - [ node_1, node_2 ]

  - ZBNupdateReluV2Conv2DBNreducePass:
      version: 0
      struct: [ BNTrainingUpdate, ReluV2, Conv2D, BNTrainingReduce ]

  - ASplitConv2dConcatPass:
      version: 1
      nodes:
        - node_1: [ MatMul, MatMulV2, BatchMatMul, BatchMatMulV2 ]
        - node_2: [ Cast ]

      edges:
        - [ node_1, node_2 ]

  - MatMulBiasAddFusionPass:
      version: 1
      nodes:
        - node_1: [ MatMul, MatMulV2, BatchMatMul, BatchMatMulV2 ]
        - node_2: [ BiasAdd, Add ]

      edges:
        - [ node_1, node_2 ]

  - Conv2DbpInputBiasAddFusionPass:
      version: 0
      struct: [ Conv2DBackpropInput, BiasAdd ]

  - BatchMatmulV2ReduceFusionPass:
      version: 0
      struct: [ BatchMatMulV2, ReduceSumD ]

  - BatchMatmulV2ReduceFusionPass_V2:
      version: 0
      struct: [ BatchMatMulV2, Cast, ReduceSumD ]

  - Conv3DbpInputBiasAddFusionPass:
      version: 0
      struct: [ Conv3DBackpropInputD, BiasAdd ]

  - AFullyConnectionReshapePass:
      version: 0
      struct: [ FullyConnection, Reshape ]

  - GemmTransFusionPass:
      version: 0
      struct: [ Transpose, Gemm ]

  - Resnet50DbnDwFusionPass:
      version: 0
      struct: [ BNTrainingReduceGrad, Conv2DBackpropFilterD ]

  - CastReluCastFusionPass:
      version: 0
      struct: [ Cast, Relu, Cast ]

  - PadConv2dFusionPass:
      version: 1
      nodes:
        - node_1: [ PadD, PadDV3 ]
        - node_2: [ Conv2D ]

      edges:
        - [ node_1, node_2 ]

  - Conv2DTransposeBatchnormFusionPass:
      version: 1
      nodes:
        - node_1: [ Conv2dTranspose ]
        - node_2: [ BatchNorm, BNInference ]

      edges:
        - [ node_1, node_2 ]

  - AvgPoolV2GradFusionPass:
      version: 0
      struct: [ AvgPooV2lGrad ]

  - DropOutDoMaskFusionPass:
      version: 0
      struct: [ DropOutDoMaskV3D ]

  - ConvCastFusionPass:
      version: 0
      struct: [ Conv2D, Cast ]

  - ConvCastFusionPass_V2:
      version: 0
      struct: [ Conv2D, TransData, Cast ]

  - StridedSliceConcatFusionPass:
      version: 1
      nodes:
        - node_1: [ StridedSliceD ]
        - node_2: [ StridedSliceD ]
        - node_3: [ ConcatD ]

      edges:
        - [ node_1, node_3 ]
        - [ node_2, node_3 ]

  - ConvCastFusionPass:
      version: 0
      struct: [ SplitV ]

  - AInplaceAddFusionPass:
      version: 0
      struct: [ InplaceAdd ]

  - AInplaceSubFusionPass:
      version: 0
      struct: [ InplaceSub ]

  - AInplaceUpdateFusionPass:
      version: 0
      struct: [ InplaceUpdate ]

UBFusion:
  - TbeConv3dElemwisePass:
      version: 1
      nodes:
        - node_1: [ Conv3D ]
        - node_2: *Elementwise
      edges:
        - [ node_1, node_2 ]

  - TbeConv3dDxElemwisePass:
      version: 0
      struct: [ Conv3dBackpropInput, AddN, LeakyReluGrad ]

  - TbeConv3dDxElemwisePass_V2:
      version: 0
      struct: [ Conv3dBackpropInput, LeakyReluGrad ]

  - MatMulDropoutDoMaskV3dFusionPass:
      version: 0
      struct: [ MatMul, Dropout_do_mask_v3_d, Add ]

  - BatchMatMulDropoutDoMaskV3dFusionPass:
      version: 0
      struct: [ BatchMatMul, Dropout_do_mask_v3_d, Add ]

  - MatmulReduceSumUbFusion:
      version: 0
      struct: [ BatchMatMul, ReduceSum ]

  - TbeBatchMatMulElementWiseFusionPass:
      version: 1
      nodes:
        - node_1: [ BatchMatMul, GEMM ]
        - node_2: *Elementwise

      edges:
        - [ node_1, node_2 ]

  - ATbeMatMulElemwiseFusionPass:
      version: 1
      nodes:
        - node_1: [ MatMul, GEMM ]
        - node_2: *Elementwise

      edges:
        - [ node_1, node_2 ]

  - MatmulConfusiontransposeUbFusion:
      version: 0
      struct: [ MatMul, matmul_transpose ]

  - TbeFullyconnectionElemwiseDequantFusionPass:
      version: 1
      nodes:
        - node_1: [ BatchMatMul, MatMul, FullyConnection ]
        - node_2: *Elementwise

      edges:
        - [ node_1, node_2 ]

  - BatchMatmulConfusiontransposeUbFusion:
      version: 0
      struct: [ BatchMatMul, batchmatmul_transpose ]

  - TbeConvSigmoidMulQuantFusionPass:
      version: 1
      nodes:
        - node_1: [ Conv ]
        - node_2: [ Sigmoid ]
        - node_3: [ Mul ]
        - node_4: [ Quant ]

      edges:
        - [ node_1, node_2 ]
        - [ node_1, node_3 ]
        - [ node_2, node_3 ]
        - [ node_3, node_4 ]

  - TbeConv2DReluv2Pass:
      version: 0
      struct: [ Conv2D, ReluV2 ]

  - TbeConvDoubleInFusionPass:
      version: 1
      nodes:
        - node_1: [ Conv2D ]
        - node_2: *Elementwise
        - node_3: *Elementwise
      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]

  - TbeConv2dAddClipMulDivFusionPass:
      version: 0
      struct: [ Conv2D, Add, Clip, Mul, Div ]

  - TbeConv2dAddClipMulDivFusionPass_V2:
      version: 0
      struct: [ Conv2D, Add, Clip, Mul ]

  - TbeConv2dAddRelu6MulMulFusionPass:
      version: 1
      nodes:
        - node_1: [ Conv2D, DepthwiseConv2D ]
        - node_2: [ Add ]
        - node_3: [ Relu6 ]
        - node_4: [ Mul ]
        - node_5: [ Mul ]

      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]
        - [ node_3, node_4 ]
        - [ node_4, node_5 ]

  - ConvClipByValueFusionPass:
      version: 1
      nodes:
        - node_1: [ Conv2D ]
        - node_2: *Elementwise
      edges:
        - [ node_1, node_2 ]

  - TbeAippConvReluMaxpoolingFusion:
      version: 1
      nodes:
        - node_1: [ Conv2D ]
        - node_2: *Elementwise
        - node_3: [ MaxPool, MaxPoolv3 ]

      edges:
        - [ node_1, node_2 ]
        - [ node_2, node_3 ]

  - TbeReduceElemwiseFusionPass:
      version: 1
      nodes:
        - node_1: *Elementwise
        - node_2: [ CommReduce ]
      edges:
        - [ node_1, node_2 ]

  - TbeReadSelectEltwiseFusionPass:
      version: 1
      nodes:
        - node_1: [ ReadSelect ]
        - node_2: *Elementwise

      edges:
        - [ node_1, node_2 ]

  - TbeEltwiseWriteSelectFusionPass:
      version: 1
      nodes:
        - node_1: *Elementwise
        - node_2: [ write_select ]

      edges:
        - [ node_1, node_2 ]

  - TbeEltwiseFusionPass:
      version: 1
      nodes:
        - node_1: *Elementwise
        - node_2: *Elementwise

      edges:
        - [ node_1, node_2 ]

  - TbeConvBnreduceFusionPass:
      version: 0
      struct: [ Convolution, bn_reduce ]

  - TbeBnupdateEltwiseFusionPass:
      version: 1
      nodes:
        - node_1: [ bn_update ]
        - node_2: *Elementwise
      edges:
        - [ node_1, node_2 ]

  - TbeConv2DBackpropElemwiseFusionPass:
      version: 1
      nodes:
        - node_1: [ Conv2DBackpropInputD, Conv2DTransposeD, Deconvolution ]
        - node_2: [ Add, ReluGradV2 ]

      edges:
        - [ node_1, node_2 ]

  - TbeDxElemwisePass:
      version: 1
      nodes:
        - node_1: [ Conv2DBackpropInputD, Conv2DTransposeD, Deconvolution ]
        - node_2: [ LeakyRelu, Prelu ]

      edges:
        - [ node_1, node_2 ]

  - TbeConv2dBackpropRequantFusionPass:
      version: 1
      nodes:
          - node_1: [ Conv2DBackpropInputD, Conv2DTransposeD, Deconvolution ]
          - node_2: [ AscendRequant ]

      edges:
        - [ node_1, node_2 ]

  - TbeDwTransdataFusionPass:
      version: 1
      nodes:
        - node_1: [ Transdate ]
        - node_2: [ Transdate ]
        - node_3: [ Conv2DBackpropFilter ]

      edges:
        - [ node_1, node_3 ]
        - [ node_2, node_3 ]

  - TbeDxTransdataFusionPass:
      version: 1
      nodes:
        - node_1: [ Transdate ]
        - node_2: [ Transdate ]
        - node_3: [ Conv2DBackpropInput ]

      edges:
        - [ node_1, node_3 ]
        - [ node_2, node_3 ]

  - TbeEltwiseCastFusionPass:
      version: 1
      nodes:
        - node_1: [ Relu, Add, Mul, Sqrt ]
        - node_2: [ Cast ]

      edges:
        - [ node_1, node_2 ]

  - TbeEltwiseCastFusionPass_V2:
      version: 1
      nodes:
        - node_1: [ Cast ]
        - node_2: [ Relu, Add, Mul, Sqrt ]


      edges:
        - [ node_1, node_2 ]

  - TbeConv2DBackpropDequantFusionPass:
      version: 1
      nodes:
          - node_1: [ Conv2DBackpropInputD, Conv2DTransposeD, Deconvolution ]
          - node_2: [ AscendDequant ]


      edges:
        - [ node_1, node_2 ]