diff --git a/UB14/14flow.ipynb b/UB14/14flow.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..f2c5a0c39f1480dd3e6d70557cc5c6fa7baa9fa3
--- /dev/null
+++ b/UB14/14flow.ipynb
@@ -0,0 +1,1511 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%load_ext autoreload\n",
+    "%autoreload 2"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import torch\n",
+    "import torch.nn as nn\n",
+    "from IPython.display import clear_output\n",
+    "import numpy as np\n",
+    "from utils import MLP, train_BG\n",
+    "import matplotlib.pyplot as plt\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'cpu'"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# check if a GPU is available\n",
+    "DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
+    "DEVICE"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1.1 RealNVP layer"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "class RealNVPLayer(nn.Module):\n",
+    "    \"\"\"Transform a batch of two dimensional prior sample\n",
+    "    Args:\n",
+    "\n",
+    "    \"\"\"\n",
+    "    def __init__(self,\n",
+    "                 unchanged_indices, \n",
+    "                 dim_layers=3, \n",
+    "                 dim_nodes=48):\n",
+    "        \n",
+    "\n",
+    "        super().__init__()\n",
+    "        self.unchanged_indices = unchanged_indices\n",
+    "        self.s_theta = MLP(n_units=[1] + [dim_nodes]*dim_layers +[1])\n",
+    "        self.t_theta = MLP(n_units=[1] + [dim_nodes]*dim_layers +[1])\n",
+    "\n",
+    "\n",
+    "    def forward(self, z):\n",
+    "        z1, z2 = torch.split(z, [len(self.unchanged_indices), z.size(1) - len(self.unchanged_indices)], dim=1)\n",
+    "        x1 = z1\n",
+    "        x2 = z2 * torch.exp(self.s_theta(z1)) + self.t_theta(z1)        \n",
+    "        x = torch.cat([x1, x2], dim=1)\n",
+    "        \n",
+    "        return x, self.s_theta, self.t_theta"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 81,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "torch.Size([10, 2, 10, 2])\n"
+     ]
+    }
+   ],
+   "source": [
+    "### not sure how to test\n",
+    "\n",
+    "from torch.autograd.functional import jacobian\n",
+    "\n",
+    "a_RealNVPLayer = RealNVPLayer(unchanged_indices=[0])\n",
+    "z_samples = torch.randn(10, 2)\n",
+    "x, s_theta, t_theta = a_RealNVPLayer.forward(z_samples)\n",
+    "\n",
+    "\n",
+    "def transform(z):\n",
+    "    x1 = z[:, 0:1]\n",
+    "    x2 = z[:, 1:2] * torch.exp(s_theta(x1)) + t_theta(x1)\n",
+    "    return torch.cat([x1, x2], dim=1)\n",
+    "\n",
+    "\n",
+    "jacobi = jacobian(func=transform, inputs=z_samples)\n",
+    "print(jacobi.shape)\n",
+    "# batch_size, _, _, _ = jacobi.shape\n",
+    "# jacobi = jacobi.view(batch_size, 2, 2)\n",
+    "# print(jacobi.shape)\n",
+    "# torch.det(jacobi)\n",
+    "# # print(s_theta(z_samples[:, 0:1]).shape)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1.2 Coupling Flow"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Affine transformation"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def affine_transform_forward(\n",
+    "    changed, fixed, shift_transformation, scale_transformation\n",
+    "):\n",
+    "    \"\"\"\n",
+    "    Affine transformation.\n",
+    "\n",
+    "    Parameters:\n",
+    "    -----------\n",
+    "    changed: Configuration part to be changed of shape [batch_size, 1].\n",
+    "\n",
+    "    fixed: Configuration part to be conditioned on of shape [batch_size, 1].\n",
+    "\n",
+    "    shift_transformation: Neural network (pytorch model)\n",
+    "\n",
+    "    scale_transformation: Neural network (pytorch model)\n",
+    "\n",
+    "    \"\"\"\n",
+    "    mu = shift_transformation(fixed)\n",
+    "\n",
+    "    # we add a tanh for numerical stability\n",
+    "    log_sigma = torch.tanh(scale_transformation(fixed))\n",
+    "\n",
+    "    sigma = torch.exp(log_sigma)\n",
+    "\n",
+    "    changed = changed * sigma + mu\n",
+    "    log_det_jac = log_sigma\n",
+    "\n",
+    "    return changed, log_det_jac"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Let's look at an example of this affine transformation:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "net_scale = MLP([1,12,12,1])\n",
+    "net_shift = MLP([1,12,12,1])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pos = torch.arange(24.).reshape(12,2)\n",
+    "id_fixed, id_changed = 0,1"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "changed, ldj = affine_transform_forward(\n",
+    "    pos[:, [id_changed]], pos[:, [id_fixed]], net_shift, net_scale\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 55,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(torch.Size([12, 1]), torch.Size([12, 1]))"
+      ]
+     },
+     "execution_count": 55,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "changed.shape, ldj.shape\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We build the transformed array"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 56,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "new_pos = torch.zeros_like(pos)\n",
+    "new_pos[:,[id_changed]] = changed\n",
+    "new_pos[:,[id_fixed]] =  pos[:, [id_fixed]]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 57,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "False"
+      ]
+     },
+     "execution_count": 57,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "torch.allclose(new_pos[:, id_changed], pos[:, id_changed])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 58,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 58,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "torch.allclose(new_pos[:, id_fixed], pos[:, id_fixed])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Coupling layer consisting of an affine transformation"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "class CouplingLayer(torch.nn.Module):\n",
+    "\n",
+    "    def __init__(self, fixed_id, changed_id):\n",
+    "        \"\"\"\n",
+    "        Coupling layer.\n",
+    "\n",
+    "        Parameters:\n",
+    "        -----------\n",
+    "        pos: Configuration of shape [batch_size, 2].\n",
+    "\n",
+    "        \"\"\"\n",
+    "\n",
+    "        super().__init__()\n",
+    "        self.fixed_id = fixed_id\n",
+    "        self.changed_id = changed_id\n",
+    "\n",
+    "        self.net_translate = MLP([1,64,64,64,1]).to(DEVICE)\n",
+    "        self.net_scale = MLP([1,64,64,64,1]).to(DEVICE)\n",
+    "\n",
+    "    def forward(self, pos):\n",
+    "        \"\"\"\n",
+    "        Forward coupling.\n",
+    "\n",
+    "        Parameters:\n",
+    "        -----------\n",
+    "        pos: Configuration of shape [batch_size, 2].\n",
+    "\n",
+    "        Returns:\n",
+    "        -----------\n",
+    "        new_pos: Transformed configuration of shape [batch_size, 2].\n",
+    "\n",
+    "        log_det_jacobian: Jacobian of the transformations of shape [batch_size,].\n",
+    "\n",
+    "        \"\"\"\n",
+    "\n",
+    "        changed, log_det_jacobian = affine_transform_forward(pos[:, [self.changed_id]], pos[:, [self.fixed_id]], self.net_translate, self.net_scale)\n",
+    "\n",
+    "        new_pos = torch.zeros_like(pos)\n",
+    "        new_pos[:,[self.changed_id]] = changed\n",
+    "        new_pos[:,[self.fixed_id]] =  pos[:, [self.fixed_id]]\n",
+    "\n",
+    "        return new_pos, log_det_jacobian"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(tensor([[[[ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[-0.0901,  0.9842],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [-0.2139,  0.8027],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.2939,  0.7072],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.3570,  0.6277],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.3376,  0.5580],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.3111,  0.5062],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.2780,  0.4682],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.2442,  0.4405],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.2127,  0.4203],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.1849,  0.4058],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.1613,  0.3953],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 1.0000,  0.0000]],\n",
+      "\n",
+      "         [[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.1418,  0.3876]]]]), tensor([[[[-0.1334,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [-0.0612,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0619,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0642,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0537,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0437,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0346,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0267,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0203,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0152,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0113,  0.0000],\n",
+      "          [ 0.0000,  0.0000]]],\n",
+      "\n",
+      "\n",
+      "        [[[ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [ 0.0000,  0.0000],\n",
+      "          [-0.0083,  0.0000]]]]))\n",
+      "tensor([[ 1.0000,  0.0000],\n",
+      "        [-0.0901,  0.9842]])\n",
+      "tensor([[-0.0159],\n",
+      "        [-0.2197],\n",
+      "        [-0.3464],\n",
+      "        [-0.4657],\n",
+      "        [-0.5835],\n",
+      "        [-0.6808],\n",
+      "        [-0.7589],\n",
+      "        [-0.8199],\n",
+      "        [-0.8667],\n",
+      "        [-0.9019],\n",
+      "        [-0.9282],\n",
+      "        [-0.9477]], grad_fn=<TanhBackward0>)\n"
+     ]
+    }
+   ],
+   "source": [
+    "from torch.autograd.functional import jacobian\n",
+    "\n",
+    "id_fixed, id_changed = 0,1\n",
+    "net_scale = MLP([1,12,12,1])\n",
+    "net_shift = MLP([1,12,12,1])\n",
+    "net_shift_tensor = net_shift(pos[:, [id_fixed]])\n",
+    "net_scale_tensor = net_scale(pos[:, [id_fixed]])\n",
+    "\n",
+    "a_coupling_layer = CouplingLayer(fixed_id=0, changed_id=1)\n",
+    "new_pos, log_det_jacobian = a_coupling_layer.forward(pos)\n",
+    "\n",
+    "jacobi = jacobian(a_coupling_layer.forward, pos)\n",
+    "\n",
+    "# print(jacobi)\n",
+    "print(jacobi[0][0,:,0,:])\n",
+    "\n",
+    "print(log_det_jacobian)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Coupling flow consisting of multiple coupling layers"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import itertools\n",
+    "\n",
+    "class CouplingFlow(torch.nn.Module):\n",
+    "    def __init__(\n",
+    "        self,\n",
+    "        num_coupling_blocks: int,\n",
+    "    ):\n",
+    "        super().__init__()\n",
+    "        self.blocks = torch.nn.ModuleList()\n",
+    "\n",
+    "        # add coupling layers using self.blocks.append()\n",
+    "        # for _ in range(num_coupling_blocks):\n",
+    "        #     self.blocks.append(CouplingLayer(fixed_id=0, changed_id=1))\n",
+    "\n",
+    "        permutations = list(itertools.permutations([0,1]))\n",
+    "\n",
+    "        for _ in range(num_coupling_blocks):\n",
+    "            for fixed_idxs, changed_idxs in permutations:\n",
+    "                self.blocks.append(\n",
+    "                    CouplingLayer(fixed_id=fixed_idxs,changed_id=changed_idxs\n",
+    "                    )\n",
+    "                )\n",
+    "\n",
+    "\n",
+    "    def forward(self, pos):\n",
+    "        \"\"\"\n",
+    "        Forward coupling.\n",
+    "\n",
+    "        Parameters:\n",
+    "        -----------\n",
+    "        pos: Configuration of shape [batch_size, 2].\n",
+    "\n",
+    "        Returns:\n",
+    "        -----------\n",
+    "        new_pos: Transformed configuration of shape [batch_size, 2].\n",
+    "\n",
+    "        log_det_jacobian: Jacobian of the transformations of shape [batch_size,].\n",
+    "\n",
+    "        \"\"\"\n",
+    "\n",
+    "        log_det_jacobian = 0\n",
+    "        # Iterate through the coupling blocks\n",
+    "        for block in self.blocks:\n",
+    "            # Apply the coupling layer\n",
+    "            pos, ldj = block(pos)\n",
+    "            log_det_jacobian += ldj\n",
+    "\n",
+    "        return pos, log_det_jacobian"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 204,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(tensor([[0.5000, 0.5211]], grad_fn=<CopySlices>),\n",
+       " tensor([[0.1765]], grad_fn=<TanhBackward0>))"
+      ]
+     },
+     "execution_count": 204,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "\n",
+    "from torch.autograd.functional import jacobian\n",
+    "\n",
+    "a_coupling_layer = CouplingLayer(fixed_id=0, changed_id=1)\n",
+    "test_input = torch.tensor([[0.5,0.5]])\n",
+    "\n",
+    "test_out, test_ldj = a_coupling_layer.forward(test_input)\n",
+    "test_out, test_ldj"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 215,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(tensor([[0.4761, 0.6706]], grad_fn=<CopySlices>),\n",
+       " tensor([[-0.0112]], grad_fn=<AddBackward0>))"
+      ]
+     },
+     "execution_count": 215,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "\n",
+    "from torch.autograd.functional import jacobian\n",
+    "\n",
+    "flow = CouplingFlow(num_coupling_blocks=1)\n",
+    "test_input = torch.tensor([[0.5,0.5]])\n",
+    "test_out, test_ldj = flow.forward(test_input)\n",
+    "test_out, test_ldj"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 127,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "tensor([[ 1.0000e+00,  0.0000e+00],\n",
+      "        [ 9.8300e-01, -4.9287e-07]])\n",
+      "tensor(nan)\n"
+     ]
+    }
+   ],
+   "source": [
+    "jac = jacobian(flow.forward, test_input)\n",
+    "jac_pos = jac[0].reshape(2,2)\n",
+    "print(jac_pos)\n",
+    "print(torch.log(torch.linalg.det(jac_pos)))\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(torch.Size([1, 2, 1, 2]), torch.Size([1, 1, 1, 2]))"
+      ]
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "jac[0].shape, jac[1].shape\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Prior"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To sample the prior, we can use pre-defined distributions."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "mean = torch.zeros(2, device=DEVICE)\n",
+    "std = torch.ones(2, device=DEVICE)\n",
+    "\n",
+    "prior = torch.distributions.normal.Normal(mean, std)    "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We can sample from the prior and compute the energy using the following code:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(torch.Size([50, 2]), torch.Size([50]))"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "samples = prior.sample([50])\n",
+    "energies_prior = -prior.log_prob(samples).sum(axis=-1)\n",
+    "samples.shape, energies_prior.shape"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1.3 Energy-based training"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# potential\n",
+    "def Vpot(r: torch.Tensor):\n",
+    "    x = r[:, 0:1]\n",
+    "    y = r[:, 1:2]\n",
+    "    f = (x**2 - 1.5)**2 + 0.05*y**2\n",
+    "    return f.sum(axis=-1)\n",
+    "\n",
+    "class RealNVPLoss(nn.Module):\n",
+    "    \"\"\"Get the NLL loss for a RealNVP model.\n",
+    "    \"\"\"\n",
+    "    def __init__(self):\n",
+    "        super().__init__()\n",
+    "    \n",
+    "\n",
+    "    def Vpot(r):\n",
+    "        x = r[0]\n",
+    "        y = r[1]\n",
+    "        f = (x**2 - 1.5)**2 + 0.05*y**2\n",
+    "        return f\n",
+    "\n",
+    "\n",
+    "    def forward(self, model: torch.Tensor, prior_samples: torch.Tensor, beta=3.0):\n",
+    "        z, sldj = model.forward(prior_samples)\n",
+    "        diff = beta*Vpot(z) - sldj # gibbs inequality\n",
+    "        return diff.mean()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 224,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 2000/2000 [00:32<00:00, 62.31it/s]\n"
+     ]
+    }
+   ],
+   "source": [
+    "from tqdm import trange\n",
+    "\n",
+    "model = CouplingFlow(num_coupling_blocks=5)\n",
+    "criterion = RealNVPLoss()\n",
+    "optimizer = torch.optim.Adam(model.parameters(),lr=1e-4)\n",
+    "batch_size = 10\n",
+    "\n",
+    "epochs = 2000\n",
+    "log_interval = 50\n",
+    "\n",
+    "losses_train = []\n",
+    "for epoch in trange(epochs):\n",
+    "    samples = prior.sample([50])\n",
+    "    loss_train = train_BG(samples, model, optimizer, criterion)\n",
+    "\n",
+    "    if epoch % log_interval == 0:\n",
+    "        print(f'Train Epoch: {epoch} Loss: {loss_train:.6f}')\n",
+    "\n",
+    "        losses_train.append(loss_train)\n",
+    "\n",
+    "        clear_output(wait=True)\n",
+    "\n",
+    "        plt.plot(losses_train)\n",
+    "        plt.yscale('log')\n",
+    "        plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 225,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "torch.save(model.state_dict(), \"model_BG.torch\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Reweight"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<All keys matched successfully>"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "model = CouplingFlow(num_coupling_blocks=5)\n",
+    "model.load_state_dict(torch.load(\"model_BG.torch\"))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "beta = 3.0\n",
+    "\n",
+    "def log_weights_given_latent(prior_samples, flow):\n",
+    "    mapped_samples, ldj = flow.forward(prior_samples)\n",
+    "    ldj = ldj.view(-1)\n",
+    "    print(f\"{mapped_samples.shape=}\")\n",
+    "    print(f\"{ldj.shape=}\")\n",
+    "    print(f\"{ldj=}\")\n",
+    "    prior_energy  = - prior.log_prob(prior_samples).sum(axis=-1)\n",
+    "    print(f\"{prior_energy.shape=}\")\n",
+    "    target_energy = Vpot(mapped_samples)\n",
+    "    print(f\"{prior_energy.shape=}\")\n",
+    "\n",
+    "    logw = prior_energy - beta * target_energy + ldj\n",
+    "    print(f\"{logw.shape=}\")\n",
+    "\n",
+    "    return logw.view(-1)\n",
+    "\n",
+    "''' the original sample size divided by the design effect to reflect\n",
+    " the variance from the current sampling design as compared to what would be \n",
+    " if the sample was a simple random sample'''\n",
+    "def effective_sample_size(log_weights):\n",
+    "    \"\"\"Kish effective sample size; log weights don't have to be normalized\"\"\"\n",
+    "    return torch.exp(2*torch.logsumexp(log_weights, dim=0) - torch.logsumexp(2*log_weights, dim=0))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## MD Data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "md_data = torch.from_numpy(np.load(\"traj_2d_potential.npy\"))\n",
+    "md_energies = Vpot(md_data)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "plt.scatter(md_data[:,0], md_data[:,1]);"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "samples = prior.sample([5000])\n",
+    "with torch.no_grad():\n",
+    "    mapped_samples, ldj = model.forward(samples)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "mapped_samples.shape=torch.Size([5000, 2])\n",
+      "ldj.shape=torch.Size([5000])\n",
+      "ldj=tensor([-0.8604, -0.3027, -1.1391,  ..., -0.8114,  0.2858, -0.7878])\n",
+      "prior_energy.shape=torch.Size([5000])\n",
+      "prior_energy.shape=torch.Size([5000])\n",
+      "logw.shape=torch.Size([5000])\n"
+     ]
+    }
+   ],
+   "source": [
+    "log_weights=0\n",
+    "with torch.no_grad():\n",
+    "    log_weights = log_weights_given_latent(samples, model)\n",
+    "    mapped_energy = Vpot(model.forward(samples)[0])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "torch.Size([5000])\n",
+      "torch.Size([5000])\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(mapped_energy.shape)\n",
+    "print(log_weights.shape)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "plt.hist(mapped_energy,alpha=.5, density=True);\n",
+    "plt.hist(mapped_energy,weights =log_weights.exp().detach().numpy(),alpha=.5, density=True);\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "tensor(0.8823)"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "ess_flow = effective_sample_size(log_weights)\n",
+    "ess_flow / 5000"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "tensor([ 1.3038,  1.1460,  1.5785,  ...,  1.2222, -1.1719,  1.2206])"
+      ]
+     },
+     "execution_count": 41,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mapped_samples[:,0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 49,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<matplotlib.colorbar.Colorbar at 0x7f6d9c1bc100>"
+      ]
+     },
+     "execution_count": 49,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "\n",
+    "plt.hist2d(mapped_samples[:,0].tolist(), mapped_samples[:,1].tolist(), bins=50);\n",
+    "plt.colorbar()\n",
+    "# plt.hist2d(mapped_samples[:,0].tolist(), mapped_samples[:,1].tolist(), bins=50, weights=log_weights .exp().detach().numpy())"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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r76q3Nxc5ebm6gc/+IF++MMf6tixxh/w2KLnmdWJff/737fmzZvnsG7QoEHWM88802j7p59+2ho0aJDDuieeeMIaOXJkq9VoIleP2969ey1J1vnz59ugOvNJsrZs2dJkG861hq7nuHGuNVReXm5JsnJycpy24Xxr6HqOG+dbQ71797bWrl3b6LaWPM86bc9JdXW18vLyFB8f77A+Pj5eBw4caHSfgwcPNmg/efJk5ebm6urV5h9r3hm4c9zqDRs2TKGhoZo4caL27t3bmmV2eJxrN4Zz7Z8qKiokSX369HHahvOtoes5bvU436Ta2lpt2rRJly5dUlxcXKNtWvI867Th5OzZs6qtrW3wQMKQkJAGDyKsV1ZW1mj7mpoanT17ttVqNYk7xy00NFSrV69WRkaGMjMzFRUVpYkTJ2rfvn1tUXKHxLnmHs41R5ZlKSkpSaNHj1Z0dLTTdpxvjq73uHG+SUePHlWPHj3k6+urefPmacuWLbrjjjsabduS55nL09d3NDabzWHZsqwG65pr39j6zs6V4xYVFaWoqCj7clxcnEpKSrR06VKNHTu2VevsyDjXXMe55mjBggU6cuSI9u/f32xbzrd/ut7jxvl27RgcPnxYFy5cUEZGhmbPnq2cnBynAaWlzrNO23MSFBQkLy+vBv+1X15e3iDZ1evbt2+j7bt27arAwMBWq9Uk7hy3xowcOVKnTp1q6fI6Dc61luOp59rChQu1bds27d27V/369WuyLefbP7ly3Brjaeebj4+PbrvtNo0YMUIpKSmKiYnRW2+91WjbljzPOm048fHxUWxsrLKyshzWZ2VladSoUY3uExcX16D97t27NWLECHl7e7darSZx57g1Jj8/X6GhoS1dXqfBudZyPO1csyxLCxYsUGZmpvbs2aPIyMhm9+F8c++4NcbTzrdvsyxLVVVVjW5r0fPM5SG0HcimTZssb29va926ddbx48etxYsXWzfddJNVVFRkWZZlPfPMM9bMmTPt7b/44gure/fuVmJionX8+HFr3bp1lre3t/X++++311doF64etzfffNPasmWLdfLkSet///d/rWeeecaSZGVkZLTXV2hzFy9etPLz8638/HxLkrVs2TIrPz/fOn36tGVZnGvOuHrcONcs66c//akVEBBgZWdnW6WlpfbX119/bW/D+daQO8fN08+35ORka9++fVZhYaF15MgR69lnn7W6dOli7d6927Ks1j3POnU4sSzLWrlypXXrrbdaPj4+1vDhwx1uG5s9e7Y1btw4h/bZ2dnWsGHDLB8fH6t///5WWlpaG1dsBleO22uvvWZ95zvfsfz8/KzevXtbo0ePtrZv394OVbef+lsOv/2aPXu2ZVmca864etw416xGj5ckKz093d6G860hd46bp59vjz76qP134Oabb7YmTpxoDyaW1brnmc2y/m+0CgAAgAE67ZgTAADQMRFOAACAUQgnAADAKIQTAABgFMIJAAAwCuEEAAAYhXACAACMQjgBAABGIZwAAACjEE4AAIBRCCcAAMAohBMAAGCU/w9VmJ0OVf+DcwAAAABJRU5ErkJggg==",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "plt.hist(md_energies.detach().numpy(),alpha=.5,density=True, bins=50,label=\"MD\")\n",
+    "plt.hist(mapped_energy, alpha=.5, density=True, bins=50,label=\"Mapped\");\n",
+    "plt.hist(mapped_energy,weights =log_weights .exp().detach().numpy(),alpha=.5, density=True, bins=50,label=\"Reweighted\");\n",
+    "plt.legend()\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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7rnnHjMzu/7668MatugFvZR0IS9NDQCFjrkxfKH2EbnnnnusrKzMVq1aZadOnbJLLrnEnnrqKZs8eXKYwwIAgCIRcc453zsxmu7ubksmk3aVLbeySLBd8AoVd0QAIHzMjeHKuAHbZo9aKpWy2traMWNZawYAAHhDIgIAALwhEQEAAN6Evvrue/Hux1cyNmBWsJ9kCVZEPE7nxM+IBLw9ACgFzI3hytjvzpvyMdSCTkTebYr2S3vc857kUabAtwcApYC5MS96enosmUyOGVPQVTPZbNY6OzutpqbGIpFI3sfv7u62pqYm6+joyPmp34mGczM6zs3oODej49yMjnMzukI9N8456+npsZkzZ1o0OvanQAr6jkg0GrVZs2b53g2rra0tqBe4kHBuRse5GR3nZnScm9FxbkZXiOcm152Qd/FhVQAA4A2JCAAA8IZEZAyJRMLuuOMOVgQ+A87N6Dg3o+PcjI5zMzrOzehK4dwU9IdVAQBAaeOOCAAA8IZEBAAAeEMiAgAAvCERAQAA3pCI/IG///u/t0svvdQqKyutrq5O+p7Pfe5zFolEhj0WLVoU7o56cDbnxjln69evt5kzZ1pFRYVdddVV9sorr4S7ox6cOHHCVq1aZclk0pLJpK1atcq6urrG/J5SvW6++93v2ty5c23SpEnW0tJizzzzzJjxTz/9tLW0tNikSZPs3HPPte9973t52tP8G8+52bZt24jrIxKJ2GuvvZbHPc6P7du32x//8R/bzJkzLRKJ2COPPJLzeybKdTPec1OM1w2JyB/o7++366+/3r7whS+M6/uWLVtmBw4cGHo8/njprY9zNufmm9/8pt133312//33265du2zGjBn2sY99bGgdoVLx53/+5/bCCy/YE088YU888YS98MILtmrVqpzfV2rXzYMPPmi33HKL3X777bZnzx674oor7Nprr7X29vYzxr/11lv2iU98wq644grbs2eP/c3f/I3dfPPN9tBDD+V5z8M33nPzrr179w67Rs4///w87XH+nDx50j70oQ/Z/fffL8VPpOtmvOfmXUV13Tic0aZNm1wymZRiV69e7ZYvXx7q/hQS9dxks1k3Y8YM941vfGPoudOnT7tkMum+973vhbiH+fXqq686M3PPPvvs0HM7d+50ZuZee+21Ub+vFK+bj3zkI27NmjXDnrvgggvcbbfddsb4r371q+6CCy4Y9txf/uVfukWLFoW2j76M99xs3brVmZk7ceJEHvaucJiZe/jhh8eMmUjXzX+nnJtivG64IxKQbdu2WUNDg73vfe+zG2+80Q4fPux7l7x766237ODBg7Z06dKh5xKJhF155ZW2Y8cOj3sWrJ07d1oymbRLLrlk6LlFixZZMpnMeZyldN309/fb7t27h73eZmZLly4d9Tzs3LlzRPzHP/5xe+6552xgoHSWXz+bc/OuhQsXWmNjo11zzTW2devWMHezaEyU6+a9KKbrhkQkANdee639+Mc/tqeeesq+9a1v2a5du+yjH/2opdNp37vm1cGDB83MbPr06cOenz59+tD/lYKDBw9aQ0PDiOcbGhrGPM5Su26OHj1qg4OD43q9Dx48eMb4TCZjR48eDW1f8+1szk1jY6Nt3LjRHnroIdu8ebPNnz/frrnmGtu+fXs+drmgTZTr5mwU43VT0KvvBmX9+vV25513jhmza9cua21tPavtf+Yznxn694IFC6y1tdXmzJljjz32mP3Jn/zJWW0zX8I+N2ZmkUhk2NfOuRHPFSL13JiNPEaz3MdZzNfNWMb7ep8p/kzPl4LxnJv58+fb/Pnzh75evHixdXR02L333mtLliwJdT+LwUS6bsajGK+bCZGI3HTTTbZixYoxY5qbmwMbr7Gx0ebMmWO/+c1vAttmWMI8NzNmzDCz3/320tjYOPT84cOHR/w2U4jUc/Piiy/aoUOHRvzfkSNHxnWcxXTdnEl9fb3FYrERv+GP9XrPmDHjjPFlZWU2derU0PY1387m3JzJokWL7Ec/+lHQu1d0Jsp1E5RCv24mRCJSX19v9fX1eRvv2LFj1tHRMeyHb6EK89zMnTvXZsyYYVu2bLGFCxea2e/+Vv7000/b3XffHcqYQVLPzeLFiy2VStmvf/1r+8hHPmJmZr/61a8slUrZpZdeKo9XTNfNmcTjcWtpabEtW7bYpz/96aHnt2zZYsuXLz/j9yxevNj+7d/+bdhzTz75pLW2tlp5eXmo+5tPZ3NuzmTPnj1Fe30EaaJcN0Ep+OvG5ydlC9E777zj9uzZ4+68805XXV3t9uzZ4/bs2eN6enqGYubPn+82b97snHOup6fH/dVf/ZXbsWOHe+utt9zWrVvd4sWL3TnnnOO6u7t9HUYoxntunHPuG9/4hksmk27z5s3upZdecn/2Z3/mGhsbS+7cLFu2zH3wgx90O3fudDt37nQf+MAH3HXXXTcsZiJcNw888IArLy93P/jBD9yrr77qbrnlFldVVeXefvtt55xzt912m1u1atVQ/L59+1xlZaX7yle+4l599VX3gx/8wJWXl7uf/exnvg4hNOM9N//wD//gHn74Yff666+7l19+2d12223OzNxDDz3k6xBC09PTMzSfmJm777773J49e9w777zjnJvY1814z00xXjckIn9g9erVzsxGPLZu3ToUY2Zu06ZNzjnn+vr63NKlS920adNceXm5mz17tlu9erVrb2/3cwAhGu+5ce53Jbx33HGHmzFjhkskEm7JkiXupZdeyv/Oh+zYsWNu5cqVrqamxtXU1LiVK1eOKJ+bKNfNP/3TP7k5c+a4eDzuPvzhD7unn3566P9Wr17trrzyymHx27ZtcwsXLnTxeNw1Nze7DRs25HmP82c85+buu+928+bNc5MmTXKTJ092l19+uXvsscc87HX43i05/cPH6tWrnXMT+7oZ77kpxusm4tx/fcIHAAAgzyjfBQAA3pCIAAAAb0hEAACANyQiAADAGxIRAADgDYkIAADwhkQEAAB4QyICAAC8IREBAADekIgAAABvSEQAAIA3JCIAAMCb/w/WqKAKz/MO0gAAAABJRU5ErkJggg==",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "\n",
+    "plt.hist2d(md_data[:,0].tolist(), md_data[:,1].tolist(), bins=50);"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "mltutorial",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}