def decons_obs_group_ids(comp_ids, obs_ids, shape, labels, xnull):
if not xnull:<EOL><INDENT>lift = np.fromiter(((a == -<NUM_LIT:1>).any() for a in labels), dtype='<STR_LIT>')<EOL>shape = np.asarray(shape, dtype='<STR_LIT>') + lift<EOL><DEDENT>if not is_int64_overflow_possible(shape):<EOL><INDENT>out = decons_group_index(obs_ids, shape)<EOL>return out if xnull or not lift.any()else [x - y for x, y in zip(out, lift)]<EOL><DEDENT>i = unique_label_indices(comp_ids)<EOL>i8copy = lambda a: a.astype('<STR_LIT>', subok=False, copy=True)<EOL>return [i8copy(lab[i]) for lab in labels]<EOL>
reconstruct labels from observed group ids

Parameters
----------
xnull: boolean,
    if nulls are excluded; i.e. -1 labels are passed through