Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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