class_docstr: Test case for the optim module.
code: def testDiffOptGroupedParam(
      self, _, model_builder, opt_builder, kwargs=None
  ):
      kwargs = {} if kwargs is None else kwargs
      lr = 0.1
      left_lr = 0.2
      model = model_builder(self)
      full_parameters = list(model.parameters())
      half = len(full_parameters) // 2
      left_parameters = full_parameters[:half]
      right_parameters = full_parameters[half:]
      param_groups = [
          {"params": left_parameters, "lr": left_lr},
          {"params": right_parameters},
      ]
      opt = opt_builder(param_groups, lr=lr, **kwargs)
  
      self._run_correctness_test(opt, model)
  
imports: import unittest
  import copy
  from parameterized import parameterized
  import torch
  from torch import nn, optim
  import higher
label_desc: Use image node_id 3 for calling the TestOptim obj's underlying member method code with example usage: obj.testDiffOptGroupedParam(_, model_builder, opt_builder, kwargs) without return types