class_docstr: Autoformer decoder layer with the progressive decomposition architecture
class_docstr_tok: ["Autoformer","decoder","layer","with","the","progressive","decomposition","architecture"]
code: def forward(self, x, cross, x_mask=None, cross_mask=None):
      x = x + self.dropout(
          self.self_attention(x, x, x, attn_mask=x_mask)[0]
      )
      x, trend1 = self.decomp1(x)
      x = x + self.dropout(
          self.cross_attention(x, cross, cross, attn_mask=cross_mask)[0]
      )
      x, trend2 = self.decomp2(x)
      y = x
      y = self.dropout(self.activation(self.conv1(y.transpose(-1, 1))))
      y = self.dropout(self.conv2(y).transpose(-1, 1))
      x, trend3 = self.decomp3(x + y)
  
      residual_trend = trend1 + trend2 + trend3
      residual_trend = self.projection(
          residual_trend.permute(0, 2, 1)
      ).transpose(1, 2)
      return x, residual_trend
  
file_path: merlion/merlion/models/utils/nn_modules/enc_dec_autoformer.py
imports: from merlion.models.utils.nn_modules.blocks import SeriesDecomposeBlock, MovingAverageBlock
label_desc: Use image node_id 2 for calling the DecoderLayer obj's underlying member method code with example usage: obj.forward(x, cross, x_mask, cross_mask) and returns: x,  residual_trend