code: def test_deepar_modules(
      num_feat_dynamic_real: int,
      num_feat_static_real: int,
      num_feat_static_cat: int,
      cardinality: Optional[List[int]],
      scaling: bool,
  ):
      batch_size = 4
      prediction_length = 6
      context_length = 12
  
      lightning_module = DeepARLightningModule(
          model_kwargs={
              "freq": "1H",
              "context_length": context_length,
              "prediction_length": prediction_length,
              "num_feat_dynamic_real": num_feat_dynamic_real,
              "num_feat_static_real": num_feat_static_real,
              "num_feat_static_cat": num_feat_static_cat,
              "cardinality": cardinality,
              "scaling": scaling,
          }
      )
      model = lightning_module.model
  
      # TODO uncomment the following
      # torch.jit.script(model)
  
      feat_static_cat = torch.zeros(
          batch_size, num_feat_static_cat, dtype=torch.long
      )
      feat_static_real = torch.ones(batch_size, num_feat_static_real)
      past_time_feat = torch.ones(
          batch_size, model._past_length, num_feat_dynamic_real
      )
      future_time_feat = torch.ones(
          batch_size, prediction_length, num_feat_dynamic_real
      )
      past_target = torch.ones(batch_size, model._past_length)
      past_observed_values = torch.ones(batch_size, model._past_length)
      future_target = torch.ones(batch_size, prediction_length)
      future_observed_values = torch.ones(batch_size, prediction_length)
  
      params, scale, _, _, _ = model.unroll_lagged_rnn(
          feat_static_cat,
          feat_static_real,
          past_time_feat,
          past_target,
          past_observed_values,
          future_time_feat,
          future_target,
      )
  
      assert scale.shape == (batch_size, 1)
      for p in params:
          assert p.shape == (
              batch_size,
              context_length + prediction_length - 1,
          )
  
      distr = model.output_distribution(params, scale)
  
      assert distr.batch_shape == (
          batch_size,
          context_length + prediction_length - 1,
      )
      assert distr.event_shape == ()
  
      sliced_distr = model.output_distribution(
          params, scale, trailing_n=2
      )
  
      assert sliced_distr.batch_shape == (batch_size, 2)
      assert sliced_distr.event_shape == ()
  
      samples = model(
          feat_static_cat,
          feat_static_real,
          past_time_feat,
          past_target,
          past_observed_values,
          future_time_feat,
      )
  
      assert samples.shape == (batch_size, 100, prediction_length)
  
      log_densities = model.log_prob(
          feat_static_cat,
          feat_static_real,
          past_time_feat,
          past_target,
          past_observed_values,
          future_time_feat,
          future_target,
      )
  
      assert log_densities.shape == (batch_size,)
  
      log_densities = model.log_prob(
          feat_static_cat,
          feat_static_real,
          past_time_feat,
          past_target,
          past_observed_values,
          future_time_feat,
          samples.transpose(0, 1),  # TODO: ugly!
      )
  
      assert log_densities.shape == (100, batch_size)
  
      batch = dict(
          feat_static_cat=feat_static_cat,
          feat_static_real=feat_static_real,
          past_time_feat=past_time_feat,
          future_time_feat=future_time_feat,
          past_target=past_target,
          past_observed_values=past_observed_values,
          future_target=future_target,
          future_observed_values=future_observed_values,
      )
  
      assert (
          lightning_module.training_step(batch, batch_idx=0).shape == ()
      )
      assert (
          lightning_module.validation_step(batch, batch_idx=0).shape
          == ()
      )
  
imports: from typing import List, Optional
  import pytest
  import torch
  from gluonts.torch.model.deepar import DeepARLightningModule, DeepARModel
label_desc: Use image node_id 1 for calling a global function with example usage: test_deepar_modules(num_feat_dynamic_real, num_feat_static_real, num_feat_static_cat, cardinality, scaling) without return types