def merge_blocks(blocks, hyper=False, indexed=False): db = DataBlock() dimpartialgroups = OrderedDict() for b in blocks: parts = get_partials(b) partgroup = dimpartialgroups.setdefault(tuple(parts.keys()), {}) for k, v in parts.items(): partgroup.setdefault(k, []).extend(v) for idx, dims in enumerate(dimpartialgroups.values(), 1): for k, v in dims.items(): dims = (DimSweep("INDEX%s" % idx, len(v)),) db[k] = hfarray([x.data[0] for x in v], dims=dims, unit=v[0].unit) varnames = set() for b in blocks: for k, v in b.ivardata.items(): if k not in db: db[k] = v for k in b.vardata.keys(): varnames.add(k) for vname in varnames: v = [] for b in blocks: if vname not in b: continue partials = get_partials(b) v.append(b[vname]) if v: k = tuple(partials.keys()) if k: ri = (db[tuple(dimpartialgroups[k].keys())[0]].dims[0],) else: ri = tuple() value = hfarray(v, dims=ri + v[0].dims, unit=v[0].unit) if v[0].dims and isinstance(v[0].dims[0], DimSweep): value = value.reorder_dimensions(v[0].dims[0]) db[vname] = value cmt = Comments() for block in blocks: if block.comments: cmt.extend(block.comments) db.comments = cmt db.blockname = blocks[0].blockname if hyper: for vnames in dimpartialgroups.keys(): if vnames: hyperindex = db[vnames[0]].dims[0] db = db.hyper(vnames, hyperindex, all=True) db = db.squeeze() return db
def merge_blocks(blocks, hyper=False, indexed=False): db = DataBlock() dimpartialgroups = OrderedDict() for b in blocks: parts = get_partials(b) partgroup = dimpartialgroups.setdefault(tuple(parts.keys()), {}) for k, v in parts.items(): partgroup.setdefault(k, []).extend(v) for idx, dims in enumerate(dimpartialgroups.values(), 1): for k, v in dims.items(): dims = (DimSweep("INDEX%s" % idx, len(v)), ) db[k] = hfarray([x.data[0] for x in v], dims=dims, unit=v[0].unit) varnames = set() for b in blocks: for k, v in b.ivardata.items(): if k not in db: db[k] = v for k in b.vardata.keys(): varnames.add(k) for vname in varnames: v = [] for b in blocks: if vname not in b: continue partials = get_partials(b) v.append(b[vname]) if v: k = tuple(partials.keys()) if k: ri = (db[tuple(dimpartialgroups[k].keys())[0]].dims[0], ) else: ri = tuple() value = hfarray(v, dims=ri + v[0].dims, unit=v[0].unit) if v[0].dims and isinstance(v[0].dims[0], DimSweep): value = value.reorder_dimensions(v[0].dims[0]) db[vname] = value cmt = Comments() for block in blocks: if block.comments: cmt.extend(block.comments) db.comments = cmt db.blockname = blocks[0].blockname if hyper: for vnames in dimpartialgroups.keys(): if vnames: hyperindex = db[vnames[0]].dims[0] db = db.hyper(vnames, hyperindex, all=True) db = db.squeeze() return db
def merge_blocks_do_hyper(blocks): #import pdb;pdb.set_trace() outdata = DataBlock() data = merge_blocks_to_association_list(blocks) ivars = {} for b in blocks: for vname, v in b.ivardata.items(): if vname not in ivars: ivars[vname] = v free_vars = set() for vname, assoc in data.items(): free_vars.add(zip(*assoc)[0]) free_vars = list(free_vars) for vname, assoc in data.items(): v, indexvars, dim = merge_variable(assoc) outdata[vname] = v for iname, value in indexvars.items(): outdata.ivardata[iname] = value.dims[0] for v in outdata.vardata.keys(): if v in outdata.ivardata: del outdata.vardata[v] for v in outdata.vardata.values(): for k in v.dims: if k.name in outdata.ivardata: if ((isinstance(k, DimRep) and not isinstance(outdata.ivardata[k.name], DimRep))): outdata.replace_dim(outdata.ivardata[k.name], k) cmt = Comments() for block in blocks: if block.comments: cmt.extend(block.comments) outdata.comments = cmt outdata.blockname = blocks[0].blockname for vname, v in ivars.items(): if vname not in outdata: outdata[vname] = v #import pdb;pdb.set_trace() return outdata