code: def test_prune_linear_activation_linear(self):
      config = [
          {"tensor_fqn": "seq.0.weight"},
          {"tensor_fqn": "seq.2.weight"},
          {"tensor_fqn": "seq.4.weight"},
          {"tensor_fqn": "linear1.weight"},
      ]
      shape = (128, 10)
  
      for device in DEVICES:
          for also_prune_bias in [True, False]:
              # test version with nn.Modules
              self._test_linear_on_device(
                  LinearActivation(),
                  config,
                  shape,
                  torch.device(device),
                  also_prune_bias,
              )
              # test functional version
              self._test_linear_on_device(
                  LinearActivationFunctional(),
                  config,
                  shape,
                  torch.device(device),
                  also_prune_bias,
              )
  
imports: import copy
  import logging
  import random
  import torch
  from torch import nn
  from torch.ao.pruning._experimental.pruner import SaliencyPruner, LSTMSaliencyPruner, BaseStructuredSparsifier, FakeStructuredSparsity, FPGMPruner
  from torch.nn.utils import parametrize
  from torch.testing._internal.common_utils import TestCase, skipIfTorchDynamo
  from torch.testing._internal.common_pruning import SimpleLinear, LinearBias, LinearActivation, LinearActivationFunctional, SimpleConv2d, Conv2dBias, Conv2dActivation, Conv2dPadBias, Conv2dPool, Conv2dPoolFlatten, Conv2dPoolFlattenFunctional, LSTMLinearModel, LSTMLayerNormLinearModel, rows_are_subset
label_desc: Use image node_id 18 for calling the TestBaseStructuredSparsifier obj's underlying member method code with example usage: obj.test_prune_linear_activation_linear() without return types