code: def test_embedding_dense_grad(self, device):
      with set_default_dtype(torch.double):
          embd = nn.Embedding(20, 20).to(device)
          weight = embd.weight
  
          def fn_wrapper(device):
              def fn(weight):
                  inp = torch.tensor(
                      [[0, 1, 1, 2], [3, 5, 7, 11]], dtype=torch.long
                  ).to(device)
                  return torch.nn.functional.embedding(inp, weight)
  
              return fn
  
          fn = fn_wrapper(device)
          _assertGradAndGradgradChecks(self, fn, (weight,))
  
imports: import unittest
  import random
  import itertools
  from itertools import product
  import torch
  from torch.testing._internal.common_utils import run_tests, set_default_dtype, skipIfTorchDynamo, instantiate_parametrized_tests, parametrize, _assertGradAndGradgradChecks, IS_JETSON
  from torch.testing._internal.common_cuda import TEST_CUDA
  from torch.testing._internal.common_nn import NNTestCase
  from torch.testing._internal.common_device_type import onlyNativeDeviceTypes, dtypes, instantiate_device_type_tests, dtypesIfCUDA, onlyCUDA, TEST_WITH_ROCM, skipCUDAIf, skipMeta
  import torch.nn.functional
  import torch.nn
  from torch.testing._internal.common_utils import dtype2prec_DONTUSE
label_desc: Use image node_id 1 for calling the TestEmbeddingNNDeviceType obj's underlying member method code with example usage: obj.test_embedding_dense_grad(device) and returns: fn, torch