code: def test_clip_stateful_loss(self):
      config = get_fast_test_task_config()
      config["loss"] = {"name": "test_stateful_loss", "in_plane": 256}
      config["grad_norm_clip"] = grad_norm_clip = 1
      task = build_task(config)
      task.set_use_gpu(False)
      task.prepare()
  
      # set fake gradients with norm > grad_norm_clip
      for param in itertools.chain(
          task.base_model.parameters(), task.base_loss.parameters()
      ):
          param.grad = 1.1 + torch.rand(param.shape)
          self.assertGreater(param.grad.norm(), grad_norm_clip)
  
      task._clip_gradients(grad_norm_clip)
  
      for param in itertools.chain(
          task.base_model.parameters(), task.base_loss.parameters()
      ):
          self.assertLessEqual(param.grad.norm(), grad_norm_clip)
  
imports: import copy
  import itertools
  import shutil
  import tempfile
  import unittest
  import torch
  import torch.nn
  from classy_vision.dataset import build_dataset
  from classy_vision.generic.distributed_util import is_distributed_training_run
  from classy_vision.generic.util import get_checkpoint_dict, get_torch_version
  from classy_vision.hooks import CheckpointHook, LossLrMeterLoggingHook
  from classy_vision.losses import build_loss, ClassyLoss, register_loss
  from classy_vision.models import build_model, ClassyModel
  from classy_vision.optim import build_optimizer, SGD
  from classy_vision.tasks import build_task, ClassificationTask
  from classy_vision.trainer import LocalTrainer
  from test.generic.config_utils import get_fast_test_task_config, get_test_task_config
  from test.generic.utils import compare_model_state, compare_samples, compare_states, LimitedPhaseTrainer
label_desc: Use image node_id 19 for calling the TestClassificationTask obj's underlying member method code with example usage: obj.test_clip_stateful_loss() without return types