def infer_collection_dict_helper(d, cands): for k, vd in d.iteritems(): tv = type(vd) if is_ordered(tv): if is_list(tv) and is_dict(type(vd[0])): cands.append(vd) else: infer_collection_ordered_helper(vd, cands) elif is_dict(tv): infer_collection_dict_helper(vd, cands)
def infer_collection_ordered_helper(l, cands): for vo in l: tv = type(vo) if is_ordered(tv): if is_list(vo) and is_dict(type(v[0])): cands.append(vo) else: infer_collection_ordered_helper(vo, cands) elif is_dict(tv): infer_collection_dict_helper(vo, cands)
def infer_collection(d): if is_list(type(d)): return d cands = [] for k, v in d.iteritems(): tv = type(v) if is_ordered(tv): if is_list(tv) and len(v) > 0 and is_dict(type(v[0])): cands.append(v) elif is_dict(tv): infer_collection_dict_helper(v, cands) if len(cands) > 0: return sorted(map(lambda c: (c, relsize(c)), cands), key=itemgetter(1), reverse=True)[0][0] else: return []
def group(by, key, reducer, aas, table, norm=identity, unique=True): if not is_ordered(type(by)): by = [by] r = {} for row in table.rows: thk = [] for b in by: if b in row: thk.append(norm(row[b])) else: thk.append(None) thk = tuple(thk) if thk in r: r[thk].append(row) else: r[thk] = [row] answer = [] for thk, rows in r.iteritems(): try: nr = [] for r in rows: if key in r: nr.append(r[key]) asv = reduce(reducer, nr) except: asv = None if unique: r = rows[0] r[aas] = asv answer.append(r) else: for r in rows: r[aas] = asv answer.append(r) return postcreate(data=answer)
def where(pred, table): whrs = [] for r in table.rows: if pred(r): whrs.append(r) return postcreate(whrs) def identity(x): return x def group(by, key, reducer, as, table, norm=identity, unique=True): if not is_ordered(type(by)): by = [by] r = {} for row in table.rows: thk = [] for b in by: if b in row: thk.append(norm(row[b])) else: thk.append(None) thk = tuple(thk) if thk in r: r[thk].append(row) else: r[thk] = [row]