code: def test_param(self, sharpness, same_on_batch, device, dtype):
      _sharpness = (
          sharpness
          if isinstance(sharpness, (float, int, list, tuple))
          else nn.Parameter(
              sharpness.clone().to(device=device, dtype=dtype)
          )
      )
  
      torch.manual_seed(0)
      input = (
          torch.randint(255, (2, 3, 10, 10), device=device, dtype=dtype)
          / 255.0
      )
      aug = RandomSharpness(_sharpness, same_on_batch=same_on_batch)
  
      output = aug(input)
  
      if len(list(aug.parameters())) != 0:
          mse = nn.MSELoss()
          opt = torch.optim.SGD(aug.parameters(), lr=0.1)
          loss = mse(output, torch.ones_like(output) * 2)
          loss.backward()
          opt.step()
  
      if not isinstance(sharpness, (float, int, list, tuple)):
          assert isinstance(
              aug._param_generator.sharpness, torch.Tensor
          )
          # Assert if param not updated
          assert (
              sharpness.to(device=device, dtype=dtype)
              - aug._param_generator.sharpness.data
          ).sum() != 0
  
imports: import pytest
  import torch
  from torch import nn
  from kornia.augmentation import ColorJiggle, ColorJitter, RandomAffine, RandomErasing, RandomMotionBlur, RandomPerspective, RandomResizedCrop, RandomRotation, RandomSharpness
label_desc: Use image node_id 1 for calling the TestRandomSharpnessBackward obj's underlying member method code with example usage: obj.test_param(sharpness, same_on_batch, device, dtype) without return types