docs: def to_flatmap(name, hemi=Ellipsis, 
                 center=Ellipsis, center_right=Ellipsis, radius=Ellipsis, chirality=Ellipsis,
                 method=Ellipsis, registration=Ellipsis, sphere_radius=Ellipsis,
                 pre_affine=Ellipsis, post_affine=Ellipsis, meta_data=Ellipsis):
      '''
      to_flatmap(name, topo) yields a flatmap of the given topology topo using the map projection
        obtained via to_map_projection(name).
      to_flatmap(name, mesh) yields a flatmap of the given mesh. If no hemisphere is specified in the
        name argument nor in the mesh meta-data, then 'lr' is assumed.
      to_flatmap(name, subj) uses the given hemisphere from the given subject.
      to_flatmap((name, obj)) is equivalent to to_flatmap(name, obj).
      to_flatmap((name, obj, opts_map)) is equivalent to to_flatmap(name, obj, **opts_map).
  
      All optional arguments that can be passed to map_projection() may also be passed to the
      to_flatmap() function and are copied into the map projection object prior to its use in creating
      the resulting 2D mesh. Note that the named chirality argument is used to set the chirality of
      the returned map projection but never to specify the chirality of a map projection that is being
      looked up or loaded; for that use the second argument, second tuple entry, or hemi keyword.
      '''
      from neuropythy.mri import is_subject
      kw = dict(center=center, center_right=center_right, radius=radius, chirality=chirality,
                method=method, registration=registration, sphere_radius=sphere_radius,
                pre_affine=pre_affine, post_affine=post_affine, meta_data=meta_data)
      kw = {k:v for (k,v) in six.iteritems(kw) if v is not Ellipsis}
      if pimms.is_vector(name):
          if   len(name) == 1: name = name[0]
          elif len(name) == 2:
              (name, tmp) = name
              if pimms.is_map(tmp):
                  kw = {k:v for (k,v) in six.iteritems(pimms.merge(tmp, kw)) if v is not Ellipsis}
              else: hemi = tmp
          elif len(name) == 3:
              (name, hemi, opts) = name
              kw = {k:v for (k,v) in six.iteritems(pimms.merge(opts, kw)) if v is not Ellipsis}
      if 'hemi' in kw:
          if hemi is Ellipsis: hemi = kw['hemi']
          del kw['hemi']
      # okay, we can get the map projection now...
      mp = to_map_projection(name, hemi, **kw)
      return mp(hemi)