Exemple #1
0
def flowBuilder(n,numFlow,innerBuilder=None,typeLayer=3,relax=False,shift=False):
    nn = n*2
    op = source.Gaussian([nn]).to(torch.float64)

    if innerBuilder is None:
        raise Exception("innerBuilder is None")
    if relax:
        f3 = flow.DiagScaling(nn,initValue=0.1*np.random.randn(nn),fix=[0]*n+[0]*n,shift=shift)
    else:
        f3 = flow.DiagScaling(nn,initValue=0.1*np.random.randn(nn),fix=[0]*n+[1]*n,shift=shift)
    layers=[f3]
    if typeLayer == 0:
        layers.append(flow.Symplectic(nn))
    else:
        for d in range(numFlow):
            if typeLayer == 3:
                layers.append(flow.PointTransformation(innerBuilder(n)))
                layers.append(flow.Symplectic(nn))
            elif typeLayer ==2:
                layers.append(flow.Symplectic(nn))
            elif typeLayer ==1:
                layers.append(flow.PointTransformation(innerBuilder(n)))
            elif typeLayer!=0:
                raise Exception("No such type")
    return flow.FlowNet(layers,op).double()
Exemple #2
0
def test_fix():
    p = source.Gaussian([4])
    f = flow.DiagScaling(4, initValue=[2, 3, 4, 5], fix=[1, 0, 1, 0], prior=p)
    t = torch.tensor([2, 3, 4, 5], dtype=torch.float32)
    x, p = f.inverse(t)
    assert_array_almost_equal(
        x.detach().numpy(), t * torch.exp(torch.tensor([0.0, 3.0, 0.0, 5.0])))
    assert_almost_equal(p.item(), 3 + 5)
Exemple #3
0
def extractPPrior(flowCon):
    layers = []
    _diag = flowCon.layerList[0]
    nn = _diag.shift.shape[0] // 2
    _op = source.Gaussian([nn]).to(torch.float64)
    assert _diag.shift.sum() == 0
    assert _diag.fix.sum() == nn
    layers.append(
        flow.DiagScaling(nn, initValue=_diag.elements.clone().detach()[nn:]))
    return flow.FlowNet(layers, _op).to(torch.float64)
Exemple #4
0
def extractFlow(flowCon):
    from copy import deepcopy
    layers = []
    _op = deepcopy(flowCon.prior)
    _rnvp = deepcopy(flowCon.layerList[1].flow)
    _diag = flowCon.layerList[0]
    nn = _diag.shift.shape[0]//2
    layers.append(flow.DiagScaling(nn,initValue=_diag.elements.clone().detach()[:nn]))
    layers.append(_rnvp)
    return flow.FlowNet(layers,_op).double()
Exemple #5
0
def extractFlow(flowCon):
    from copy import deepcopy
    layers = []
    _rnvp = deepcopy(flowCon.layerList[1].flow)
    _diag = flowCon.layerList[0]
    nn = _diag.shift.shape[0] // 2
    _op = source.Gaussian([nn]).to(torch.float64)
    assert _diag.shift.sum() == 0
    assert _diag.fix.sum() == nn
    layers.append(
        flow.DiagScaling(nn, initValue=_diag.elements.clone().detach()[:nn]))
    layers.append(_rnvp)
    return flow.FlowNet(layers, _op).double()
Exemple #6
0
def test_saveload():
    p = source.Gaussian([4])
    f = flow.DiagScaling(4, initValue=[0.01, 0.02, 0.03, 0.04], prior=p)
    blankf = flow.DiagScaling(4, prior=p)
    saveload(f, blankf, decimal=5)
Exemple #7
0
def test_bijective():
    p = source.Gaussian([4])
    f = flow.DiagScaling(4, prior=p)
    bijective(f)