code: def test_embedding_sparse_empty_tensor(self):
      embedding = nn.Embedding(0, 0, sparse=True)
      input = torch.tensor([], dtype=torch.int64)
      embedding(input).sum().backward()
      self.assertTrue(embedding.weight.grad.is_sparse)
      self.assertEqual(
          embedding.weight.grad.shape, embedding.weight.shape
      )
  
      embedding = nn.Embedding(10, 0, sparse=True)
      input = torch.LongTensor([[0, 2, 4, 5], [4, 3, 0, 9]])
      embedding(input).sum().backward()
      self.assertTrue(embedding.weight.grad.is_sparse)
      self.assertEqual(
          embedding.weight.grad.shape, embedding.weight.shape
      )
  
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 3 for calling the TestEmbeddingNN obj's underlying member method code with example usage: obj.test_embedding_sparse_empty_tensor() without return types