code: def test_independent_hmm_shape(
      init_shape,
      trans_mat_shape,
      trans_mvn_shape,
      obs_mat_shape,
      obs_mvn_shape,
      hidden_dim,
      obs_dim,
  ):
      base_init_shape = init_shape + (obs_dim,)
      base_trans_mat_shape = trans_mat_shape[:-1] + (
          obs_dim,
          trans_mat_shape[-1] if trans_mat_shape else 6,
      )
      base_trans_mvn_shape = trans_mvn_shape[:-1] + (
          obs_dim,
          trans_mvn_shape[-1] if trans_mvn_shape else 6,
      )
      base_obs_mat_shape = obs_mat_shape[:-1] + (
          obs_dim,
          obs_mat_shape[-1] if obs_mat_shape else 6,
      )
      base_obs_mvn_shape = obs_mvn_shape[:-1] + (
          obs_dim,
          obs_mvn_shape[-1] if obs_mvn_shape else 6,
      )
  
      init_dist = random_mvn(base_init_shape, hidden_dim)
      trans_mat = torch.randn(
          base_trans_mat_shape + (hidden_dim, hidden_dim)
      )
      trans_dist = random_mvn(base_trans_mvn_shape, hidden_dim)
      obs_mat = torch.randn(base_obs_mat_shape + (hidden_dim, 1))
      obs_dist = random_mvn(base_obs_mvn_shape, 1)
      d = dist.GaussianHMM(
          init_dist,
          trans_mat,
          trans_dist,
          obs_mat,
          obs_dist,
          duration=6,
      )
      d = dist.IndependentHMM(d)
  
      shape = broadcast_shape(
          init_shape + (6,),
          trans_mat_shape,
          trans_mvn_shape,
          obs_mat_shape,
          obs_mvn_shape,
      )
      expected_batch_shape, time_shape = shape[:-1], shape[-1:]
      expected_event_shape = time_shape + (obs_dim,)
      assert d.batch_shape == expected_batch_shape
      assert d.event_shape == expected_event_shape
      assert d.support.event_dim == d.event_dim
  
      data = torch.randn(shape + (obs_dim,))
      assert data.shape == d.shape()
      actual = d.log_prob(data)
      assert actual.shape == expected_batch_shape
      check_expand(d, data)
      check_sample_shape(d)
  
      x = d.rsample()
      assert x.shape == d.shape()
      x = d.rsample((6,))
      assert x.shape == (6,) + d.shape()
      x = d.expand((6, 5)).rsample()
      assert x.shape == (6, 5) + d.event_shape
  
imports: import logging
  import operator
  from functools import reduce
  import opt_einsum
  import pytest
  import torch
  import pyro
  import pyro.distributions
  from pyro.distributions.hmm import _sequential_gamma_gaussian_tensordot, _sequential_logmatmulexp
  from pyro.distributions.util import broadcast_shape
  from pyro.infer import TraceEnum_ELBO, config_enumerate
  from pyro.ops.gamma_gaussian import gamma_and_mvn_to_gamma_gaussian, gamma_gaussian_tensordot, matrix_and_mvn_to_gamma_gaussian
  from pyro.ops.gaussian import gaussian_tensordot, matrix_and_mvn_to_gaussian, mvn_to_gaussian
  from pyro.ops.indexing import Vindex
  from tests.common import assert_close
  from tests.ops.gamma_gaussian import assert_close_gamma_gaussian, random_gamma, random_gamma_gaussian
  from tests.ops.gaussian import random_mvn
label_desc: Use image node_id 23 for calling a global function with example usage: test_independent_hmm_shape(init_shape, trans_mat_shape, trans_mvn_shape, obs_mat_shape, obs_mvn_shape, hidden_dim, obs_dim) without return types