docs: def retinotopic_field_sign(m, element='vertices', retinotopy=Ellipsis, invert_field=False):
      '''
      retinotopic_field_sign(mesh) yields a property array of the field sign of every vertex in the 
      mesh m; this value may not be exactly 1 (same as VF) or -1 (mirror-image) but some value
      in-between; this is because the field sign is calculated exactly (1, 0, or -1) for each triangle
      in the mesh then is average onto the vertices. To get only the triangle field signs, use
      retinotopic_field_sign(m, 'triangles').
  
      The following options are accepted:
        * element ('vertices') may be 'vertices' to specify that the vertex signs should be returned
          or 'triangles' (or 'faces') to specify that the triangle field signs should be returned.
        * retinotopy (Ellipsis) specifies the retinotopic dataset to be used. If se to 'empirical' or
          'predicted', the retinotopy data is auto-detected from the given categories; if set to
          Ellipsis, a property pair like 'polar_angle' and 'eccentricity' or 'lat' and 'lon' are
          searched for using the as_retinotopy function; otherwise, this may be a retinotopy dataset
          recognizable by as_retinotopy.
        * invert_field (False) specifies that the inverse of the field sign should be returned.
      '''
      tsign = _retinotopic_field_sign_triangles(m, retinotopy)
      t = m.tess if isinstance(m, geo.Mesh) or isinstance(m, geo.Topology) else m
      if invert_field: tsign = -tsign
      element = element.lower()
      if element == 'triangles' or element == 'faces': return tsign
      vfs = t.vertex_faces
      vfs = np.asarray([np.mean(tsign[list(ii)]) if len(ii) > 0 else 0 for ii in vfs])
      return vfs