code: def _pre_state_dict_hook(
      module: nn.Module,
      *args,
      **kwargs,
  ) -> None:
      """
      This is called before the core state dict saving logic of ``module``.
      ``fsdp_state._state_dict_type`` is used to decide what postprocessing will
      be done.
      """
      fsdp_state = _get_module_fsdp_state_if_fully_sharded_module(
          module
      )
      if fsdp_state.sharding_strategy == ShardingStrategy.NO_SHARD:
          context = _replace_with_full_state_dict_type(fsdp_state)
          warnings.warn(
              "When using ``NO_SHARD`` for ``ShardingStrategy``, full_state_dict will"
              "be returned."
          )
      else:
          _set_use_dtensor(fsdp_state)
          context = contextlib.nullcontext()
  
      with context:
          _pre_state_dict_hook_fn = {
              StateDictType.FULL_STATE_DICT: _full_pre_state_dict_hook,
              StateDictType.LOCAL_STATE_DICT: _local_pre_state_dict_hook,
              StateDictType.SHARDED_STATE_DICT: _sharded_pre_state_dict_hook,
          }
          _pre_state_dict_hook_fn[fsdp_state._state_dict_type](
              fsdp_state,
              module,
              *args,
              **kwargs,
          )
  
imports: import contextlib
  import logging
  import math
  import warnings
  from typing import Any, Callable, cast, Dict, Generator, Iterator, no_type_check, Tuple
  import torch
  import torch.distributed
  import torch.distributed.algorithms._checkpoint.checkpoint_wrapper
  import torch.nn
  import torch.nn.functional
  from torch.distributed._shard.sharded_tensor import init_from_local_shards, Shard, ShardedTensor
  from torch.distributed._tensor import DTensor
  from torch.distributed.device_mesh import _mesh_resources
  from torch.distributed.fsdp._common_utils import _FSDPState, _get_module_fsdp_state_if_fully_sharded_module, _has_fsdp_params, _is_composable, _module_handle, clean_tensor_name, FSDP_PREFIX, FSDP_WRAPPED_MODULE
  from torch.distributed.fsdp._debug_utils import SimpleProfiler
  from torch.distributed.fsdp._runtime_utils import _cast_buffers_to_dtype_and_device, _get_orig_buffer_dtypes, _lazy_init, _reset_flat_param_grad_info_if_needed
  from torch.distributed.fsdp.api import FullStateDictConfig, ShardingStrategy, StateDictType
  from torch.distributed.utils import _replace_by_prefix
  from ._fsdp_extensions import _ext_all_gather_dtensor, _ext_chunk_dtensor, _ext_chunk_tensor, _ext_post_unflatten_transform, _ext_pre_load_state_dict_transform
  from ._unshard_param_utils import _unshard_fsdp_state_params, FLAT_PARAM
label_desc: Use image node_id 23 for calling a global function with example usage: _pre_state_dict_hook(module) without return types