def retino_colors(vcolorfn, *args, **kwargs):
if len(args) == <NUM_LIT:0>:<EOL><INDENT>def _retino_color_pass(*args, **new_kwargs):<EOL><INDENT>return retino_colors(vcolorfn, *args,<EOL>**{k:(new_kwargs[k] if k in new_kwargs else kwargs[k])<EOL>for k in set(kwargs.keys() + new_kwargs.keys())})<EOL><DEDENT>return _retino_color_pass<EOL><DEDENT>elif len(args) > <NUM_LIT:1>:<EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>m = args[<NUM_LIT:0>]<EOL>if isinstance(m, (geo.VertexSet, pimms.ITable)):<EOL><INDENT>tbl = m.properties if isinstance(m, geo.VertexSet) else m<EOL>n = tbl.row_count<EOL>if '<STR_LIT>' in kwargs:<EOL><INDENT>props = kwargs['<STR_LIT>']<EOL>del kwargs['<STR_LIT>']<EOL>if not (pimms.is_vector(props) or pimms.is_matrix(props)):<EOL><INDENT>props = [props for _ in range(n)]<EOL><DEDENT><DEDENT>else: props = None<EOL>if '<STR_LIT>' in kwargs:<EOL><INDENT>ws = kwargs['<STR_LIT>']<EOL>del kwargs['<STR_LIT>']<EOL>if not pimms.is_vector(ws) and not pimms.is_matrix(ws): ws = [ws for _ in range(n)]<EOL><DEDENT>else: ws = None<EOL>vcolorfn0 = vcolorfn(Ellipsis, **kwargs) if len(kwargs) > <NUM_LIT:0> else vcolorfn<EOL>if props is None and ws is None: vcfn = lambda m,k:vcolorfn0(m)<EOL>elif props is None:              vcfn = lambda m,k:vcolorfn0(m, weight=ws[k])<EOL>elif ws is None:                 vcfn = lambda m,k:vcolorfn0(m, property=props[k])<EOL>else: vcfn = lambda m,k:vcolorfn0(m, property=props[k], weight=ws[k])<EOL>return np.asarray([vcfn(r,kk) for (kk,r) in enumerate(tbl.rows)])<EOL><DEDENT>else:<EOL><INDENT>return vcolorfn(m, **kwargs)<EOL><DEDENT>
See eccen_colors, angle_colors, sigma_colors, and varea_colors.