code: def test_multi_dim_transformation(is_train):
      train_length = 10
  
      first_dim: list = list(np.arange(1, 11, 1))
      first_dim[-1] = "NaN"
  
      second_dim: list = list(np.arange(11, 21, 1))
      second_dim[0] = "NaN"
  
      ds = gluonts.dataset.common.ListDataset(
          data_iter=[
              {"start": "2012-01-01", "target": [first_dim, second_dim]}
          ],
          freq="1D",
          one_dim_target=False,
      )
      pred_length = 2
  
      # Looks weird - but this is necessary to assert the nan entries correctly.
      first_dim[-1] = np.nan
      second_dim[0] = np.nan
  
      t = transform.Chain(
          [
              transform.AddTimeFeatures(
                  start_field=FieldName.START,
                  target_field=FieldName.TARGET,
                  output_field="time_feat",
                  time_features=[
                      time_feature.day_of_week,
                      time_feature.day_of_month,
                      time_feature.month_of_year,
                  ],
                  pred_length=pred_length,
              ),
              transform.AddAgeFeature(
                  target_field=FieldName.TARGET,
                  output_field="age",
                  pred_length=pred_length,
                  log_scale=True,
              ),
              transform.AddObservedValuesIndicator(
                  target_field=FieldName.TARGET,
                  output_field="observed_values",
                  imputation_method=None,
              ),
              transform.VstackFeatures(
                  output_field="dynamic_feat",
                  input_fields=["age", "time_feat"],
                  drop_inputs=True,
              ),
              transform.InstanceSplitter(
                  target_field=FieldName.TARGET,
                  is_pad_field=FieldName.IS_PAD,
                  start_field=FieldName.START,
                  forecast_start_field=FieldName.FORECAST_START,
                  instance_sampler=(
                      transform.ExpectedNumInstanceSampler(
                          num_instances=4, min_future=pred_length
                      )
                      if is_train
                      else transform.TestSplitSampler()
                  ),
                  past_length=train_length,
                  future_length=pred_length,
                  time_series_fields=[
                      "dynamic_feat",
                      "observed_values",
                  ],
                  output_NTC=False,
              ),
          ]
      )
  
      assert_serializable(t)
  
      if is_train:
          for u in t(iter(ds), is_train=True):
              assert_shape(u["past_target"], (2, 10))
              assert_shape(u["past_dynamic_feat"], (4, 10))
              assert_shape(u["past_observed_values"], (2, 10))
              assert_shape(u["future_target"], (2, 2))
  
              assert_padded_array(
                  u["past_observed_values"],
                  np.array([[1.0] * 9 + [0.0], [0.0] + [1.0] * 9]),
                  u["past_is_pad"],
              )
              assert_padded_array(
                  u["past_target"],
                  np.array([first_dim, second_dim]),
                  u["past_is_pad"],
              )
      else:
          for u in t(iter(ds), is_train=False):
              assert_shape(u["past_target"], (2, 10))
              assert_shape(u["past_dynamic_feat"], (4, 10))
              assert_shape(u["past_observed_values"], (2, 10))
              assert_shape(u["future_target"], (2, 0))
  
              assert_padded_array(
                  u["past_observed_values"],
                  np.array([[1.0] * 9 + [0.0], [0.0] + [1.0] * 9]),
                  u["past_is_pad"],
              )
              assert_padded_array(
                  u["past_target"],
                  np.array([first_dim, second_dim]),
                  u["past_is_pad"],
              )
  
imports: from typing import Tuple, List
  import numpy
  import pandas
  from pandas.tseries.frequencies import to_offset
  import pytest
  import gluonts
  from gluonts import time_feature, transform
  from gluonts.core import fqname_for
  from gluonts.core.serde import dump_json, load_json
  from gluonts.dataset.common import DataEntry, ListDataset
  from gluonts.dataset.field_names import FieldName
  from gluonts.dataset.stat import ScaleHistogram, calculate_dataset_statistics
  from gluonts.transform import CausalMeanValueImputation, DummyValueImputation, LastValueImputation, MeanValueImputation, RollingMeanValueImputation, Valmap
  from gluonts.transform.convert import ToIntervalSizeFormat, erf, erfinv
  from gluonts.transform.feature import CountTrailingZeros
label_desc: Use image node_id 9 for calling a global function with example usage: test_multi_dim_transformation(is_train) without return types