code: def test_split_batchnorm_params(self):
      class MyModel(nn.Module):
          def __init__(self):
              super().__init__()
              self.lin = nn.Linear(2, 3, bias=False)
              self.relu = nn.ReLU()
              self.bn = nn.BatchNorm1d(3)
  
          def forward(self, x):
              return self.bn(self.relu(self.lin(x)))
  
      torch.manual_seed(1)
      model = MyModel()
  
      bn_params, lin_params = split_batchnorm_params(model)
  
      self.assertEquals(len(bn_params), 2)
      self.assertEquals(len(lin_params), 1)
  
      self.assertTrue(torch.allclose(bn_params[0], model.bn.weight))
      self.assertTrue(torch.allclose(bn_params[1], model.bn.bias))
      self.assertTrue(torch.allclose(lin_params[0], model.lin.weight))
  
imports: import copy
  import shutil
  import tempfile
  import unittest
  import unittest.mock
  from pathlib import Path
  import classy_vision.generic.util
  import torch
  import torch.nn
  from classy_vision.generic.util import CHECKPOINT_FILE, get_torch_version, load_checkpoint, save_checkpoint, split_batchnorm_params, Timer, update_classy_model, update_classy_state
  from classy_vision.models import build_model
  from classy_vision.tasks import build_task
  from classy_vision.trainer import LocalTrainer
  from test.generic.config_utils import get_fast_test_task_config, get_test_model_configs
  from test.generic.utils import compare_model_state, compare_states
label_desc: Use image node_id 8 for calling the TestUtilMethods obj's underlying member method code with example usage: obj.test_split_batchnorm_params() and returns: self