code: def reserve(
      self,
      topology: Topology,
      batch_size: int,
      module: nn.Module,
      sharders: List[ModuleSharder[nn.Module]],
      constraints: Optional[Dict[str, ParameterConstraints]] = None,
  ) -> Topology:
      reserved_topology = copy.deepcopy(topology)
      _reserve_storage_percentage(reserved_topology, self._percentage)
      return reserved_topology
  
imports: import copy
  import logging
  import math
  from typing import Dict, List, Optional, Set, Tuple
  from torch import nn
  from torchrec.distributed.planner.constants import BIGINT_DTYPE, POOLING_FACTOR
  from torchrec.distributed.planner.types import ParameterConstraints, PlannerError, PlannerErrorType, Storage, StorageReservation, Topology
  from torchrec.distributed.planner.utils import sharder_name, storage_repr_in_gb
  from torchrec.distributed.types import get_tensor_size_bytes, ModuleSharder
label_desc: Use image node_id 2 for calling the FixedPercentageStorageReservation obj's underlying member method code with example usage: obj.reserve(topology, batch_size, module, sharders, constraints) and returns: reserved_topology