code: def _reserve_dense_storage(
      topology: Topology,
      module: nn.Module,
      shardable_modules: Set[nn.Module],
      multiplier: float,
      dense_tensor_estimate: Optional[int] = None,
  ) -> Storage:
      dense_tensor_size = _get_dense_tensor_size(
          module, shardable_modules, multiplier
      )
      if dense_tensor_estimate:
          logger.info(
              f"We override default dense tensor estimate ({dense_tensor_size} bytes) "
              f"with user-provided dense tensor estimate ({dense_tensor_estimate} bytes)."
          )
          dense_tensor_size = dense_tensor_estimate
  
      dense_tensor_storage = Storage(
          hbm=dense_tensor_size
          if topology.compute_device == "cuda"
          else 0,
          ddr=dense_tensor_size
          if topology.compute_device in {"cpu", "mtia"}
          else 0,
      )
  
      for device in topology.devices:
          device.storage -= dense_tensor_storage
  
      return dense_tensor_storage
  
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 3 for calling a global function with example usage: _reserve_dense_storage(topology, module, shardable_modules, multiplier, dense_tensor_estimate) and returns: dense_tensor_storage