code: def test_mtv_with_bottleneck(
      self, fuse_in_descending_order, expected_bottleneck_key
  ):
      rngs = {"params": random.PRNGKey(0), "dropout": random.PRNGKey(1)}
      images = jnp.ones((2, 4, 8, 8, 3))
      self.cross_view_fusion = ml_collections.ConfigDict(
          {
              "type": "bottleneck",
              "bottleneck_tokens": 4,
              "fusion_layers": (0,),
              "fuse_in_descending_order": fuse_in_descending_order,
          }
      )
      outputs, vars_dict = model.MTV(
          view_configs=self.view_configs,
          cross_view_fusion=self.cross_view_fusion,
          temporal_encoding_config=self.temporal_encoding_config,
          global_encoder_config=self.global_encoder_config,
          input_token_temporal_dims=[1, 2],
          num_classes=10,
          classifier="token",
      ).init_with_output(rngs, images)
      self.assertEqual(outputs.shape, (2, 10))
      actual_var_keys = set(vars_dict["params"].keys())
      self.assertIn(
          expected_bottleneck_key,
          vars_dict["params"]["MultiviewEncoder"].keys(),
      )
      expected_keys = {
          "cls_view0",
          "cls_view1",
          "cls_global",
          "embedding_view0",
          "embedding_view1",
          "MultiviewEncoder",
          "bottleneck",
          "global_encoder",
          "output_projection",
      }
      self.assertSetEqual(actual_var_keys, expected_keys)
  
imports: from absl.testing import parameterized
  import flax
  from jax import random
  import jax.numpy
  import ml_collections
  from scenic.projects.mtv import model
  import tensorflow
label_desc: Use image node_id 9 for calling the ModelTest obj's underlying member method code with example usage: obj.test_mtv_with_bottleneck(fuse_in_descending_order, expected_bottleneck_key) without return types