code: def array_shapes(
      *,
      min_dims: int = 1,
      max_dims: Optional[int] = None,
      min_side: int = 1,
      max_side: Optional[int] = None,
  ) -> st.SearchStrategy[Shape]:
      """Return a strategy for array shapes (tuples of int >= 1).
  
      * ``min_dims`` is the smallest length that the generated shape can possess.
      * ``max_dims`` is the largest length that the generated shape can possess,
        defaulting to ``min_dims + 2``.
      * ``min_side`` is the smallest size that a dimension can possess.
      * ``max_side`` is the largest size that a dimension can possess,
        defaulting to ``min_side + 5``.
      """
      check_type(int, min_dims, "min_dims")
      check_type(int, min_side, "min_side")
      check_valid_dims(min_dims, "min_dims")
  
      if max_dims is None:
          max_dims = min(min_dims + 2, NDIM_MAX)
      check_type(int, max_dims, "max_dims")
      check_valid_dims(max_dims, "max_dims")
  
      if max_side is None:
          max_side = min_side + 5
      check_type(int, max_side, "max_side")
  
      order_check("dims", 0, min_dims, max_dims)
      order_check("side", 0, min_side, max_side)
  
      return st.lists(
          st.integers(min_side, max_side),
          min_size=min_dims,
          max_size=max_dims,
      ).map(tuple)
  
imports: import re
  from typing import NamedTuple, Optional, Tuple, Union
  from hypothesis import assume, strategies
  from hypothesis.errors import InvalidArgument
  from hypothesis.internal.conjecture.utils import _calc_p_continue
  from hypothesis.internal.coverage import check_function
  from hypothesis.internal.validation import check_type, check_valid_interval
  from hypothesis.strategies._internal.utils import defines_strategy
  from hypothesis.utils.conventions import UniqueIdentifier, not_set
label_desc: Use image node_id 4 for calling a global function with example usage: array_shapes() and returns: st