class_docstr: Represents a shard of the overall Tensor including its
  offsets, lengths and device placement.
  
  Args:
      shard_offsets(List[int]): Offsets in the original tensor indicating
          the start offsets for this shard. Should have the same rank as
          the original tensor.
      shard_sizes(List[int]): Integers indicating the size of each
          dimension for this shard. Should have the same rank as the
          original tensor.
      placement(:class:`torch.distributed._remote_device`):
          Specifies the placement of this shard.
code: def __hash__(self):
      def _hash_reduce(a, b):
          return (a << 8) + hash(b)
  
      res = reduce(_hash_reduce, self.shard_offsets, 37)
      res = reduce(_hash_reduce, self.shard_sizes, res)
      res = _hash_reduce(res, self.placement)
      return res
  
imports: from dataclasses import dataclass
  from typing import List, Union, Optional
  from functools import reduce
  from torch.distributed.remote_device import _remote_device
label_desc: Use image node_id 2 for calling the ShardMetadata obj's underlying member method code with example usage: obj.__hash__() and returns: res, unknown