code: def test_configuration(
      self, soft_alpha: float, temperature: float, loss_type: str
  ):
      criterion = DistillationLoss.from_config(
          AttrDict(
              {
                  "soft_target_alpha": soft_alpha,
                  "temperature": temperature,
                  "loss_type": loss_type,
              }
          )
      )
      self.assertEqual(
          criterion.criterion.hard_target_alpha, 1 - soft_alpha
      )
      self.assertEqual(
          criterion.criterion.soft_target_alpha, soft_alpha
      )
      self.assertEqual(criterion.criterion.temperature, temperature)
      self.assertEqual(
          criterion.criterion.loss_type.name, loss_type.upper()
      )
  
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 2 for calling the TestDistillationCriterion obj's underlying member method code with example usage: obj.test_configuration(soft_alpha, temperature, loss_type) without return types