code: def _draw_core_dimensions(self, data):
      # Draw gufunc core dimensions, with None standing for optional dimensions
      # that will not be present in the final shape.  We track omitted dims so
      # that we can do an accurate per-shape length cap.
      dims = {}
      shapes = []
      for shape in (
          *self.signature.input_shapes,
          self.signature.result_shape,
      ):
          shapes.append([])
          for name in shape:
              if name.isdigit():
                  shapes[-1].append(int(name))
                  continue
              if name not in dims:
                  dim = name.strip("?")
                  dims[dim] = data.draw(self.side_strat)
                  if self.min_dims == 0 and not data.draw_boolean(
                      7 / 8
                  ):
                      dims[dim + "?"] = None
                  else:
                      dims[dim + "?"] = dims[dim]
              shapes[-1].append(dims[name])
      return tuple(tuple(s) for s in shapes[:-1]), tuple(shapes[-1])
  
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 3 for calling the MutuallyBroadcastableShapesStrategy obj's underlying member method code with example usage: obj._draw_core_dimensions(data) and returns: tuple,  tuple