code: def test_perplexity(self, ddp, dist_sync_on_step, probs, logits):
      self.run_class_perplexity_test(
          ddp=ddp,
          probs=probs,
          logits=logits,
          dist_sync_on_step=dist_sync_on_step,
      )
  
imports: import pytest
  import torch
  from nemo.collections.common.metrics.classification_accuracy import TopKClassificationAccuracy
  from nemo.collections.common.metrics.punct_er import DatasetPunctuationErrorRate, OccurancePunctuationErrorRate, punctuation_error_rate
  from .loss_inputs import ALL_NUM_MEASUREMENTS_ARE_ZERO, NO_ZERO_NUM_MEASUREMENTS, SOME_NUM_MEASUREMENTS_ARE_ZERO
  from .perplexity_inputs import NO_PROBS_NO_LOGITS, ONLY_LOGITS1, ONLY_LOGITS100, ONLY_PROBS, PROBS_AND_LOGITS
  from .pl_utils import LossTester, PerplexityTester
label_desc: Use image node_id 1 for calling the TestPerplexity obj's underlying member method code with example usage: obj.test_perplexity(ddp, dist_sync_on_step, probs, logits) without return types