code: def test_label_smoothing_target_transformation(self) -> None:
      target = torch.tensor([0, 1, 2], dtype=torch.int64)
      smoothed = CrossEntropyMultipleOutputSingleTargetCriterion.apply_label_smoothing(
          target=target, num_labels=4, label_smoothing=0.1
      )
      expected = torch.tensor(
          [
              [0.9250, 0.0250, 0.0250, 0.0250],
              [0.0250, 0.9250, 0.0250, 0.0250],
              [0.0250, 0.0250, 0.9250, 0.0250],
          ]
      )
      self.assertTrue(torch.allclose(expected, smoothed))
  
imports: import logging
  import unittest
  from collections import namedtuple
  import torch
  import torch.nn
  import torch.optim
  from classy_vision.generic.distributed_util import set_cpu_device
  from parameterized import param, parameterized
  from vissl.config.attr_dict import AttrDict
  from vissl.losses.barlow_twins_loss import BarlowTwinsCriterion
  from vissl.losses.cross_entropy_multiple_output_single_target import CrossEntropyMultipleOutputSingleTargetCriterion, CrossEntropyMultipleOutputSingleTargetLoss
  from vissl.losses.distillation_loss import DistillationCriterion, DistillationLoss
  from vissl.losses.multicrop_simclr_info_nce_loss import MultiCropSimclrInfoNCECriterion
  from vissl.losses.simclr_info_nce_loss import SimclrInfoNCECriterion
  from vissl.losses.swav_loss import SwAVCriterion
label_desc: Use image node_id 4 for calling the TestCrossEntropyMultipleOutputSingleTargetLoss obj's underlying member method code with example usage: obj.test_label_smoothing_target_transformation() without return types