def METHOD_NAME(
    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 == ()