code: def reshape_shapes(draw, *, shape):
      """Draws a random shape with the same number of elements as the given
      shape.
  
      Parameters
      ----------
      draw
          special function that draws data randomly (but is reproducible) from a given
          data-set (ex. list).
      shape
          list/strategy/tuple of integers representing an array shape.
  
      Returns
      -------
          A strategy that draws a tuple.
      """
      if isinstance(shape, st._internal.SearchStrategy):
          shape = draw(shape)
      size = 1 if len(shape) == 0 else math.prod(shape)
      rshape = draw(
          st.lists(number_helpers.ints(min_value=0)).filter(
              lambda s: math.prod(s) == size
          )
      )
      return tuple(rshape)
  
imports: from hypothesis import assume, strategies
  from typing import Tuple
  from functools import lru_cache
  import math
  import numpy
  import ivy
  from .None import array_helpers, number_helpers, dtype_helpers
  from ..pipeline_helper import WithBackendContext
  from ivy.functional.ivy.layers import _deconv_length
  from ..globals import mod_backend
label_desc: Use image node_id 7 for calling a global function with example usage: reshape_shapes(draw) and returns: tuple