code: def test_seq2seq_tsppl_support_dataloader(self):
      # load
      tsppl_seq2seq = TSPipeline.load(
          os.path.join(self.resource_path, "tsppl_ckpt/s2s_tsppl_ckpt")
      )
      tsppl_seq2seq.fit(
          data=train_data_creator,
          validation_data=valid_data_creator,
          epochs=2,
          batch_size=128,
      )
      assert tsppl_seq2seq._best_config["batch_size"] == 128
      config = tsppl_seq2seq._best_config
      # predict
      yhat = tsppl_seq2seq.predict(valid_data_creator, batch_size=16)
      assert yhat.shape == (
          1000,
          config["future_seq_len"],
          config["input_feature_num"],
      )
      assert tsppl_seq2seq._best_config["batch_size"] == 16
      yhat = tsppl_seq2seq.predict_with_onnx(
          valid_data_creator, batch_size=64
      )
      assert yhat.shape == (
          1000,
          config["future_seq_len"],
          config["input_feature_num"],
      )
      assert tsppl_seq2seq._best_config["batch_size"] == 64
  
      # evaluate
      _, smape = tsppl_seq2seq.evaluate(
          valid_data_creator, metrics=["mse", "smape"], batch_size=16
      )
      assert tsppl_seq2seq._best_config["batch_size"] == 16
      assert smape < 100.0
      _, smape = tsppl_seq2seq.evaluate_with_onnx(
          valid_data_creator, metrics=["mse", "smape"], batch_size=64
      )
      assert tsppl_seq2seq._best_config["batch_size"] == 64
      assert smape < 100.0
  
      # evaluate with customized metrics
      from torchmetrics.functional import mean_squared_error
  
      def customized_metric(y_true, y_pred):
          return mean_squared_error(
              torch.from_numpy(y_pred), torch.from_numpy(y_true)
          ).numpy()
  
      tsppl_seq2seq.evaluate(
          valid_data_creator, metrics=[customized_metric], batch_size=16
      )
      assert tsppl_seq2seq._best_config["batch_size"] == 16
  
      with pytest.raises(RuntimeError):
          tsppl_seq2seq.predict(
              torch.randn(
                  1000,
                  config["past_seq_len"],
                  config["input_feature_num"],
              )
          )
      with pytest.raises(RuntimeError):
          tsppl_seq2seq.evaluate(
              torch.randn(
                  1000,
                  config["past_seq_len"],
                  config["input_feature_num"],
              )
          )
  
imports: import numpy
  from unittest import TestCase
  import pytest
  from bigdl.chronos.utils import LazyImport
  import os
  import pandas
  import numpy
  from bigdl.chronos.data import TSDataset
  from ..None import op_torch, op_inference
label_desc: Use image node_id 3 for calling the TestTSPipeline obj's underlying member method code with example usage: obj.test_seq2seq_tsppl_support_dataloader() and returns: mean_squared_error