def LoadPlotfile(filenames): nwalkers_0 = -1 ndim_0 = -1 iters = -1 iter = -1 for filename in filenames: pf = pymc.UqPlotfile() pf.Read(filename) nwalkers = pf.NWALKERS() ndim = pf.NDIM() if nwalkers_0 < 0: nwalkers_0 = nwalkers else: if nwalkers != nwalkers_0: print 'Plotfiles incompatible' if ndim_0 < 0: ndim_0 = ndim else: if ndim != ndim_0: print 'Plotfiles incompatible' iter1 = pf.ITER() if iter < 0: iter = iter1 else: if iter1 != iter + iters: print 'plotfiles out of sequence' iters1 = pf.NITERS() if iters < 0: iters = iters1 else: iters += iters1 ret = np.zeros((nwalkers, iters, ndim)) for filename in filenames: print('Loading plotfile: ' + filename) pf = pymc.UqPlotfile() pf.Read(filename) iters1 = pf.NITERS() iter1 = pf.ITER() p0 = pf.LoadEnsemble(iter1, iters1) for walker in range(0, nwalkers): for it in range(0, iters1): for dim in range(0, ndim): index = walker + nwalkers * it + nwalkers * iters1 * dim ret[walker, iter1 + it - iter, dim] = p0[index] return ret, nwalkers, ndim, iters, iter
def WritePlotfile(samples, ndim, outFilePrefix, nwalkers, step, nSteps, nDigits, rstate): if nDigits > 0: fmt = "%0" + str(nDigits) + "d" lastStep = step + nSteps - 1 filename = outFilePrefix + '_' + (fmt % step) + '_' + (fmt % lastStep) else: filename = outFilePrefix if rank == 0: print('Writing plotfile: ' + filename) C_array_size = nSteps * ndim * nwalkers x_for_c = pymc.DoubleVec(C_array_size) for walker in range(0, nwalkers): for it in range(0, nSteps): for dim in range(0, ndim): index = walker + nwalkers * it + nwalkers * nSteps * dim x_for_c[index] = samples[dim, step + it] if rstate == None: rstateString = '' else: rstateString = cPickle.dumps(rstate) pf = pymc.UqPlotfile(x_for_c, ndim, nwalkers, step, nSteps, rstateString) pf.Write(filename)
def WritePlotfile(driver, outFilePrefix, nwalkers, step, nSteps, nDigits, rstate): fmt = "%0" + str(nDigits) + "d" lastStep = step + nSteps - 1 filename = outFilePrefix + '_' + (fmt % step) + '_' + (fmt % lastStep) if rank == 0: print('Writing plotfile: ' + filename) x = driver.sampler.chain ndim = driver.NumParams() C_array_size = nSteps * ndim * nwalkers x_for_c = pymc.DoubleVec(C_array_size) for walker in range(0, nwalkers): for it in range(0, nSteps): for dim in range(0, ndim): index = walker + nwalkers * it + nwalkers * nSteps * dim x_for_c[index] = x[walker, it, dim] if rstate == None: rstateString = '' else: rstateString = cPickle.dumps(rstate) pf = pymc.UqPlotfile(x_for_c, ndim, nwalkers, step, nSteps, rstateString) pf.Write(filename)
def LoadPlotfile(driver,filename): if rank == 0: print('Loading plotfile: '+filename) pf = pymc.UqPlotfile() pf.Read_serial(filename) if rank == 0: print('Done Loading plotfile: '+filename) t_nwalkers = pf.NWALKERS() t_ndim = pf.NDIM() t_iters = 1 rstate = cPickle.loads(pf.RSTATE()) iter = pf.ITER() + pf.NITERS() - 1 p0 = pf.LoadEnsemble(iter, t_iters) ret = [] for walker in range(0, t_nwalkers): ret.append(np.zeros(t_ndim)) for dim in range(0, t_ndim): ret[walker][dim] = p0[walker + t_nwalkers*dim] return ret, iter, rstate
def WritePlotfile(x, np, filename): nSteps = len(x) / np if nSteps == 0: print 'Not enough data for even one sample' exit() if np * nSteps != len(x): print 'len(x) not an integer mult of np' exit() nwalkers = 1 rstateString = '' step = 0 pf = pymc.UqPlotfile(x, np, nwalkers, step, nSteps, rstateString) print 'writing ', filename, nSteps pf.Write(filename)
def WritePlotfile(x, filename, ndim, nwalkers, step, nSteps, rstate): print('Writing plotfile: ' + filename) C_array_size = nSteps * ndim * nwalkers x_for_c = pymc.DoubleVec(C_array_size) for walker in range(0, nwalkers): for it in range(0, nSteps): for dim in range(0, ndim): index = walker + nwalkers * it + nwalkers * nSteps * dim x_for_c[index] = x[walker, it, dim] if rstate == None: rstateString = '' else: rstateString = cPickle.dumps(rstate) pf = pymc.UqPlotfile(x_for_c, ndim, nwalkers, step, nSteps, rstateString) pf.Write(filename)
def LoadPlotfile(filename): if rank == 0: print('Loading plotfile: ' + filename) pf = pymc.UqPlotfile() pf.Read(filename) nwalkers = pf.NWALKERS() ndim = pf.NDIM() iters = pf.NITERS() iter = pf.ITER() p0 = pf.LoadEnsemble(iter, iters) ret = [] for walker in range(0, nwalkers): for it in range(0, iters): ret.append(np.zeros(ndim)) for dim in range(0, ndim): index = walker + nwalkers * it + nwalkers * iters * dim ret[-1][dim] = p0[index] return ret
def WritePlotfile(x, ndim, outFilePrefix, nwalkers, step, nSteps, nDigits, rstate): fmt = "%0" + str(nDigits) + "d" lastStep = step + nSteps - 1 filename = outFilePrefix + '_' + (fmt % step) + '_' + (fmt % lastStep) C_array_size = nSteps * ndim * nwalkers x_for_c = pymc.DoubleVec(C_array_size) for walker in range(0, nwalkers): for it in range(0, nSteps): for dim in range(0, ndim): index = walker + nwalkers * it + nwalkers * nSteps * dim x_for_c[index] = x[walker, it, dim] if rstate is None: rstateString = '' else: rstateString = cPickle.dumps(rstate) pf = pymc.UqPlotfile(x_for_c, ndim, nwalkers, step, nSteps, rstateString) pf.Write(filename)
def LoadPlotfile(filename, iters_in = -1): if rank == 0: print('Loading plotfile: '+filename) pf = pymc.UqPlotfile() pf.Read(filename) t_nwalkers = pf.NWALKERS() t_ndim = pf.NDIM() t_iters = pf.NITERS() if iters_in > 0: t_iters = iters_in rstate = 0 try: rstate = cPickle.loads(pf.RSTATE()) except EOFError: pass except: raise iter = pf.ITER() + pf.NITERS() - t_iters p0 = pf.LoadEnsemble(iter,t_iters) ret = np.zeros(t_nwalkers*t_iters*t_ndim).reshape(t_nwalkers,t_iters,t_ndim) for walker in range(0,t_nwalkers): for it in range(0,t_iters): for dim in range(0,t_ndim): index = walker + t_nwalkers*it + t_nwalkers*t_iters*dim ret[walker,it,dim] = p0[index] if rank == 0: print('Finished loading plotfile: '+filename) return ret, iter, rstate
def LoadPlotfile(filenames): nwalkers_0 = -1 ndim_0 = -1 iters = -1 iter = -1 for filename in filenames: pf = pymc.UqPlotfile() pf.Read(filename) nwalkers = pf.NWALKERS() ndim = pf.NDIM() if nwalkers_0 < 0: nwalkers_0 = nwalkers else: if nwalkers != nwalkers_0: print 'Plotfiles incompatible' if ndim_0 < 0: ndim_0 = ndim else: if ndim != ndim_0: print 'Plotfiles incompatible' iter1 = pf.ITER() if iter < 0: iter = iter1 else: if iter1 != iter + iters: print 'plotfiles out of sequence' iters1 = pf.NITERS() if iters < 0: iters = iters1 else: iters += iters1 ret = np.zeros((nwalkers, iters, ndim)) iterFirst = iter itersPrev = 0 print 'iterFirst:', iterFirst print 'nwalkers', nwalkers print 'iters', iters print 'ndim', ndim for filename in filenames: print('Loading plotfile: ' + filename) pf = pymc.UqPlotfile() pf.Read(filename) iter1 = pf.ITER() iters1 = pf.NITERS() p0 = pf.LoadEnsemble(iter1, iters1) for walker in range(0, nwalkers): for it in range(0, iters1): for dim in range(0, ndim): #index = walker + nwalkers*(it-iter1) + nwalkers*iters1*dim index = walker + nwalkers * it + nwalkers * iters1 * dim if ((it == 0 and walker == 0 and dim == 0) or (it == iters1 - 1 and walker == nwalkers - 1 and dim == ndim - 1)): print 'record, index', index, 'len(p0)', len(p0) print ' ret w,i,d:', walker, iter1 + it + itersPrev, dim ret[walker, iter1 + it + itersPrev, dim] = p0[index] #itersPrev = iters1 # uncomment if we are combining a bunch of pltfiles starting from 0, rather than a sequence return ret, nwalkers, ndim, iters, iter