class_docstr: This helper test class takes in any supported type of and runs some tests.
  This inherits the TestBaseDataSparsifierRuner wherein some functions are
  over-ridden to take accomodate the specific sparsifier.
  TODO: Change the structure by creating a separate test case class for each
        member function
class_docstr_tok: ["This","helper","test","class","takes","in","any","supported","type","of","and","runs","some","tests",".","This","inherits","the","TestBaseDataSparsifierRuner","wherein","some","functions","are","over-ridden","to","take","accomodate","the","specific","sparsifier",".","TODO",":","Change","the","structure","by","creating","a","separate","test","case","class","for","each","member","function"]
code: def check_step(
      self, data_list, data_with_config, defaults, norm_type="L1"
  ):
      sparsifier = self._make_sparsifier(
          data_list,
          data_with_config,
          defaults,
          sparsifier_type=DataNormSparsifier,
          sparsifier_kwargs={"norm": norm_type},
      )
      all_data = data_list + data_with_config
  
      # mask before step() should not be sparsified
      for some_data in all_data:
          name, _, _ = self._get_name_data_config(some_data)
          mask = sparsifier.get_mask(name=name)
          assert (
              1.0 - mask.mean()
          ) == 0  # checking sparsity level is 0
  
      sparsifier.step()
  
      for some_data in all_data:
          name, _, _ = self._get_name_data_config(some_data)
          mask = sparsifier.get_mask(name=name)
          config = sparsifier.data_groups[name]
          lb, ub = self._get_bounds_on_actual_sparsity(
              config, mask.shape
          )
          mask = mask.to(torch.float)
          actual_sparsity = round(1 - mask.mean().item(), 3)
          assert actual_sparsity >= lb and actual_sparsity <= ub
          assert (
              actual_sparsity > 0.0
          )  # exact sparsity level cannot be achieved due to size of tensor
  
      iters_before_collapse = 100
  
      test_sparsifier = DataNormSparsifier(
          sparsity_level=0.5,
          sparse_block_shape=(1, 4),
          zeros_per_block=4,
          norm=norm_type,
      )
  
      for _ in range(iters_before_collapse):
          new_data = torch.randn(20, 20)
          test_sparsifier.add_data(name="test_data", data=new_data)
          test_sparsifier.step()
          mask = test_sparsifier.get_mask(name="test_data")
          mask = mask.to(torch.float)
          assert (1.0 - mask.mean().item()) > 0
  
imports: import logging
  import torch
  from torch.nn.utils.parametrize import is_parametrized
  from torch.testing._internal.common_utils import TestCase
  from typing import Tuple
  from torch import nn
  import itertools
  import math
  import copy
  from torch.ao.pruning._experimental.data_sparsifier import BaseDataSparsifier, DataNormSparsifier
  from torch.ao.pruning._experimental.data_sparsifier.quantization_utils import post_training_sparse_quantize
label_desc: Use image node_id 3 for calling the _NormDataSparsifierTestCase obj's underlying member method code with example usage: obj.check_step(data_list, data_with_config, defaults, norm_type) without return types