code: def test_attack_bound(self) -> None:
      model = BasicModel()
      input = torch.tensor([[9.0, 10.0, -6.0, -1.0]])
      self._FGSM_assert(
          model,
          input,
          3,
          0.2,
          [[5.0, 5.0, -5.0, -1.2]],
          targeted=True,
          lower_bound=-5.0,
          upper_bound=5.0,
      )
  
imports: from typing import Any, Callable, List, Optional, Tuple, Union
  import torch
  from captum._utils.typing import TensorLikeList, TensorOrTupleOfTensorsGeneric
  from captum.robust import FGSM
  from tests.helpers.basic import assertTensorAlmostEqual, BaseTest
  from tests.helpers.basic_models import BasicModel, BasicModel2, BasicModel_MultiLayer
  from torch import Tensor
  from torch.nn import CrossEntropyLoss
label_desc: Use image node_id 10 for calling the Test obj's underlying member method code with example usage: obj.test_attack_bound() without return types