docs: def extract_retinotopy_argument(obj, retino_type, arg, default='any'):
      '''
      extract_retinotopy_argument(o, retino_type, argument) yields retinotopy data of the given
      retinotopy type (e.g., 'polar_angle', 'eccentricity', 'variance_explained', 'visual_area',
      'weight') from the given hemisphere or cortical mesh object o, according to the given
      argument. If the argument is a string, then it is considered a property name and that is
      returned regardless of its value. If the argument is an iterable, then it is returned. If
      the argument is None, then retinotopy will automatically be extracted, if found, by calling
      the retinotopy_data function.
      The option default (which, by default, is 'any') specifies which function should be used to
      extract retinotopy in the case that the argument is None. The value 'any' indicates that the
      function retinotopy_data should be used, while the values 'empirical' and 'predicted' specify
      that the empirical_retinotopy_data and predicted_retinotopy_data functions should be used,
      respectively.
      '''
      if   pimms.is_str(arg):        values = obj.prop(arg)
      elif hasattr(arg, '__iter__'): values = arg
      elif arg is not None:          raise ValueError('cannot interpret retinotopy arg: %s' % arg)
      elif default == 'predicted':   values = predicted_retinotopy_data(obj, retino_type)
      elif default == 'empirical':   values = empirical_retinotopy_data(obj, retino_type)
      elif default == 'any':         values = basic_retinotopy_data(obj, retino_type)
      else:                          raise ValueError('bad default retinotopy: %s' % default)
      if values is None:
          raise RuntimeError('No %s retinotopy data found given argument: %s' % (retino_type, arg))
      n = obj.vertex_count
      values = np.asarray(values)
      if len(values) != n:
          found = False
          # could be that we were given a mesh data-field for a map
          try:              values = values[obj.labels]
          except Exception: values = None
          if values is None:
              raise RuntimeError('%s data: length %s should be %s' % (retino_type, len(values), n))
      return values