{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Monte Carlo integration by Vegas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Brute force Monte Carlo"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we will implement the simple Monte Carlo method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# simple class to take care of statistically determined quantities\n",
    "class Cumulants:\n",
    "  def __init__(self):\n",
    "    self.sum=0.0    # f_0 + f_1 +.... + f_N\n",
    "    self.sqsum=0.0  # f_0^2 + f_1^2 +....+ f_N^2\n",
    "    self.avg = 0.0  # <f> = 1/N\\sum_i f_i\n",
    "    self.err = 0.0  # sqrt( <f^2>-<f>^2 )/sqrt(N)\n",
    "    self.chisq = 0.0\n",
    "    self.weightsum=0.0\n",
    "    self.avgsum=0.0\n",
    "    self.avg2sum=0.0\n",
    "\n",
    "def SimpleMC(integrant, ndim, unit, maxeval, cum):\n",
    "    nbatch=1000             # function will be evaluated in bacthes of 1000 evaluations at one time (for efficiency and storage issues)\n",
    "    neval=0\n",
    "    for nsamples in range(maxeval,0,-nbatch):  # loop over all_nsample evaluations in batches of nbatch\n",
    "        n = min(nbatch,nsamples)  # How many evaluations in this pass?\n",
    "        xr = unit*random.random((n,ndim)) # generates 2-d array of random numbers in the interval [0,1)\n",
    "        wfun = integrant(xr)  # n function evaluations required in single call\n",
    "        neval += n  # We just added so many fuction evaluations\n",
    "        cum.sum += sum(wfun)      # sum_i f_i*w_i = <fw>\n",
    "        cum.sqsum += sum(wfun*wfun)    # sum_i (f_i*w_i)^2 = <fw^2>/all_nsamples\n",
    "    \n",
    "    cum.avg = cum.sum/neval\n",
    "    w0 = sqrt(cum.sqsum/neval)  # sqrt(<f^2>)\n",
    "    cum.err = sqrt((w0-cum.avg)*(w0+cum.avg)/neval) # sqrt(sqsum-sum**2)\n",
    "    cum.avg *= unit**ndim  # adding units if not [0,1] interval\n",
    "    cum.err *= unit**ndim  # adding units if not [0,1] interval"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We used here a simple trick to avoid overflow, i.e.,\n",
    "\n",
    "\\begin{eqnarray}\n",
    "\\sqrt{\\frac{\\langle f^2\\rangle-\\langle f\\rangle^2}{N}} = \n",
    "\\sqrt{\\frac{(\\sqrt{\\langle f^2\\rangle}-\\langle f\\rangle)(\\sqrt{\\langle f^2\\rangle}+\\langle f\\rangle)}{N}}\n",
    "\\end{eqnarray}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def my_integrant2(x):\n",
    "    \"\"\" For testing, we are integration the function\n",
    "       1/(1-cos(x)*cos(y)*cos(z))/pi^3\n",
    "       in the interval [0,pi]**3\n",
    "    \"\"\"\n",
    "    #nbatch,ndim = shape(x)\n",
    "    return 1.0/(1.0-cos(x[:,0])*cos(x[:,1])*cos(x[:,2]))/pi**3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.38132149425 +- 0.0117424443379 exact= 1.3932\n"
     ]
    }
   ],
   "source": [
    "from scipy import *\n",
    "unit=pi\n",
    "ndim=3\n",
    "maxeval=200000\n",
    "exact = 1.3932  # exact value of the integral\n",
    "    \n",
    "cum = Cumulants()\n",
    "    \n",
    "SimpleMC(my_integrant2, ndim, pi, maxeval, cum)\n",
    "print cum.avg, '+-', cum.err, 'exact=', exact"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Vegas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we define the grid points $g(x)$. At the beginning, we just set $g(x)=x$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Grid:\n",
    "    \"\"\"Contains the grid points g_n(x) with x=[0...1], and g=[0...1]\n",
    "       for Vegas integration. There are n-dim g_n functions.\n",
    "       Constraints : g(0)=0 and g(1)=1.\n",
    "    \"\"\"\n",
    "    def __init__(self, ndim, nbins):\n",
    "        self.g = zeros((ndim,nbins+1))\n",
    "        self.ndim=ndim\n",
    "        self.nbins=nbins\n",
    "        # At the beginning we set g(x)=x\n",
    "        # The grid-points are x_0 = 1/N, x_1 = 2/N, ... x_{N-1}=1.0. \n",
    "        # Note that g(0)=0, and we skip this point on the mesh.\n",
    "        for ibin in range(nbins):\n",
    "            w = (ibin + 1.0)/nbins  \n",
    "            self.g[:,ibin] = w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def Vegas_step1(integrant, unit, maxeval, nstart, nincrease, grid, cum):\n",
    "    ndim, nbins = grid.ndim,grid.nbins  # dimension of the integral, size of the grid for binning in each direction\n",
    "    unit_dim = unit**ndim   # converts from unit cube integration to generalized cube with unit length\n",
    "    nbatch=1000             # function will be evaluated in bacthes of 1000 evaluations at one time (for efficiency and storage issues)\n",
    "    neval=0\n",
    "    print \"\"\"Vegas parameters:\n",
    "       ndim = \"\"\"+str(ndim)+\"\"\"\n",
    "       unit = \"\"\"+str(unit)+\"\"\"\n",
    "       maxeval = \"\"\"+str(maxeval)+\"\"\"\n",
    "       nstart = \"\"\"+str(nstart)+\"\"\"\n",
    "       nincrease = \"\"\"+str(nincrease)+\"\"\"\n",
    "       nbins = \"\"\"+str(nbins)+\"\"\"\n",
    "       nbaths = \"\"\"+str(nbatch)+\"\\n\"\n",
    "\n",
    "    bins = zeros((nbatch,ndim),dtype=int) # in which sampled bin does this point fall?\n",
    "    wgh = zeros(nbatch)                   # weights for each random point in the batch\n",
    "    \n",
    "    all_nsamples = nstart\n",
    "    for nsamples in range(all_nsamples,0,-nbatch):  # loop over all_nsample evaluations in batches of nbatch\n",
    "        n = min(nbatch,nsamples)  # How many evaluations in this pass?\n",
    "        # We are integrating f(g_1(x),g_2(y),g_3(z))*dg_1/dx*dg_2/dy*dg_3/dz dx*dy*dz\n",
    "        # This is represented as  1/all_nsamples \\sum_{x_i,y_i,z_i} f(g_1(x_i),g_2(y_i),g_3(z_i))*dg_1/dx*dg_2/dy*dg_3/dz\n",
    "        #  where dg_1/dx = diff*NBINS\n",
    "        xr = random.random((n,ndim)) # generates 2-d array of random numbers in the interval [0,1)\n",
    "        for i in range(n):\n",
    "            weight = 1.0/all_nsamples\n",
    "            for dim in range(ndim):\n",
    "                # We want to evaluate the function f at point g(x), i.e, f(g_1(x),g_2(y),...)\n",
    "                # Here we transform the points x,y,z -> g_1(x), g_2(y), g_3(z)\n",
    "                # We hence want to evaluate g(x) ~ g(x[i]), where x is the random number and g is the grid function\n",
    "                # The discretized g(t) is defined on the grid :\n",
    "                #       t[-1]=0, t[0]=1/N, t[1]=2/N, t[2]=3/N ... t[N-1]=1.\n",
    "                # We know that g(0)=0 and g(1)=1, so that g[-1]=0.0 and g[N-1]=1.0\n",
    "                # To interpolate g at x, we first compute  i=int(x*N) and then we use linear interpolation\n",
    "                # g(x) = g[i-1] + (g[i]-g[i-1])*(x*N-i)  ;  if i>0\n",
    "                # g(x) =   0    + (g[0]-0)*(x*N-0)       ;  if i=0\n",
    "                #\n",
    "                pos = xr[i,dim]*nbins               # which grid would it fit ? (x*N)\n",
    "                ipos = int(pos)                     # the grid position is ipos : int(x*N)==i\n",
    "                diff = grid.g[dim,ipos] - grid.g[dim,ipos-1]  # g[i]-g[i-1]\n",
    "                # linear interpolation for g(x) : \n",
    "                xr[i,dim] = (grid.g[dim,ipos-1] + (pos-ipos)*diff)*unit # g(xr) ~ ( g[i-1]+(g[i]-g[i-1])*(x*N-i) )*[units]\n",
    "                bins[i,dim]=ipos                    # remember in which bin this random number falls.\n",
    "                weight *= diff*nbins                #  weight for this dimension is dg/dx = (g[i]-g[i-1])*N\n",
    "                                                    # because dx = i/N - (i-1)/N = 1/N\n",
    "            wgh[i] = weight # total weight is  (df/dx)*(df/dy)*(df/dx).../N_{samples}\n",
    "        # Here we evaluate function f on all randomly generated x points above\n",
    "        fx = integrant(xr)  # n function evaluations required in single call\n",
    "        neval += n  # We just added so many fuction evaluations\n",
    "\n",
    "        # Now we compute the integral as weighted average, namely, f(g(x))*dg/dx\n",
    "        wfun = wgh * fx           # weight * function ~ f_i*w_i\n",
    "        cum.sum += sum(wfun)      # sum_i f_i*w_i = <fw>\n",
    "        wfun *= wfun              # carefull : this is like  (f_i * w_i/N)^2 hence  1/N (1/N (f_i*w_i)^2)\n",
    "        cum.sqsum += sum(wfun)    # sum_i (f_i*w_i)^2 = <fw^2>/all_nsamples\n",
    "                                  # \n",
    "    w0 = sqrt(cum.sqsum*all_nsamples)  # w0 = sqrt(<fw^2>)\n",
    "    w1 = (w0 + cum.sum)*(w0 - cum.sum) # w1 = (w0^2 - <fw>^2) = (<fw^2>-<fw>^2)\n",
    "    w = (all_nsamples-1)/w1            # w ~ 1/sigma_i^2 = (N-1)/(<fw^2>-<fw>^2)\n",
    "    # Note that variance of the MC sampling is Var(monte-f) = (<f^2>-<f>^2)/N == 1/sigma_i^2\n",
    "    cum.weightsum += w          # weightsum ~ \\sum_i 1/sigma_i^2\n",
    "    cum.avgsum += w*cum.sum     # avgsum    ~ \\sum_i <fw>_i / sigma_i^2\n",
    "    \n",
    "    cum.avg = cum.avgsum/cum.weightsum     # I_best = (\\sum_i <fw>_i/sigma_i^2 )/(\\sum_i 1/sigma_i^2)\n",
    "    cum.err = sqrt(1/cum.weightsum)        # err ~ sqrt(best sigma^2) = sqrt(1/(\\sum_i 1/sigma_i^2))\n",
    "     \n",
    "    cum.avg *= unit**ndim\n",
    "    cum.err *= unit**ndim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vegas parameters:\n",
      "       ndim = 3\n",
      "       unit = 3.14159265359\n",
      "       maxeval = 200000\n",
      "       nstart = 10000\n",
      "       nincrease = 5000\n",
      "       nbins = 128\n",
      "       nbaths = 1000\n",
      "\n",
      "1.32583782904 +- 0.0203730373082 exact= 1.3932\n"
     ]
    }
   ],
   "source": [
    "from scipy import *\n",
    "unit=pi\n",
    "ndim=3\n",
    "maxeval=200000\n",
    "exact = 1.3932  # exact value of the integral\n",
    "    \n",
    "cum = Cumulants()\n",
    "    \n",
    "nbins=128\n",
    "nstart =10000\n",
    "nincrease=5000\n",
    "grid = Grid(ndim,nbins)\n",
    "random.seed(0)\n",
    "\n",
    "#SimpleMC(my_integrant2, ndim, pi, maxeval, cum)\n",
    "Vegas_step1(my_integrant2, pi, maxeval, nstart, nincrease, grid, cum)\n",
    "print cum.avg, '+-', cum.err, 'exact=', exact"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Grid:\n",
    "    \"\"\"Contains the grid points g_n(x) with x=[0...1], and g=[0...1]\n",
    "       for Vegas integration. There are n-dim g_n functions.\n",
    "       Constraints : g(0)=0 and g(1)=1.\n",
    "    \"\"\"\n",
    "    def __init__(self, ndim, nbins):\n",
    "        self.g = zeros((ndim,nbins+1))\n",
    "        self.ndim=ndim\n",
    "        self.nbins=nbins\n",
    "        # At the beginning we set g(x)=x\n",
    "        # The grid-points are x_0 = 1/N, x_1 = 2/N, ... x_{N-1}=1.0. \n",
    "        # Note that g(0)=0, and we skip this point on the mesh.\n",
    "        for ibin in range(nbins):\n",
    "            w = (ibin + 1.0)/nbins  \n",
    "            self.g[:,ibin] = w\n",
    "    \n",
    "    def RefineGrid(self, imp, SharpEdges=False):\n",
    "        (ndim,nbins) = shape(imp)\n",
    "        gnew = zeros((ndim,nbins+1))\n",
    "        for idim in range(ndim):\n",
    "            avgperbin = sum(imp[idim,:])/nbins\n",
    "            #**** redefine the size of each bin  ****\n",
    "            newgrid = zeros(nbins)\n",
    "            cur=0.0\n",
    "            newcur=0.0\n",
    "            thisbin = 0.0\n",
    "            ibin = -1\n",
    "            # we are trying to determine\n",
    "            #   Int[ f(g) dg, {g, g_{i-1},g_i}] == I/N_g\n",
    "            #   where I == avgperbin\n",
    "            for newbin in range(nbins-1):  # all but the last bin, which is 1.0\n",
    "                while (thisbin < avgperbin) :\n",
    "                    ibin+=1\n",
    "                    thisbin += imp[idim,ibin]\n",
    "                    prev = cur\n",
    "                    cur = self.g[idim,ibin]\n",
    "                # Explanation is in order : \n",
    "                #   prev    -- g^{old}_{l-1}\n",
    "                #   cur     -- g^{old}_l\n",
    "                #   thisbin -- Sm = f_{l-k}+.... +f_{l-2}+f_{l-1}+f_l\n",
    "                #   we know that  Sm is just a bit more than we need, i.e., I/N_g, hence we need to compute how much more\n",
    "                #   using linear interpolation :\n",
    "                #   g^{new} = g_l - (g_l-g_{l-1}) * (f_{l-k}+....+f_{l-2}+f_{l-1}+f_l - I/N_g)/f_l\n",
    "                #    clearly\n",
    "                #         if I/N_g == f_{l-k}+....+f_{l-2}+f_{l-1}+f_l\n",
    "                #            we will get g^{new} = g_l\n",
    "                #     and if I/N_g == f_{l-k}+....+f_{l-2}+f_{l-1}\n",
    "                #            we will get g^{new} = g_{l-1}\n",
    "                #     and if I/N_g  is between the two possibilities, we will get linear interpolation between\n",
    "                #     g_{l-1} and g_l\n",
    "                #     \n",
    "                thisbin -= avgperbin   # thisbin <- (f_{l-k}+....+f_{l-2}+f_{l-1}+f_l - I/N_g)\n",
    "                delta = (cur - prev)*thisbin # delta <-  (g_l-g_{l-1})*(f_{l-k}+....+f_{l-2}+f_{l-1}+f_l - I/N_g)\n",
    "                if (SharpEdges):\n",
    "                    newgrid[newbin] = cur - delta/imp[idim,ibin]\n",
    "                else:\n",
    "                    bin_m1 = ibin-1\n",
    "                    if bin_m1<0: bin_m1=0\n",
    "                    newcur = max( newcur, cur-2*delta/(imp[idim,ibin]+imp[idim,bin_m1]) )\n",
    "                    newgrid[newbin] = newcur\n",
    "            newgrid[nbins-1]=1.0\n",
    "            gnew[idim,:nbins]= newgrid\n",
    "        self.g = gnew\n",
    "        return gnew"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def Vegas_step2(integrant, unit, maxeval, nstart, nincrease, grid, cum):\n",
    "    ndim, nbins = grid.ndim,grid.nbins  # dimension of the integral, size of the grid for binning in each direction\n",
    "    unit_dim = unit**ndim   # converts from unit cube integration to generalized cube with unit length\n",
    "    nbatch=1000             # function will be evaluated in bacthes of 1000 evaluations at one time (for efficiency and storage issues)\n",
    "    neval=0\n",
    "    print \"\"\"Vegas parameters:\n",
    "       ndim = \"\"\"+str(ndim)+\"\"\"\n",
    "       unit = \"\"\"+str(unit)+\"\"\"\n",
    "       maxeval = \"\"\"+str(maxeval)+\"\"\"\n",
    "       nstart = \"\"\"+str(nstart)+\"\"\"\n",
    "       nincrease = \"\"\"+str(nincrease)+\"\"\"\n",
    "       nbins = \"\"\"+str(nbins)+\"\"\"\n",
    "       nbaths = \"\"\"+str(nbatch)+\"\\n\"\n",
    "\n",
    "    bins = zeros((nbatch,ndim),dtype=int) # in which sampled bin does this point fall?\n",
    "    wgh = zeros(nbatch)                   # weights for each random point in the batch\n",
    "    \n",
    "    all_nsamples = nstart\n",
    "    fxbin = zeros((ndim,nbins))    #new2: after each iteration we reset the average function being binned\n",
    "    for nsamples in range(all_nsamples,0,-nbatch):  # loop over all_nsample evaluations in batches of nbatch\n",
    "        n = min(nbatch,nsamples)  # How many evaluations in this pass?\n",
    "        # We are integrating f(g_1(x),g_2(y),g_3(z))*dg_1/dx*dg_2/dy*dg_3/dz dx*dy*dz\n",
    "        # This is represented as  1/all_nsamples \\sum_{x_i,y_i,z_i} f(g_1(x_i),g_2(y_i),g_3(z_i))*dg_1/dx*dg_2/dy*dg_3/dz\n",
    "        #  where dg_1/dx = diff*NBINS\n",
    "        xr = random.random((n,ndim)) # generates 2-d array of random numbers in the interval [0,1)\n",
    "        for i in range(n):\n",
    "            weight = 1.0/all_nsamples\n",
    "            for dim in range(ndim):\n",
    "                # We want to evaluate the function f at point g(x), i.e, f(g_1(x),g_2(y),...)\n",
    "                # Here we transform the points x,y,z -> g_1(x), g_2(y), g_3(z)\n",
    "                # We hence want to evaluate g(x) ~ g(x[i]), where x is the random number and g is the grid function\n",
    "                # The discretized g(t) is defined on the grid :\n",
    "                #       t[-1]=0, t[0]=1/N, t[1]=2/N, t[2]=3/N ... t[N-1]=1.\n",
    "                # We know that g(0)=0 and g(1)=1, so that g[-1]=0.0 and g[N-1]=1.0\n",
    "                # To interpolate g at x, we first compute  i=int(x*N) and then we use linear interpolation\n",
    "                # g(x) = g[i-1] + (g[i]-g[i-1])*(x*N-i)  ;  if i>0\n",
    "                # g(x) =   0    + (g[0]-0)*(x*N-0)       ;  if i=0\n",
    "                #\n",
    "                pos = xr[i,dim]*nbins               # which grid would it fit ? (x*N)\n",
    "                ipos = int(pos)                     # the grid position is ipos : int(x*N)==i\n",
    "                diff = grid.g[dim,ipos] - grid.g[dim,ipos-1]  # g[i]-g[-1]\n",
    "                # linear interpolation for g(x) : \n",
    "                xr[i,dim] = (grid.g[dim,ipos-1] + (pos-ipos)*diff)*unit # g(xr) ~ ( g[i-1]+(g[i]-g[i-1])*(x*N-i) )*[units]\n",
    "                bins[i,dim]=ipos                    # remember in which bin this random number falls.\n",
    "                weight *= diff*nbins                #  weight for this dimension is dg/dx = (g[i]-g[i-1])*N\n",
    "                                                    # because dx = i/N - (i-1)/N = 1/N\n",
    "            wgh[i] = weight # total weight is  (df/dx)*(df/dy)*(df/dx).../N_{samples}\n",
    "        # Here we evaluate function f on all randomly generated x points above\n",
    "        fx = integrant(xr)  # n function evaluations required in single call\n",
    "        neval += n  # We just added so many fuction evaluations\n",
    "\n",
    "        # Now we compute the integral as weighted average, namely, f(g(x))*dg/dx\n",
    "        wfun = wgh * fx           # weight * function ~ f_i*w_i\n",
    "        cum.sum += sum(wfun)      # sum_i f_i*w_i = <fw>\n",
    "        wfun *= wfun              # carefull : this is like  (f_i * w_i/N)^2 hence  1/N (1/N (f_i*w_i)^2)\n",
    "        cum.sqsum += sum(wfun)    # sum_i (f_i*w_i)^2 = <fw^2>/all_nsamples\n",
    "                                  # \n",
    "        for dim in range(ndim):   #new2\n",
    "            # Here we make a better approximation for the function, which we are integrating.\n",
    "            for i in range(n):    #new2\n",
    "                fxbin[dim, bins[i,dim] ] += wfun[i] #new2: just bin the function f. We saved the bin position before.\n",
    "            \n",
    "    w0 = sqrt(cum.sqsum*all_nsamples)  # w0 = sqrt(<fw^2>)\n",
    "    w1 = (w0 + cum.sum)*(w0 - cum.sum) # w1 = (w0^2 - <fw>^2) = (<fw^2>-<fw>^2)\n",
    "    w = (all_nsamples-1)/w1            # w ~ 1/sigma_i^2 = (N-1)/(<fw^2>-<fw>^2)\n",
    "    # Note that variance of the MC sampling is Var(monte-f) = (<f^2>-<f>^2)/N == 1/sigma_i^2\n",
    "    cum.weightsum += w          # weightsum ~ \\sum_i 1/sigma_i^2\n",
    "    cum.avgsum += w*cum.sum     # avgsum    ~ \\sum_i <fw>_i / sigma_i^2\n",
    "    \n",
    "    cum.avg = cum.avgsum/cum.weightsum     # I_best = (\\sum_i <fw>_i/sigma_i^2 )/(\\sum_i 1/sigma_i^2)\n",
    "    cum.err = sqrt(1/cum.weightsum)        # err ~ sqrt(best sigma^2) = sqrt(1/(\\sum_i 1/sigma_i^2))\n",
    "     \n",
    "    cum.avg *= unit**ndim\n",
    "    cum.err *= unit**ndim\n",
    "    \n",
    "    return fxbin"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vegas parameters:\n",
      "       ndim = 3\n",
      "       unit = 3.14159265359\n",
      "       maxeval = 200000\n",
      "       nstart = 10000\n",
      "       nincrease = 5000\n",
      "       nbins = 128\n",
      "       nbaths = 1000\n",
      "\n",
      "1.38055737023 +- 0.0384903652993 exact= 1.3932\n"
     ]
    }
   ],
   "source": [
    "from scipy import *\n",
    "unit=pi\n",
    "ndim=3\n",
    "maxeval=200000\n",
    "exact = 1.3932  # exact value of the integral\n",
    "    \n",
    "cum = Cumulants()\n",
    "    \n",
    "nbins=128\n",
    "nstart =10000\n",
    "nincrease=5000\n",
    "grid = Grid(ndim,nbins)\n",
    "\n",
    "#SimpleMC(my_integrant2, ndim, pi, maxeval, cum)\n",
    "fxbin = Vegas_step2(my_integrant2, pi, maxeval, nstart, nincrease, grid, cum)\n",
    "print cum.avg, '+-', cum.err, 'exact=', exact"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/haule/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n",
      "  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFsCAYAAAC6pgFGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXmcHGWd/99PVfdcue8ACacSBBVMRMyCroAcygq4gIoH\niiusyq67eOz+Fg9WV1RWhVVXBF0VWEVFRRfFJVweuAjIaQIkIHcSkpmE3HN21fP746nqrqqu7p6Z\nkJlOz+f9evGameqqvuLL51Of7+f7fYy1FiGEEEJMLLzxfgNCCCGEGHskAIQQQogJiASAEEIIMQGR\nABBCCCEmIBIAQgghxAREAkAIIYSYgEgACCGEEBMQCQAhhBBiAiIBIIQQQkxAJACEEEKICUhTCwBj\nzGuMMdcbY9YYY0JjzMm7+PWejF4n+9/XduXrCiGEEGNNUwsAYBLwAPBBYCw2LXglMD/x33HR6147\nBq8thBBCjBmF8X4D9bDW3gjcCGCMMdnHjTFtwOeAtwHTgeXA/7PW/naUr7cx8/xvAh631t4+mucT\nQgghmpVmdwAa8XXgCOAtwMuAHwP/a4w5YGef2BhTBN4BfHtnn0sIIYRoNnZbAWCMWQi8BzjDWnuH\ntfZJa+0lwP8BZ78AL/FmYBpw1QvwXEIIIURTsdsKANwdvw88aozZFv8HvBY4AMAYsygK8QU1wn2B\nMeZzNZ7/vcD/WmvXjc3HEUIIIcaOps4ANGAyUAIWA2Hmse3Rz8eBgxo8z8bsAWPM3sDrgVN38j0K\nIYQQTcnuLADuxzkA86y1/5d3grW2BDw6iud+L7Ae+NXo354QQgjRvIy4BDCa3nxjzOuMMfcaY/qN\nMY8aY949zNeaZIw51BhzWHRo/+jvhdbax4BrgKuNMW82xuxrjHmVMeb/GWPeMNLPlXhNg8sWXGmt\nzToLQgghREswmgzAiHrzjTH7Ar8EbgUOBb4C/Jcx5rhhvNYrcXf690av9WXgPuDT0ePvAa4GvgSs\nBK6LrnlmmJ8lj9cDC4Hv7sRzCCGEEE2NsXb083WMMSFwqrX2+jrnXAy8wVr78sSxHwDTrLVvHPWL\nCyGEEGLUjEUXwKuBWzLHlgFLx+C1hRBCCJHDWIQA5+MCdUnWA1ONMe3W2oHsBcaYWcAJwFNA/y5/\nh0IIIUTr0AHsCyzLTrhN0qxdACcA3x/vNyGEEELsxrwDF5bPZSwEwDpgXubYPGBr3t1/xFMA3/ve\n9/jAXR9g28A2TjrwJN6zz2c44wz47nfh5S+vnPxwz8O867p3cc1p17Bo9qLUE33q159i7ba1/NfJ\n//VCfZ6m4Pzzz+fSSy8d77fR1Og7aoy+o/ro+2mMvqPGNPqOfvfU7zh/2flc99br+I+L/5pLb4Jj\nO37E5rPeykdf+hXOPPIoAD7/eVi+HGa+8+/oKnbxhc1HEH7hC9zwqT9yyimV53vkkUd45zvfCdFa\nWouxEAB/ALJtecdHx2vRD/CSl7wE71kPBmD6ftM5+KDFABx4ICxeXDm5tKYEd8LBLz+YQ+cfmnqi\nOc/OYfPGzSxOXtACTJs2reU+0wuNvqPG6Duqj76fxug7akyj7+jZrmdhORz6ikOZOcNNt/MKB8Oe\nsNf+LypfO3s2TJoEU/edyuS2ySzZvC8Wy/K9F1Pj6euW0EczB6Bmb370+OeNMcn5+ZdH51wcjeb9\nIHA6cMlwXi+wQfln9X6AjriTwTPVH8fDI1Q7vxBCiCYlXqMKXgEvaswLo+XZhpWFz1owBuLNcY3v\n4WGx4ei6+UbTBdCoN38+ro8+esP2KeAkXH/9A8D5wN9Ya7OdAbkEYZD6mUf85eUKAOOVRYQQQgjR\nbMRrVNErlgWAxS3yQeL+NRYAZbxYJIxOAIy4BGCt/S11hIO1tmonPmvt74AlI30tqCzuyUU8O7og\nPsfkWAS+58sBEEII0bTEa1TRL2LKDoBbz8KMAIjWfCyJP8KQ0dzPN/1ugOUSQFinBECdEoBpzRLA\nmWeeOd5voenRd9QYfUf10ffTGH1HjWn0HQ23BBCGUQkgEgflRTEc3RrX/AIgrGQAatGoBCABMDHR\nd9QYfUf10ffTGH1HjRmVADD5DkC85tuEHRAGY5cBGDOsteW7+2QGoGYJgGqLoFUFgBBCiNYgXqN8\n4ycyANFjdUKA6RLAyGlqAZBcuEfdBWC8ugFCIYQQYjyJ1yjf88uLcqUEUDmvVgiw9QXAMLoAckOA\nRiFAIYQQzUvSAShEy3KtEGC5BFAVAhw5u48AqNMFMBFDgEIIIVqDZI7Njxf+WAhkSgCelyh3TwQB\nUPSKdbsAJmIIUAghRGuQdLF9GwmAnBBg3AUA6RBgSwqA+K6/zW8b3hwAhQCFEELsZoQ2LN/AllMA\n0UpfbxJg+ZygBQVAHO4r+vUdgIYhQE0CFEII0aQENkgIAINNLHa7chJgUwuAOPiXdQCy1CsBaBKg\nEEKIZia0Ib7xgaQAcIv6xA0Bks4AxIxkFLBKAEIIIZqZVAnAGqyXsP3zSgATKQQYOwAaBSyEEKLV\nSGcADNZAvClAtgRQ3gug1UOAYZgQADuxG6AEgBBCiGYlKQA8vFQGgLy9ACbSJMCiX9ypLgBNAhRC\nCNGsBGElBFgYSQiw3CnQigKAtAMwmi4ATQIUQgjRzIQ2xPeiEKA10QyAkYQA1QWgEKAQQojdjmwG\nIGlm524GNBFCgOU5AA26ABQCFEIIsbuSzgBEDkAUAkxWsGttB9ySAiA7CVCjgIUQQrQaVW2AJr8N\nMAyjvQAmUggw2wUw4hCgJgEKIYRoUlKTAK0h9IYZApwIAiDbBZClbghQkwCFEEI0MZoEmEPWAVAJ\nQAghRKuRygBYQ9LkDoM6IcB4UWx5ATCcOQDqAhBCCLGbkQ4BkpoEmFzvaoYAs4viMNktBEDcBaBR\nwEIIIVqNbAgwNMngX53tgCdMCWCUuwHGAsCOUiEJIYQQu5IgDCqDgMgIgMTSF3cBlGllAZAaBFRv\nDkB0IK8LIA5WWCQAhBBCNB+5mwFN+BBgcjvgYcwBqJUBSJ4jhBBCNBNJAWBsLACixybqJMBacwDy\nzsu7+wcJACGEEM1N2gEgPQmwlgOQ/KMlBUBYmQNgsWWrP28UcF79HyQAhBBCNDdVg4AS97NBzijg\nqhBgK3cBtPlt7m/yXYCkesoSH9eWwEIIIZqR5CAgr0EXwIQJASa3A4bK3gB5cwDy6v9AOVkpB0AI\nIUQzUjUHAMgLAYbhRAoBJuYAuL/z7+KtVQlACCHE7kn1HIDKY3Y4IcBRrm/NLQDCF64EIAEghBCi\nGck6AMMOAUYCwLSiA5DcDhgqdfzcEkCDLgDtCCiEEKIZqRsCHMZugDZoQQEQD+8p+g1KAOoCEEII\nsZsS2rCcV/MsqbF1Nm8zoFgFRD9NK5YAkpMAYXQlgDhZKQEghBCiGUmXAGIHwMmArANQLvsnQ4AT\noQ2wVheAtbZmF4AcACGEEM1MejtgUiWA5HbAcRfAhJoEWO4CUAhQCCFEi1ElAGBEIcCWFgDlEkCN\nYT7DCgFqEJAQQogmJAjTIcD0XgCV32uFAFszA5DtAqhVAlAIUAghxG5KchKgqdoOuE4IsJUdgHj2\nf7kLYDQhQE0CFEII0cTklgBqhABTkwBbeTOg+I6/4BWA2m2A9UYBywEQQgjRzOSFAON72uQkwDB0\nN/3ZEGBLlgBiWyS2RmoNAtIoYCGEELsr6VHAEBjw/fohQKAyCKhV2wB9z6/Y+DuzG6AmAQohhGhC\nkpMADQaLLS/0edsBu99bfBRwGLqFvewA1NsNsEEXgBwAIYQQzUhqEiCuBOD70WN5mwFlQ4CtWAII\nCFwJoBzkG/koYE0CFEII0czkZQC8BiWA1CTAltwLIKrtVxZxDQISQgjRWmQFQGDAjzv88toAJ0II\nMAiDVAZAo4CFEEK0GqkQYOgaAGMHIHlzH3cBlCnbAS0oAKq6AHbCAdAkQCGEEM1IEAaJQUCZDMAw\nQoAtuxmQZ7yGGQCFAIUQQuyu5JUAvHolgEwIsDW7AOI2wEwGYCSjgDUJUAghRDNTHQK0lRBgYr2r\nFQJsyQxAuQTwAswBkAAQQgjRjCTXMBN3AYwgBDimo4CNMecZY540xvQZY+40xhze4PyzjDEPGmN2\nGGPWGmO+bYyZ2eh1yiWAzCTAvPMUAhRCCLE7Ur0XgMXzhjEJcKz3AjDGvBX4MnAh8ArgQWCZMWZ2\njfP/EvgO8E3gYOB04FXR33XJTgKs1wWgSYBCCCF2RwJbCQHGcwDiEGByEmCyCyAe/xvgjWkJ4Hzg\nCmvt1dbalcD7gV7gvTXOfyXwpLX269bap621dwBX4ERAXbJdACoBCCGEaDWqSgAk3f06IUB3xdgI\nAGNMEVgC3Fp5Q9YCtwBLa1x2CzDfGPOG6DnmAWcANzR6vWwXQM3NgLA1uwA0CVAIIUQzky4B2PQk\nwFptgNF2waHxxqwNcDbgA+szx9cD8/MusNY+CJwF/NgYMwg8B2wC/q7Ri5UHAWkSoBBCiBYl5QBg\nCI0tTwIM8hyAxA2vNd6oBwEVRv+Wh4cx5tXAlcCngJuAPYAv4coA76t37W+u+A1bzVbO/N8z4TH4\n6i1fAErAmanzJACEEELsrlQ7ALahAxDzAxvytccu5+cnLysf27Jly7Bed6QCYAMQAPMyx+cB62pc\n84/AMmvtJdHfK4wxHwRuN8Z83FqbdRPKHHXuUTxceJifvu+ndH2uiw+8/sN84KgzRzUKWJMAhRBC\nNCOx2w1xF0ByN8DKeenhf24hfIvXRrj/+zj7+n8on3ffffexZMmShq87ohKAtXYIuBc4Nj5m3Mp7\nLHBHndcoZY6FuHHH+at2fFKY3wVQdZ4cACGEELspqRJACIGxiQ6/yjIZhtUhwBBvTCcBXgKcE/X2\nHwRcDnThbH6MMZ83xlyVOP/nwGnGmPcbY/YzxhwJfAW4y1pbyzUAcroARjEKWJMAhRBCNDPZEoAd\nQQgQM/ougBFnAKy110Y9/5/BWf8PACdYa3uiU+YDCxPnX2OMmQqch6v9b8Z1Efy/Rq8V4r6UbC//\nSEYBywEQQgjRzKRDgM4BqIQAK+flhQBDRt8FMKoQoLX2MuCyGo+dnXPscpxTMCLiuogxBs94KgEI\nIYRoOQIbpEoAoZcMAVZ3ASSxZmwHAY0ZyTt73/j1SwCNQoCaBCiEEKIJicvdkJgDUMcBcL87gdCy\nAiC5R7Lv+SoBCCGEaDmykwADYytdAEE6BOh5OSWAltwOmLAc4mvkANTcDliTAIUQQjQxWQFgobIZ\nUIMQYMs6AMkvpa4DYGuPApYDIIQQopmpGgTkWbx4M6B6uwHSygIgrNRFRusAaBCQEEKIZiYIg5QD\nEBqLiRwAG5ryTW/eZkB2rDYDGmvi7YAh7QDknacMgBBCiN2R5FpnQptqAwSqBID7vVICGKvNgMaU\neA4ApB2A3N0AG3QBSAAIIYRoRtIZAOuC7fHqbA1BdO9bazOglnQAqroAcmz8np76DoAxxu2uJAEg\nhBCiCckOAgq9yiRAoCwA4i4ASIQAGf1ugE0tAKy1qS6AgLQA2LAB9toLNj5fexQwOBdAAkAIIUQz\nkgoBhpbQhKkSQNYBSNK6DkBiOpLv+YRhugSwZQsMDUFfX+05AEDdKYJCCCHEeBLYitttrMsAVByA\nnBJAcjOgVhUAyelIvqkOAZaiPQaHSrVLACAHQAghRPOS3g0wPQkQ8h2AOAS4M5sBNb8AqNMFEAuA\nUlB7FHB8rQSAEEKIZiSbY7OmMgioYQhwJzYDanoBUK8LYGjI/SyVGpcAJACEEEI0I9UZAMCr3PDm\nOgCJSYBeyzoAOXsBxJRLAIFKAEIIIXZPsm2AoQHjVwuAZBdA+VrTqnsBZByAbBtgLACCoPYoYIhC\ngJoEKIQQosmw1lYNAgoNmLIDUD8EaI2HoUUFQNIByJYAkhkAOQBCCCF2N2IrP5UBADy/smbFN/gT\nbztgr3YXQDkDENYXAC4/IAEghBCiuYjXpmwXgPHiVX+CTgK02NQcgOxugKkSQJ0uADkAQgghmpEq\nAVAnA5AXAmzZNsDkcIR6cwAClQCEEELshtR2AOoLgBiLh2nJNsAwPQcgux1wOQMQNh4FrEmAQggh\nmo04oF6eBBhabKoN0FR1AVSFAFvRAajVBZAtAYSh5gAIIYTY/cg6ABA5AKayZtWbBLgzAqAwqqvG\niJD6cwDiEGDQKASoSYBCCCGajf/8T7x99wJ2IgToeZigFQVAchSwqV0CCEKFAIUQQuxmXH45haWv\nggXVIUCGGQJs3RJA4s7e92qXAIIwxKvzUSQAhBBCNB39/dihQSDHATDDCwE6P6AFBUBgAwqhgfXr\n63YBhA1KAJoEKIQQoukYGMBGtezY7cZG9/aJEGAYVm588yYBtuReANZaXvqHP8OBB1KgOskfZwDC\nfFlURg6AEEKIpqO/v7yQVc0B8NIhwFgAxHsBJEOALbkbYGADJm/pg61baQtNzUFAmBAbaBKgEEKI\n3Yj+fsiUAAjD3BBgygF4gSYBNn0IsBC6T90WGsIamwFhQoKSMgBCCCF2I/IcgBrbAScFQBLrtfBm\nQIUgEgDWq+0AYCmVVAIQQgixmxAEbhHLCABsNAjI1BcAL0QXQNM7AH5QcQBqZQAwIWFOCeBb34JD\nD9UkQCGEEE3GwED005UAypMA4zZAk54EWCsESKuGAAMbVByAHAGQLAGUhqodgM9+Fq69Vg6AEEKI\nJqO/3/0sZRyAKANAJgQYbwlcHQIcfRtgUzsA1lr8aMJRW2AIqRUCtLkZgC1bnEugSYBCCCGaitgB\nGHILWfUcgPwugPwQYCt2AYQVB6Bo8x2AYhHnAGQEgLWwdasTAHIAhBBCNBWxA1AVAgzTcwByugBS\ntOwkQEL8UiQAAnIzANOnA9iqEsD27e4LkwAQQgjRdGQEgO/55VU+NGATIcDsICBIhAC9VhUANqyU\nAKzJHQU8dSquDXAo/VG2bnU/YwGgEKAQQoimIRIAJlkCSAiA4YYArfEYnP4AJ37vxBG/heYWAGFI\nIRIAeQ5AqQSdnYAXUsoIgC1bKufIARBCCNFURBkAkwwBRkm/epMAs9sBYzwMwahucptbANgQvxQJ\ngIQDEFMqQaEAnlc9ByDpAGgSoBBCiKaiXAJIOAAJAWCp3wUQE+8F0Oa3jfgtNLUAAPDC6gxAsgRQ\nKDilNFTDAVAGQAghRNNRpwSQGgTUYBQwxuARUvSKI34LTS8Ayg5ACGFOCLBYdAKgNNggA6DdAIUQ\nQjQLcQkgDgEaP+0AjGASIIQU/VYUAFEGoBCQGwJ0DoBlKNMFIAdACCFE05LnACQEwLBDgJ4rAbSo\nA+C+hGKYHwKMSwCNHAAJACGEEE1DLABKtQSA+92YxiFAD9uaDoBXih0AW1cADNZwAEolTQIUQgjR\nZOQJgDgDQKUE4PvpEGCt3QBb0wEIKhmAbAmgnAEwliE5AEIIIXYXyhmAGl0AsQDwTGoQkOdlQ4Ae\nnrWtKQC8wH0J9RwATHUJIJsB0CAgIYQQTUPsAIQhJowmAeaUADy/UQjQdQG0ZhtgXAJIOAAx5RKA\nsQwO1p4DIAdACCFEUxHPAcA53FUZgGgOgGcabwdsbItmAOIQYNIByHYBYMKqEoC6AIQQQjQt8W6A\nuDk3NUsAtRwAm9gLoFUzACYpAML8OQCYkMGB2hkATQIUQgjRVOQ5AIlBQBa33nlevgAo09pdAMPJ\nAFiGBmt3AcgBEEII0VQkBEBbXQfAVHUBJEOAbg5Aq4YAYwGQ0wWQLAHkOQCep0mAQgghmpCkAxDk\nTAKMMgB+xgGI9wKIQ4DlLoBWdgD8UljTAbCEBCWPqJ0ScA7AjBnKAAghhGhCkhmAvBBg3AXgDWMS\nIK3qACTaAN0ibsuPVTIAFqyht9cdL5Wgtxdmz5YAEEII0YT090f72SdCgIlBQCHDCwFizNg6AMaY\n84wxTxpj+owxdxpjDm9wfpsx5iJjzFPGmH5jzBPGmPcM67ViByCIP2xYVQKwhGA9duxwx+MA4KxZ\nCgEKIYRoQvr7YcoUIN8BsA0EQBnjYbCjmgNQGOkFxpi3Al8GzgXuBs4HlhljDrTWbqhx2Y+BOcDZ\nwOPAHgxTfHjRlKRCEG+GHAA+kMgAYAFTJQBmz1YIUAghRBMyMACTJ0N3d24bYNkByEwCNAaMTZYA\nDJ5lVCWAEQsA3IJ/hbX2avdmzPuBk4D3Av+ePdkYcyLwGmB/a+3m6PAzw32xagcgaOgAxB0AsQOg\nSYBCCCGaiv5+mDoVcA5A1STAKARovPy9AOIQYGhwAmBXlwCMMUVgCXBrfMy6QsQtwNIal70JuAf4\nZ2PMamPMKmPMF40xHcN6zSjZ56ccAEcsAEJbuwRQKoGRAyCEEKKZSJYAshkAA9bEXQCmqgsgHQK0\nY+YAzMb57+szx9cDi2pcsz/OAegHTo2e4xvATOBvGr1gvFGCX6oWAOUQIC4EmOcAABgrASCEEKKJ\n6O+HOXOA/AzAcEOAO+MAjKYEMFI8nJfxdmvtdgBjzIeBHxtjPmitHah55Y1wav8ABuj99T3wRyC4\nFmvPARIOQCnfAZg92/00KAQohBCiiRgYKDsAuYOA7PBCgDevf5g7tsPWv/t3rp58NQBb4rvgBoxU\nAGwAAmBe5vg8YF2Na54D1sSLf8QjgAEW4EKB+ZwI13/LnfjUkYex3yE3wxdPLT9cFgBD1RmAQqFc\nXsGGcgCEEEI0EXklgFgAWJMKAVbNAUhMAjxmj0X8zZobeeiKf+WNL34jAPfddx9Llixp+BZGlAGw\n1g4B9wLHxseMK0YcC9xR47L/A/Y0xnQlji3CuQKr672esWCiTx1nAEwmA+D78VyAyhyArVvd4l+M\nHRGrSYBCCCGaiEwbYHoSoFeeBNhoO+DQY9QZgNHMAbgEOMcYc5Yx5iDgcqALuNK9OfN5Y8xVifOv\nATYC3zXGvMQY81pct8C369r/QCGxZnuJDED8RQwNQaHo/mgrph2AadPiFkFAGQAhhBDNRNwGSE4I\n0JrEKOD0XgDZEGBoQjzL2MwBsNZea4yZDXwGZ/0/AJxgre2JTpkPLEycv8MYcxzwNVwVfyPwI+CT\nDd9cZehfeVtgTMYBKLhvpb0tnQFIOgBWAkAIIUQzkXEAjDEVBwB/+CFAb4xDgNbay4DLajx2ds6x\nR4ETRvo6KQcgLgH4lQ2BnABwX0J7m6lyAGIBYEKFAIUQQjQJYQiDg2UB0B6aynEgNIYwEQLMDgJK\nEpjRtwE29V4ASQegXAKIBgHFdogcACGEELsV8UZAUQmgLYyW4rID4JUdAM/UDwGG8RyAVtsNsOwA\ndHaWdwWM5wAMDUXnxA5Ae20HwIaaBCiEEKJJiAVAVxeh79EWln396IeHtcMLAVrC1nQAygH/rq6y\nADBRCDDe+jd2ADra0yHAbBeAHAAhhBBNQX+/+9nRQVjwKwIg4QCUQ4B+9SjgZAgw8CymJR2AeM3u\n7CxvCxyHAGMB4PmVEkCyDTDZBaA5AEIIIZqGWAC0txMkHYCEAAhqzAHwolU7DgFar0UdgLIASDgA\ncQkgFgC1SgApB0AhQCGEEM1CXAKIHID2eHlKZgDC4U0CLIcAW9kBMJkSQJwByJYArK04AMkMgASA\nEEKIpiBVAvAqIcC4tY9Kbq3RJMBgJ+YANLUAKKYcAHfLbzMOgJcRAP39ThykugBCTQIUQgjRJCRL\nAAWftowDYKnctNacA1DeDrhV2wBTDkB6FHA5BBglBTuiEkC8EVDSAQjlAAghhGgWEg5ArQxA2KAL\nICY0QYuXALq6MPGKb9JdAHEIsLPDOQDxJkjpDIAEgBBCiCYhkwEoxgZ1wgGISwAF3xCG1V0AcQgw\nzgAUTIsJAD9PAGQdgLgEEAmApANQ6QJQCFAIIUSTMAwHIC5bex65XQAxoQkxQGEUJYBRjQIeK1Jd\nAENuxTeZQUDxKODOdrcbYJ4DEAYaBCSEEKJJSGYAih7FzCAgTGXN8hqFAKM2wNHczze1A5DMAJCY\nA1CrBBCG0N3tjqsLQAghRFOSKAEEvkdbpgQQjigEGOLbyuMjYfdwADo7MUM1SgB+ZQ4AwHPPueNT\np1a+qDCQABBCCNEk9Pe7BapYJCh4lY63OANg/IYCICYw0TWhBTIPNqCpHYBijQxAngPQ1ek+ytq1\nzjAoFt0XB2AlAIQQQjQL/f3Q3g7G5DoANpEByJ0DkFABpVgABCNf45pbANjoQ3Z1YeKiv8lmACol\nAHAOwNSp0alOYCkEKIQQonno74eODgBKfsIBiMf7JgcB5ewF4E6NSwDuvLDUwgKAGqOA4xJAZ4c7\nd+1aV/+PKRQqJQA7miKJEEII8UIyMFAWAEHBVLcBGr/iAPjVewFkJwFCXAIYGU0uAKK319FRvuXP\n7gZoMiWApAMAzgEIA/dYHJoQQgghxo2EAxD4ORkAGmcA4vUsaNkSQGjcLXyxiLEWLwRbYzfAzoQA\nKDsAPT1MKfSVBYDKAEIIIcadOAOAKwEUqhyARBeA5w7XDgG6i1tPAFjcLXzUz1cMcuYARCWArk73\nrWzdmnAATjyRfxr4N2zg0oASAEIIIcadZAnAzysBJDMA9UOAAS3rAHgpAVAIqTsHIKbsAKxfz2Gl\newhDOQBCCCGahGQIsOBRjOv35Zxa7UmA2RBgyWtRAVBIlAAgagvM7gYYzwFo88qjf8sOQF8fB5Ye\nIiy5j6kdAYUQQow7iRLAkG9ySgB+lQOQ2gsgFQJs2S4A3OIfrezFgGoBEKkfg2HSJHes7AD09jI/\nWEvHjj5ADoAQQogmIBUCNBSD6PZ+GCHAeC+AOARYopS6diQ0tQBoC02qBNCWKAHEGQAvmgPgGa8s\nAKZOxX0Z0bzlhevXABIAQgghmoBEBqCU2waYHATUaDvgFm0D9DMhwA7rVzkAxtjoZ8YBiDdbAPbu\nlgAQQgjRJKS6AAyFIJMBGEEIsETLdgFkHADrg1cqhwALBbDUcAD6+srPs3DDakACQAghRBOQmgSY\nEAAj2AugHAJs2TbAwKQyAB3WK48CjgVA/CUlBcC0aUBvLwA7/Cnss/FZAG0JLIQQYvxJlACGvDwB\nkNwNcHh5ztTtAAAgAElEQVQhwJYTAIVMCaA99FIlgEKhooKSIcCkA/Do5CXs+/wzgBwAIYQQTUDK\nAaBKAGAqG/U2CgEOtawAyLQBtluvvBvg0FA05jfhAHR1ueuSDsCj0w5nZt9mZu2QABBCCNEENMoA\nJJZm328wCbBVMwCFkEwGYHglgKQD8PiMVwJwSI8EgBBCiCagQQbA8/zyqQ23A47aAFuuC6AsAKIM\nQHuOAIhtkKougMgBeHbmoZSMzyHdEgBCCCGagGQGoJAWAAEeJrE0e41CgJED0HJzAPIyAMndAPMc\nAGNg8mTKDsBg5zSembKAQ3o0CVAIIUQTkJwE6KUzANakBUAhzwFIhABLJnIAWr0E0G49bGIzoGKx\nooJiATBlShSSiByAsL2TP0/ZVw6AEEKI5iBRAhjywA+tu4OPBIBnEiUA3y3+QXT/mt0OeGfaAAuN\nTxk/CgHp3QBDD1MjA2AwHHMMbNsWXRw5AGFHF3+evD9veea3bJIDIIQQYjyxNl0CiNf6oSGwFovB\ny4QAoSIAvMxt+xCjdwCaWgCUJwGWMwCm3AWQVwI4+mg4+ujo4t5e8H289iKPdu3P7D7Y3N0Dsw8c\nnw8jhBBCDA66n4kQIOAEQBgS4mFMUgC4xyvTbyfIJMBCYFNtgG2BwdYJAabo64OuLopFeLTzAACK\nKx8duzcvhBBCZInH1CcyAO6XoUQJoNoBSAoASIYAW3QzID+nDdBkMgBJByBFby90dlIswhOFhQz4\nEgBCCCHGmVgARA7AYLSlfdIB8EhnACDjADCR2gDLuwE6B6BWCSBFwgEYDNtYNQvaV/15jD+BEEII\nkWBgwP1MhADdL4kMQGI9K+SUACA5CbBFuwD80KYyAG3WVM8BSIwCTtHXB52dFAoQlDxWzIX2lY+P\n6fsXQgghUmRLAMkQYBhic+YAQLUAiBlq1RJAIRYAvg/G0BbUDwGm6O0tOwClIZ+H5kLHqj8nRi0K\nIYQQY0xVCSA6HpcAshkAL+0AeF468zZoW9UBCGzZ/qdYpBimHYC6GYDIAXACwOOhOVDYsg2ee24s\nP4IQQghRISsATE4GYBQhwNYTACFl+59ikaKlvBvg0FCDLoCUA+Cxemp0vLt7TN67EEIIUUU2AxA7\nAIODYG0kAOqHAGNCGxJEAqL1BEDSASgUaIscgGGHABMOQH888SBWX0IIIcRYk8kADHppByAbAsyd\nA4DBYhkKhghjQTCK8nZzC4AwUwIIKDsA2RBg/QyABIAQQogmIFMCyM4BCPHwc0oAQ0PuZ9IBGAor\nAqD1HICMAGirkwGo2wUw5EsACCGEGH8yJYCsA5DNAOS1AcYl75QD0GpdAF5GABTCShdAnAEYXheA\nHAAhhBBNQLYEkDcIqE4IMN4LwFrLYDDYwg5AvBkQRF0AVM8BqDcKOMoABKWEAIjVlxBCCDHW1MsA\nlAcBDS8E2NolgCBMhQCLAVUCYDgOAFYOgBBCiCagv98t/tFKPtwSQHI74NwQYOuVAMJ0G2DI8AcB\nJRwArEfgQ+h7EgBCCCHGj8RWwAADOQLAT+z5G/9aKwQYZ/9bzgEo7wUAUQaA8m6A8WZANUcBJzYD\nInQeStjeJgEghBBi/IgdgIhGDkC2DRBqhABbrQ0QyLQB2uHNAQhD9yV3dTkDwbrHwjYJACGEEONI\nf3/aATDRnXuUAQitwffyMwDJu39rbToD0GolACCVASjkzQEgZw5AvMgnSgAAQXtRAkAIIcT4kSkB\nlB2AwcGGXQBeZsVOOQBjVQIwxpxnjHnSGNNnjLnTGHP4MK870hgzZIy5b9gvluMAQLUDkOoC6Otz\nPxMhQJAAEEIIMc5kSgCBsYSeqTkIqFColADiZa4cAhzrLgBjzFuBLwMXAq8AHgSWGWNmN7huGnAV\ncMuIXjCVAaiUAOIMQG4JoLfX/cw4AGFRAkAIIcQ4kikBhDYk8L2KALAeXuJW349+zZYAgNQcgLHq\nAjgfuMJae7W1diXwfqAXeG+D6y4Hvg/cOaJXSwgAf7ijgKscAOehyAEQQggxruQIgLDglzMAQbYN\nMHIAhoYSDkAiBGjHKgNgjCkCS4Bb42PWrcC3AEvrXHc2sB/w6RG/w7gNsFCgENhyF0BVCSDZBZBw\nAJIhwKCtIAEghBBi/MhkAAIbEBS81GZAhVGEAEeTASg0PiXFbMAH1meOrwcW5V1gjHkx8DngKGtt\nWDWxrxHJEsBwuwCSDkAvygAIIYRoDjIZgJQDEIYE2RJAJACCoLoEsLNtgCMVACPCGOPhbP8LrbWP\nx4eHe/35wLRPfQq+8hW49162b3uecHYB9qxsBpQ7CjiZARiiLABKbRIAQgghxpH+fpg6tfxnaEM3\npC6RAUjtBuhVQoCxLkiGAPsfgZOB7VdexOTffweALVu2DOutjFQAbAACYF7m+DxgXc75U4BXAocZ\nY74eHfMAY4wZBI631v6m1otdCiz+0pdg6VJ417t47IHbOHjRNKB6M6BUCSDpAPShEoAQQojmIFMC\nCG1IUCxUHIDMJMBaJQBwDkDhELj+F7DqHf/Moo+fDsB9993HkiVLGr6VEWUArLVDwL3AsfEx4269\njwXuyLlkK/BS4DDg0Oi/y4GV0e93NXzR1ByAMLcEYDC1HYDEJEA5AEIIIcaVOiUAG7rNgJICILcN\nMA4B7mQb4GhKAJcAVxpj7gXuxjn1XcCV0Rv7PLCntfbdUUDw4eTFxphuoN9a+8iwXi3ZBVCqDgFa\na/N3AoSqOQClNh82SQAIIYQYJzJdAEEYEBYKqUFAeZMAk10AEIUAd3IzoBELAGvttVHP/2dw1v8D\nwAnW2p7olPnAwhG/k1qkQoAheAFh6D5rsQgDNszfCMj33TWJLgDnAGx/wd6aEEIIMSLqtAHaoHoz\noHolgMFgMLoBtmMjAACstZcBl9V47OwG136akbQDJnYD9KJBQPGuSIUC9GNrbgUcXUacOywpAyCE\nEGI8yckAVAmABqOA48zbUDiE77cBAy2+GVChgF9yGYB4V6RkBiBFtBVw8nIPz5UAJACEEEKMF3Uy\nAGFoh+0AWFwJwPPcItfamwEVi/hRCSDpAIR5JYAqBwAMvhwAIYQQ40tOCcAmHIBkCNBgcgVAMgTo\n+9EiN1abAY0pqRBgiM04ANbmlADyHADjMVSUAyCEEGIcyZkEGBYKqRJAwR/mJMBgCC8WAGOVARhT\nEgLAi9oAYwcg3gyoqgsg1wHwGJIDIIQQYrywNrcEEDsAGL+qBBD/mjsHIOEAtHYJoFBwJQAzjBJA\nwgGI1ZOJMwADowtLCCGEEDtFtOFPVQgwGgRkMxkAY0yuACiHAIMhin4bIWbMdgMcW1IlgKC6BICt\nDgEmHABj3HmGqAQQ7yUshBBCjCWxA11TAIRVg4DA3cgmuwCA8ijgolfEYlo0A5BsAyy5EGC2C6Ce\nAxBdisFnqC2yA1QGEEIIMdYMDLifVSFANwgoLwMAFQGQDQEOBoMUvCIhXou2AcZfRJ0MQL0ugPg8\nYz0Gi9F5EgBCCCHGmnjtiTIA8V42Nt4LIDMIKHa3swIAKiHANr/NCYBWKwEEvlf5xIWCKwFQSmUA\nao4CzjgAxCUAkAAQQggx9mRKAGUBUGcSIDgBkB0FDC4EGDsALRcCtH7i7UVZAJ9hlAB6e3NKABIA\nQgghxpFMCSDrAFjrUm0FvxIChJwSQGISYDEuAbSaAAiTdZBIABTDdBeAzRsF3NeXKgEUClEJQBkA\nIYQQ40WtEkChmFsCiMktAUSTAAutKgBsjgAoYBkq2fKh3FHAuQ6Az5AyAEIIIcaLTAkgCN3uthTT\ng4CKNUKAGV3gHAA/6gJoNQEQFqpLAMUAhobcB63bBZAJAWI9BqN9lSUAhBBCjDk1MwCVNsAQD9+v\nDgGGYboLIA4BVkoArdYFkFRBUTtgMYTBUlA+lDsKOMcBQF0AQgghxpM4A5AtAbQVy0OCQjwKmVv9\n8i6AOSHAls0A5IUAiwGUgooAqBoFHIZugc9zACQAhBBCjBcNHACizYDyQoDu7+gnlTkARb9FBUBY\nyMkAJByA3DkA8ReccADiSYASAEIIIcaNGgKAtqIbBBTWDgFCfgiwzWvROQDWT+xVVO4CgKFkCSA7\nCrivz/2scgB8CQAhhBDjR6YEENgoBJjpAsibBAg1SgCt6gDkZgACKIXpEkDKAejtdT/zMgCedd+g\nBIAQQoixpr/fLUjRHX7eHAAnAKpDgJDMAiRCgK0qAGxOCaDKAciGAGs5AKFHSLQLkwSAEEKIsaav\nr2ofAMAtUkNDEKYzADF1HYB4MyDbcgKgOgRYCGEorBMCrOMAhDaUABBCCDE+bN4M06eX/0wJgCCA\nIEg7AA1CgGkHoOXaAHMyAAGU6oUAazgAVgJACCHEeFJPAABmcKDmICDICQG2cgYgVQJIzAEYitoA\nfT9nFHAsALJdANZ3gQsJACGEEOPB5s0wY0b5z8okQCcAvKHBlAMQU6sEMBgM0ta6cwBqOABhgOe5\nQETVKOC4BJB1AEI5AEIIIcaRTZvqOwBDA7khwOwgoLg00NLbAVMjBFgKgtgQqF0CUAZACCFEM5Fx\nACoCoA0Ab3Cgbgiw1l4AIV7rhQDLqzykQ4BBEP9Z3QUwHAcg7sUUQgghxopaDkBbXALoH3EIsK3g\nugBM6zkAharfi4GrmyQdgFQXQF+f+7ZihYBKAEIIIZqAGiFAEzkAJsoAFAsjGAQUZwBsy3UB5JcA\nsgKgygFI3P2XLw0VAhRCCDGOZEOA0SRA0xaVADIZgJi6IcBW7QLIKwEUA8CrCIDcUcCJ+n/8NGoD\nFEIIMW4MDrob1DohQL/kMgDFGpMA80KALdsGWCsDgKlkAIbrAKgEIIQQYtzYvNn9zAkBxiUALyg5\nB6AwvBCgxU4QByAxByDlAOSNAs44ABIAQgghxpVNm9zPOg4AMKIQINDCXQDFhADwPKznuRKAqRMC\nrOUABL4EgBBCiPEhdgByBIDX1l45hkfbMEOAAO0FNwegtbsAcDsmZR2AkJw5ADUcgCBUCFAIIcQ4\nEDsAdSYBArlzALKDgJLEbYAtWAIoVv2dzQDkzgHICwGqBCCEEGK8qOMAmIQDYPHwveGFAIFKBqDV\n2gCNn3EACn5VF0DVKOC+PoUAhRBCNBebN7uVfPLk8qGKAGgrH7PGS9/UUr8EUGzVvQBMMS0AKBZd\nCcA0mAOQUwIIAwkAIYQQ40Q8BTCxiudlAPAqAiAbAiyXAiZECDBbAigWcucAVGUA6oUA29slAIQQ\nQowtmSmAUNsB8M3wQ4CxA9ByIUCTEQC2WJ0ByO0CGE4IcBT1EiGEEGJUbNqUCgBCYhJgsSIAjGdG\nVgLwi9hWdACyAoBCThdA3m6AeaOArUcQRiWAMIRSaZe+dyGEEKJMHQcgWQJIZgCGEwIsekWsacXN\ngPIyAJk5ANZmRgHX6ALAepRiAQAqAwghhBg7MvsAQH4JIJkBiKnnALT5ba2ZAfAyDoCJQ4A76wCA\nBIAQQoixI7MVMFQEgF9oK6/u1nj4Xv0MQDYEaPEgbLU2wKoQYFs5A1AzBFgjA4D1JQCEEEKMDzkl\ngHgQkGe88jCgZAYgtvrj9H92LwCIQoCmBR0AU6hRAvBqhADD0C3sNRyAUhBIAAghhBh7ckKA5QyA\n8SAqA9gRlgDiNsCWywAkk5HgBEHdOQDxop7rAKgEIIQQYhywtn4IMOEAMJoQYCtmAKpKAG1t1XMA\nkqOA+/rcz1oZACsBIIQQYozZvh2CoL4DEAuA0TgApgUdAK8tGwKszgCkRgHHAqBGF0CYdAAGBnbd\nGxdCCCFicvYBgEQI0PNTAmCkg4DAYFrPAciUABJdAMkMQFkt9fa6n3kOQKgQoBBCiHGghgCIBwE1\nCgE26gIIjYdtuc2AijmDgAJTuwughgNQyQAoBCiEEGKMydkKGEZeAsjrAmjz27CtGALMzgFIdgGk\nSgCxLKrnACgDIIQQYjxoUAJICoDRTAIMjdeCJYCsA1AsUggzDkBeCLCGAxCqBCCEEGKsiR2A4XQB\neF56fxtqZwB842OMac0uAHLnAJjqOQDUdwDiEGBgw3KvpQSAEEKIMWHzZndj2t6eOlwOARo/lQEo\nH4uoJQCKvrumJbsAqgRAozkAdR2AaDtgY6CjgxXP3MOlf7h0l759IYQQIm8MMORPAsT3yseykwCz\nIUDXAYDLAIyVA2CMOc8Y86Qxps8Yc6cx5vA6577ZGHOTMabbGLPFGHOHMeb4Yb1QnUmAuSHARhmA\n6Mumo4MHn76bb9zzjWG9DSGEEGLU5GwEBPmTAI1XEQAxjRwAa4ybhDtCRiwAjDFvBb4MXAi8AngQ\nWGaMmV3jktcCNwFvABYDvwZ+YYw5tOGL5QiAbAYgFQLs63PfVCY7UM4AxAqpo4OB7ZvZ2Lex4VsQ\nQgghdoqcKYCQ2A3QmFQGACIHIBMCrDgB1Q4AjE0b4PnAFdbaq621K4H3A73Ae/NOttaeb639krX2\nXmvt49bajwOPAW9q+ErD3Asg5QBk7v6jy6oEwFDvNjb1baq4AkIIIcSuIGcfAMisX9kMgDf8DMBn\npnyR60/97ojf1ogEgDGmCCwBbo2PWTd94BZg6TCfwwBTgOcbnuynpyFRKNCW3Q3QZkoAmfo/1BAA\nO7ZjsWzu3zycty2EEEKMjjoOQDnsl+MAxNQSAG2+KxusL+zFlml7j/htjdQBmA34wPrM8fXA/GE+\nx8eAScC1Dc/MLQHY6jkAcRfAhg0wa1b+04R+eepS2N5e7gJQGUAIIcQupYYDENigygFIlQAaTAKM\nSwDGuP2GRkqh8SkvHMaYtwOfBE621m5odP75F17ItK9+tXJg1SqO7w9rdwFs2ABz5lQ9T9YBGGrz\n6Si5xzb2boRqzSCEEEK8MNRxAOoJgJh6JYAf/OAHbNr0A665Bu691x3fsmXLsN7WSAXABiAA5mWO\nzwPW1bvQGPM24JvA6dbaXw/nxS69+GIWH3VU5cBnP8u6z/8rf1+rC6CnJ1cAxHMAbCQABnzoiMYA\nbOhtqEOEEEKI0TMCAWD82iHA7CTAolfkzDPP5J/+6Uze9jb49Kfd4/fddx9Llixp+LZGVAKw1g4B\n9wLHxseimv6xwB21rjPGnAl8G3ibtfbGYb9g7hwAC6bGIKAaAsAY92WGOAHQX7AVB0AlACGEELuK\nUgm2bRt5CDBnEFB2L4A4BDjKLsBRlQAuAa40xtwL3I3rCugCrnRvxHwe2NNa++7o77dHj30I+KMx\nJnYP+qy1W+u/u5wugGg3wNwQYE8PzM7vRvS8Sgmg1w/pKEFXscuVAIQQQohdQWzH1woBeukQYNIB\nKM8JyAwCihnzDIC19tqo5/8zOOv/AeAEa21PdMp8YGHiknNwwcGvR//FXEWN1sEyVXKnSDGw+XMA\nrK3pAIBTU2EUAtzuBUy1bczpmiMHQAghxK6jxk6A4CYBlm9g4zH1iQyAjXr7a4YA/XEIAVprLwMu\nq/HY2Zm/jx7Na+RSLFKw1V0AnvFgxw4YGKgpANyX6dTUNm+IKbbA7K7ZcgCEEELsOmrsBAiNMwBx\n51rNEOBOOgDNvRdAlngvAErlDEA5BNgTGRC1HACvIgC2mgEmhQVmdc2SAyCEEGLUhCE8/XSdE2rs\nBAj1MwDDCQHGcwA8byIIgOgLKphS9RyAYQiAuJ6ymX66Ao9ZnRIAQgghRs9118GBB1Zu9KuIH8gp\nAVx5VUjfjvxBQHmTAOuFACeMACjaoeoSQCwAaoQAkw7AJttHR8kwq3OW2gCFEEKMmhsevJvBdx7J\nn1YM5Z+webNboadOTR0OAnjq6ZDSUO0SQMxwSgCj6QLYLQVAwQxVdwFsiBbymgLAxxJgrWVDuJ32\nknUlAGUAhBBCjJLfb/4+7H0Hd67IDsiN2LQJpk2run1/8kkohQFhUGcOQKNJgBPKAYhW/aK/PT0H\nwEQlgKlTob0991Lfc3MAtg5sZbsXUBwKyiUAO5pvTgghxITn2eItADz45578E2oMAVqxAjAhQemF\ncQBaXwDEJYCODfklgBr1f3ACAELWbV9HfwEKgyVmdc1iMBhkx9COMXjzQgghWolnNq1hYNrDAKx8\ntjv/pE2bRiYAEoOAhjMJMD4+cQRA+4bqUcANBEAhygDEAsAfGGJ2lysXqAwghBBipFx7T3ljXJ7s\nriEANm/ODQA+9BBgQmzgs2MHdR2AmoOAohLAxOoCyDgA5S6AGvV/AN/3sKYiAEypxKziNEDjgIUQ\nQoycX626GZ57Be1MYdNAN1vzZtvWKQHMmBWC9Vi/nvIgoHolgKougAnpALRtwfhumH8qBFjXAXDf\n4Nptawnb3fPM9qcAcgCEEEKMDGst9zx/C8VnX8/srjkwqYdHHsk5MWcr4KEhWLUK9t4nAOvx3HOM\nKgQYzwGYGF0AcQgwhO2hS/2nQoANMwBOAHROdv8YM00XoB0BhRBCjIyHeh5im13H3qXj2GvaXJjU\nzcMP55yY4wA89pgTAQv3dg7AunXkDgKKqbcdcHx84jgAAWwpuXrLyEKAsGbbGrqmzgRgclig6BVd\nCeCMM+C223bxBxBCCNEK3PLELZigncWzj2L+1Ll0zq4hAHJCgCtWuJ977BliyAgAv/YgIIUAgUII\nW0qu5cJiKQ6FsHVr/RKAX3EAJk9xWQEzMMCsrln0PvcM/OQncMMNu/gDCCGEaAVufuJmCmuP4qWL\nOpnbNZf2GT3VAsDa3BDgihUwfz60t4cUfD9XANQbBRwzMR2AEDYPVRyASVv63ON1QoBJATBlWiQU\n+vuZ3TWbtkcfd3+vWrVr3rcQQoiWYTAY5LdP/ZahVa/noINgzqQ52K5ul+xP0tcHg4NVDsBDD8FL\nXwqBDSgWamcAYjQHACoZgME2tgw5ByC0IZO39rvH6zoA7htcs20N06fNdwf7+5nVOYspjz/r/pYA\nEEII0YA7V9/p5sc8fhyLFsHcSXPp87t5+mnYvr1yXt8TzwHwTP/c1PUrVsAhh7j1q1hIlwA8P7EZ\nUCYEWG4HzEwCnFBtgMUd03l+wDkA1lombel1jw+jBNA71Mv0GQkB0DWLWU9GIxyfeMJtKSyEEELU\n4JYnbmGSNxPWH8aLX+wEwKDtheIOVq6snPeHK91N5dduPqh8rL8f/vxn5wCENqStmJ8B0F4AWeIM\nQN9UNg1UHICRCACAmdP3dL9EDsAez26CuXPdN/j447vmvQshhGgJbnniFhYMHsu+e/t0dTkBAMCk\ndA5g1fUr2UEX3/jFArZsccdWrnRLTS0B4BWiEKCpHQKMmZgZgN5pbIwdACIHoKMDJk2qeWkhMUFh\n1sy93C+RANhnbS+ccoo7lpRvQgghRIIgDPjj2j/S9txrWbTIHZvT5W4+5+1f6QR4+mkoPLaSbXss\non/Q43vfc8fjDoCDD3YCoL3NZ/16CP3aIcDsJMC4NJCcA9D6AiDOAPRNYWNfJgQ4e3a1PEpdWvmo\nc2YudL/097Nn0MX8LQG87nVuxyblAIQQQtRg3fZ1lMISzz++PwdFzn7sAOx1YEUAXH01HOytZNaR\nizj5ZLjiCrdIr1gBe+/t9q4LbEB7m0epBFv6osV8JHMAJlQIMHYA+iazoa9SAujavKOu/Q9Q9Ct2\nytxZFQGw/zpX8x866EA46CAJACGEEDVZvXU1AOseXVAWAPG+MrP3cQLAWrjySnhZ20qKLz2Iv/1b\nWL4c7ryz0gEAsQMQzaiZdjCXtv0zzy94OaDtgKuJMwADk+nprYQAhyMA4gzArM5ZtHW5EcD097PX\n6i0EBjYunAWLFqkEIIQQoibPbnVdY8GmigAo+kVmdMxgyvwenngCbroJNj3xPFP7e+CggzjuONhv\nP+cCrFiRFgAd7W5teu75dj5Z/AK2oxMY2V4AE6sLoH8SWwa2MBgMDt8BiEoA8yfPd99WWxv09zP3\nqR6emAEbbW/FARjNNymEEKLlWb11Ne1eF/TNKGcAwJUB2qZ3Yy1ccAEcvUfkJh90EJ4H55wDP/oR\nPPWUawGEjAB4DoKgstjXmwQYM7EcgCgD0D7own49O3oIbUjnCByA+ZOjFsCODujvZ9rja3h4TrQj\n4KJFbmpTT8+u+wxCCCF2W1ZvXc0Uu4CpUw3z51eOz500l6DTOdP33QdnHbHSrcwvfjEAZ58NJbeH\nXcoBKPo+06fDunVpAVBvEmDeKODWbwM0hhI+7UMdAPT09mCxdG7ZUXcKINQQAAMDdDz2pBMAvZEA\nAJUBhBBC5LJ662qKvc7+T96Rz500ly1DPewVNZm9bt5Kl/brcpvOzZ/vms2MgZe8xJ0ThAGe8Zg/\n3wmAMEwLgBg5ABGBKdIx5Gok3Tu6sUFAx5bhlADcN5gSAN3d+KvX8MicaEfAF73IlQcUBBRCCJHD\ns1ufpfR8pf4fM6drDt07ulm8GI47DqY9t5LsSRddBF/9KnS6Jay8mV0sAKocgEYhwJ3sAiiM/JLx\npeQVaQucA9C9o5vpvSFeaIeXAShlBMADDwDw7F5TXAmgvd0lNSQAhBCipdmyxdXdswt5I1ZvXc22\nNUez6Mj08bmT5tK9o5vbro4W6iNWwYknps5ZtIhUbiAWAHvsAWvXumPlDMAwBgFNrDkAQECBDgyT\nipPo2dHD7B3Rpx5JCBCcALj/fgCe32euKwGA+1+DSgBCCNHSfP7zcMwxI7smCAPWbl1Lf/cCXvay\n9GOxAJg2zTKta8hNlW2gLkIb4ns+8+fDatddWE76J0sA5WPZLoAJtRcAzgFo94aYM8nZLbO2R8mH\nYQqAPSbv4Q50dLgthPfdl64Zc5wDAE6eZR2Aiy6C972vvMvD9ddDb+8L9pGEEEKMMffc4xyA9euH\nf033jm5KtgRbF7BkSfqxOZPmMBQOsXVgq1v8S6VhCYC4BLBmjTs22hDgxBAApkibGWLupLn09PYw\nqzf61A1CgNOLcyAosv+MA9yBDldG4OCDmdU5qyIADjoovSnQmjXw6U/Dt78NS5fy6A2PccopcPnl\nu3KSzYwAACAASURBVODDCSGE2OVYCw8+6H6PR/MOh3gGwMzCAvbYI/1YPA2we0d3xUVO+v05BLYS\nAuyPNrUdbQiw9bsAiASAVyoHLmbtsIS+BzNm1L1uQeeBcPFGFkze1x1ICoCuWZUSwKJF6U2BvvQl\nt8fAnXfC4CB7n3Y4J/FL/ud/ds3nE0IIsWtZuxY2bHC/L18+/OviKYCvOGBB1WKcEgCrVrlZv8k+\nwRySDkDMWIYAdzsBEJhC2QHo3tHNnB0wMG1SdXEkQ7EIDE4p92HWdABixbZqlZsHcMUV8Pd/D0cc\nAXffzR/a/pJf8iYKt/+anh54dOOjfGTZR/jmvd/krtV3sWNwxy753EIIIV4Y4rv/uXNrOACbNsE/\n/mNVrXf11tVQ6uCIl8+quiQWAD29Pc4ByPYJ5pAMAcaM5SCg3a8LICoBzOmaw/od65nTC/0zptLZ\n4LpoiCBDQ1ELRlIADKx1bYDg/hcxfbr7B7z3Xics/uEfAHh0/TSO3fYzNs1ZxFt7fsgvf3k0N0y6\ngBseu6E8ldBg+NiSi7j4r/5ll3x+IYQQO8cDD7gb9BNPrOEA/OIX8JWvwOGHwzveUT68cu1q2LKA\nVx5dvbDP7JyJZ7xKCWAY7QWhDfGNn+8AUDsEeOCsAzl8z8PLomMCOQCVDMD67euZ3Qv9M6Y0vC4p\nAICUAJjdNZvn+54ntKH7Jhctgrvvhv/8T/jbv4VZTu399KfQ2eXRdcZJnNL2K75/w+P8bOXPuPSE\nS9n+L9v53TvuxX/yDXzl198bVT1GCCHErufBB+Gww+DlL3eb81T9//Udd7if11yTOvzQs6th6wIW\nL65+Ts94zO6aTff29SMSAJ7xmDUrceefEwI0xi3+sQNwwMwDuPucu+kqdpUfnxACoGSKFE2JOZPm\n0FfqcyWA6aMUAAsXwpQpzOqaRWhDtvRvcY8ddBD8/OfQ1wcf+Uj5OX76U3jjG6F46knMG1zNxp5P\nMb1jBmcdehadxU7u+vligvvezcDUh7nih8++wJ9cCCHEC8EDD8Chh7qRvDt2uPn8Ke64w1kEN91U\nCQsAT216lraBBey9d+LcFSvgTW+CZ59l7qS59K152o2UbxAAhMokQM+DefPcsbwQYHy8VkVhwrQB\nBqZAMXIAAOb0wsDMqQ2vi7YRqAiAs8+Gf/93wO0QCFTnAM4+G/bcE3D/A7n3XjjtNOC1ryXonMSJ\n3o85dsoH6Sp20d8PX/4yvGPpsWANn/nezQTBC/GJhRBCvFDs2AGPPeYcgLiXP5UD2LLFHbjgAreq\n/uQn5Yc2DKxmz0kL0wvxd78Lv/wlHHMMLxmcRtvjT7rjI3AAgHIOIDkHwCReqJ4AmDBdAENeG/sO\nrGI+kwGcAzCjsQCocgBe/Wp429sAmNUVCYC4E+Dww11Q4J/+qXz9dde5QYEnnQS0t/P4kn046fES\n/PE8wO393N0Nn/roLA6ZcTjrJt3E97630x9XCCHEC8jy5W5df926H7LHv/4tM2ZkcgB33eVOOPVU\neP3r4Qc/ANxi3VtYw4vnLUg/4bJlcMIJMDDApf/+J/a5/0m3Wh9wQMP3khQAcQ4gLwQI6RJAlglT\nAvjpnh/ixdvv56Wvfzuvfco5AIPDcABiAVDuAkhQ5QAce6zrANh///I5P/mJ+zeeMgUGg0G+tcca\nlq6Ge68r0N8PF18MZ5zhNn5688uOp3jQzVz46YDBwZ39xEIIIV4oHnwQ9vOeZr/Pn4P51jc57sVP\npR2AO+7AzpzJlb13EL7trfC738Gzz/LIMz3gD3HY/gkBsHq1CxG8971w221MGgh5z8+edGtHe3vV\na//qsV+x9NtLeWzjY0AlBAjVAmAkJYAJIwB+M/t03v/qB/EWLOS3V0J7AIMzpzW8Lt58IS/xWeUA\nGON6/yPWrIE//CGy/4FrH7qWaxZuwbeWI7Ys47zzXIngX6Lg//EHHM9Q4XmeHrifb397+J9NJQMh\nhNi1PHC/5Xud52CmTYP2dt5SuC69LtxxB0+8ZB5nX/9ebl882y3kP/oRt93jcl1HviwhAJYtc7fm\nr389vOhFXPMff8P6KR684hW5r/395d/nztV3cuR3juSPa/5Y1wFIhgDj47W63SeMADAGuqe+CO+3\nv+Nf3tjO+kmw9cB9Gl63eLEL8L3znXDLLenHOgod7DVlLz5+28f57v3fpRSmbYKf/cxlCN70JiiF\nJb78hy/z8sUnYg87jNO7fsV3vuNKA4ce6s5/9YJXM6VtCof+9TI++9nyBOG6XHqpG2Y4kqEUQggh\nRsbCm7/DX+y4Gf7rv+CEEzhy3U9ZtQrn1gYB9s47+dFUN/DnV+t/D3/1V3DNNdy90h074iUZAXD4\n4TBzJgD+QQfzkvMs4eXfqHpday2/e/p3vOew93DAzAM4+qqjeWLTE1UZgFoOQFtb5bEsE0YAQGTn\n+z4/PmEB8z8G21+0d8NrCgWX4j/mGLeQ33xz+vHb3n0br17wat57/Xt52TdexnWPXIe1lhUr4LOf\ndf2iHZP7OP3a01m+fjkXHHUB5qSTOD68EY+ACy5IvD+/yDH7HUPbwTexdat7zXrzpi+6CD78YZdP\n+NjHRvedCCGEqE/4zGrOe+LDLH/l2e7/1E87jflP3MGc0lq3BcxDD2G2beOmedt49V5LWfb4Mjjz\nTLj/frb96R5M2Ma8ydG+M6WSu5s84YTy88+dNJdNHZbn26sTeU9veZrVW1dz6qJTufWsWzl6v6PZ\n2LexpgNwxsFn8JGllS60K6+Ed70r/3NNmC4AqCT650xy/xBZpVSLjo6KCDj55LQIOHDWgVx7xrXc\nc8497D1tb0679jRe+Z9Hc+Rf/4n58+GSyzZz4vdP5KbHb+L6M6/nNfu8Bk46icn9G/nR+XfxF3+R\nfq3jDzie+zfcwf/eto3Vq13m8JFH0udYCx//OHziE/CZz8DVVztBuWzZaL8ZIYQQuVhL37vOZTuT\n2XDBJe7Ym96ELRR4Mz9j+XIIf/97Sh4UX3YK919xHg+uf5B1r10MU6eydPmvmcqCSjL/j390EwMT\nW/6mxgFnuP3p2wE4au+j6Cp28bO3/owLjrqAkxedDFQLgKULl3LOknPK17/hDbDXXvkfbcJ0ARhT\nEQDlKUjUH7eYpKPDJfqPPtrV9J94Iv34kj2XsOydy/jSYTfywGPr2fr2V7D4Ux/g9Bv+kuXrl3Pr\nWbfyxhe/0Z38qlfB7Nmc3nlD1escf8DxlMISm6b+hrvugsmT4S/+Ar71LfjmN91d/1veAp/7nNtu\n4MP/vIPn9/02f/GaQT72MeUBhBDiBeWqq5j0u//lXL7JIUdOd8dmzMAceyzvaP8JK1bAMzf+kPvn\nw5M//wTmyeMA+MIvb2fg5DN4zxP38RI7r/J8y5a5qbGHH14+VB4HvKOn6uVvf+Z2Dp5zcDlzVvAK\nXHTsRZzwIucgLF4M559P1TbDw2FClQDKDkDXyByAmPZ2+OEPXc39zDMTrYERN98MnzzzBI5a8Sc+\n97ov8dNHr2Fj70ZuP/t2li5cWjnR9536u/76Kvn1opkvYv8Z+7Ps8WUsXAi//73TC+eeCx/4gJsy\n+fDDThB85CPwuds/xzm/eB/T33Uuy5dbrrpqxF+LEEKIPNasgX/8R+5/2Vncv8dJzJ2beOy00zhi\n4Hc8dU83/p13sXLfhTx++yu59fq5TO9bzNd+tYwvTvkMbbbERbc8V7lu2TIX/itUJurHrnSuA/DM\n7bxm79fUfIudnXDJJdDVNfKPN2EEwIc+5DouIOEANNhwIY+pU50IuO8++OQnK8f/539c5uPoo+HG\nG4r8y+vO56l/eIrlH1jOIXMPqX6id7/btYF86ENV/wLH73ccf77jlwBMmwY33ggbN7qwSXe3u+x9\n74O129Zy6Z2XctTeR/GrtVfx8g9+gU98wg2sEEII0ZhVG1Zx+rWnM+9L83j3z9/NDY+6PVqw1o10\n7+zk4vmXcthhmQtPPRVj4GWr/omFPYP8dt1ZvOUtzrE995gTKCy6iU9ePp/zXzeDY/7wlBv68/zz\nblx8wv4HmNY+jaJXrBIA3Tu6WblhJa/d57W75LNPGAFw2mlOdMHoHYCYV73KWfEXX+zu+q+5xj3/\nKae45H/cOjijcwYzOmtsN/z618Pll8PXv04qCdjdzacuvY8bL3qadVddBrh/pJkzq5Ocn/7Np3ll\nT5HbftTJf+x/Hn+aewE9c37MxRcP84NceCF87Wsj+/BCCNECrNm6hnN/cS6HXHYId6+5m7e/9O3c\ntfou/uoHf8W8L83j1//2N3DDDXDFFfzfIzPL3Vpl5sxh3aKjOO+5/wbg1mfO5XOfcw+98cATGCxu\n4LVvvY//PmIzTy092ImJn/zEub6JACC4m9F4p9okv3/m9wB1HYCdYcLsBpgkdgBGKwAAPvpRF+Q8\n4wzYuhXOOst1hxRG8s2ce67r9fvIR9ykoJe+FN73PuZhWTXXx//Cp+HdH8y9dNWGVfzozv/iyetm\nUnz2Zj70yCoeu+BkrnjzWfzbt/fmsMOO4K//us5r//znLkHY2ekmG86ZM6LPL4QQuytrtq7hkMsO\noeAV+OJxX+QDh3+AjkIHl9hLWN69nG/84lMc+qHvsuWvT2LTy09m9WqqHIAdgzu45mXr+ejKkGf9\nOZz8wb3LQ/yWLlzK5LbJLH739/ndXUOs/Nz57HvKR9wW8QcfDAsWVL2nOZPmuC2BE9z+9O3sM20f\nFk5buEu+hwnVBRAT11tGEgLM4nkufT9zpvs3/c53Rrj4x3z4w/Cv/+pi/aecAkccgbd8BY999Gxe\ntLKbJ2/8Ye5lH7/1Ar57YwfTN/XDbbdhjOGrlzzC8dNeiv/eY3jrxd/iN7cFrl7Q35++uLvbiY/j\njnMf5KtfHcUbF0KI5qFnRw8fvemjvP+X7+fCX1/IZX+8jN889Zvccy/8zYUUvAIr/24l5y89n47Q\ng1tvxfzHf/Dyf/kPvv6F5YQFn9OPXMepbw5YsKDiIANsG9jGG77/Bq7Y7xkA7jZH84lPVB5v89s4\nZr9j+O8/OXdg9oGHuU1fBger7P+YPafsyR/XuiE/Mf+/vTMPr6o69/9n7TNlnoeTEAgkgTCEQYJD\nFVQQteoVO1gteEWsrb0O16Heny21FVFblVYFr/oTW9riXIdWUVCLA7TMEuYpCRBCyEjIfJKc8b1/\n7AOGkGBAISlnfZ5nP2Sv/e6dtb/srP3uNbzvv/b/y1w5doo42VUAiEif24CxgBQUFMjx2Fi5UXgI\n+aj4o+Pa9YRA4GtfwrzI3Lkif/7zkQu2t7ukJMkqy89LP8Z8TdkauXkKIiDy2mtmYXGxiNMpvtGj\n5NHHp8hvxyP7IsNNm9GjRQoLv/xd11wjkpQkUl0tcu+9InFxIo2N38CNaDQazamhqb1J1pevl/d2\nvSelDaVHyv0Bv7zwxQsS+9t4iZgdJ8PnjpX0J9PF+rBVeAh5ZfMrR11na/VWMWYbMm/NPLNg7VqR\nvDyzrQwPF8nPF5kxQwr+Nl+YpcRx0dOyZcuX59e11sl5fzxPYh6LkZX7V8qbg38p79659Jj6Prfu\nOeEhhIeQyuZKs+2dM0dk9+4u729ZyTJRDyl5atVTR+7XmG3Ii+tf/JrKdc/114tMmvTlfkFBgQAC\njJXjvGv/rYcAsuKzGJI4hEHxg772tU5iHmHXF7n77qOKHI4Ian9yA+c/vpB1q97mnPOvBaCurY6n\nF/yYP3+oCNzyI4ypU80TcnJg6VIsF13EA7/YgjsmioVDfHzaP5ZnVteRMDqfsl+9SITVg/O991h6\n299YNi+FC0f8jMtdz8L8+TqakEaj6VP4A37uXHIni4oWUdFccdSxQXGDmHZwKG0bd7Ioex+NpTPg\nkzkUupO57TaY9VCAe/95Ez/94KecnZbPkLW74cABXir/C3nWTF679UYyW37GlJJ5yOgxGGvWwLhx\nYLEgAn+8A9S+7XDJL4nodzW+QCYvFrzIQ8sewhfw8en0TxmXPg6Kzu+y7pdnm+P8NsNmDjsrddw2\n9qKBF3H3uXcz89OZXDH4CkobSglI4JT3AJzMEICSkznrFKOUGgsUFBQUMHbs2N6uztcm0NxEizOB\n9yekMO3DctaVr2Pm89/jDy9W4UzMJHLjtmPXfuzcCXv2wGWXsbW8jvFzpxFwrGD+/HOY1rQSDzZe\nZyo/MhaSnGxGGlw78hbOPrgEVVJiBjzoSGUlvPmmGQQhJQVmzGDv4Mt5/e9epv4gjKysE/SAPMHZ\ntV0kvNBoNBoefhiefx7uuYdfDa3ksS3Pct+37mNU6ihyE3NxRjkpXP4OqY8+w8gvSo6c1po8AMtl\nk/nccz6PLh7LnrAR/PLBJqrX5nHLZw0MqnYjhoEK9nm7lQNB8Wt5mAXR9zLxUisxMWbo3IYGs9l7\ndr6LJ9tGkhCegMvrorC2kJvG3MQjEx8hI+bYcfzO5DyTg1/8lNxd8pW2AG3eNsbMH0NcWByTBk5i\nwcYFVP9P9UmtWOsJixdDa6s5lw1gw4YN5OfnA+SLyIZuTzxe90BvbfRwCODfiZJbr5d6B3LzKz+Q\n70wzpDncIp4h2WaXfw9w+9wy9e2pomYhb/70h1J79uVSvP6QLNuzUu758F657LFfS27UMvGjpOWp\nF8yTWlslsHCh+CdeLGIYIjabyFVXiXv4CBGQ8nC7PHYB0v+OcEl+ME++/dJ/yMxPZsqykmXi8Xm6\nr0xFhcioUSIpKSLz54t4vd+AQhqNpjfwB/yyvWa7VDRViM/vO/qg2y2yeHHX3d2BgMi6dSKlpdLu\nbZc5K+ZIxlMZMnvZbPH97R2zK/7ii8Vns0ptOLLq1itFliwReeklkSefFLnhBgkoJZVR2TI97K+y\nZ2OjyAcfiNxzj9mVbxgiIF7DJnXEiR8l7w415PE510jenDEy8tpRMjP7DXHNelykqEiKikRmzTK7\nws8/3xwBGDlS5IknzOp+sucTMWYbMmnhJNlQseGENHpk+SMy490ZJ3TO6rLVYsw2xP6IXb731++d\n0Llfl54OAegegNNFWRn+gZmszBAu3A+B71yDsfAlMyBBDwlIgJ8v/Tm/X/17xtaOpTa7lv2N+0mL\nSqPF04LL08qbC9IYV+NjVU4eV+z+J3FuD58NhDfyHHyUm4o7PJka2cpZNV7u2ZzBdTtqsba6eSMt\nh7njUtg5qpC0hoOM3xdGflE/toVNoiz3V5wzbACZmdC4qYQf/mkyeFvYljKOyWVLkLw81JNPmpMR\nlSIgARraG4gPi6epSbFiBaSmmr1yp5PXX3+dqYeHVjRdojU6PmeyPq2twl83LeKJdbMobNwMmCuq\nnFFOhlidTF/r5qoP9pHSZAYkKc+ZQPRdPyJm8rnw1lvm7Ok9e3jZbmPF9AQW9K/l2znfZs+aJaz/\ngyIweTIbnpnJjOcuZUHRUCYu3Y06PJE5KgrS01mZfxcTX/8Jr/zVznXXdaqgywVbtsCGDVRtquJX\nhTeyoPVzuPq/ABi5bgUrXr/gRJpQaltrSQxPPGVf4p2Z+clMHl/5ODeqG3npwZdOy++EnvcAnJQD\noJS6A/gfwAlsBv5bRL44jv3FwJPACGA/8BsR6TbW3RnpAADt130fx9t/Rz36KPziF93ndvwK5q2Z\nxwM/eYDpj0/n+hHXM37AeFq9rSzcvJCP3/gd7z29n9oIeC0vlcW5V9IYPoEmTz2NvoO0cpAhiUN5\n4fZp5A9JN5cvLliAb85TWCv202DEExeoB6AszkH/BjebU2HWuEx2t57FP9YuxhXm49IbhdJ4yN8+\ngGeXC+fVlFGXksy/BsfzemY165IaGV1l56ySaPLLDVolmh3OYYRdei7n3DSemIgw7I0t2BqaiItJ\nwTlmPIKiqQncbjAsfgq2vk3Zp29hcYylrf1q1u3NJTzWzv33w6BO0z68XmF7sYucAVFERZllU6ZM\nYdGiRV1qGAictPxnFMfTSPPN6LN5M3z4obn8bMKEozKN95j6tnq21Wyj6FARKZEpDE4cTFZMJraD\nddQ3VFJaVczGnXvwlhTjrCjBWVZOcnkd+Lz4A3584sdvgCc8EpfEUtMShzVsH3E0Et8USVRzFD6b\nHRVvQDyk76nA5vHx6uA4XpjgJaeuhZsLrEwuNTOluqw2Fuem8uooL+XvV7O+BV4e8998lv0bHl0+\nmlZ1gPE/teKJcjAqeSx/vuQj3OUtJEe4SBqaBGFhbNtmRtGdPt2cutQTPv9cuOHVO7HaA+yY8/+P\n/K33Vdw+N7OXz6bgyQI+XnL6krycMgdAKXU9sBC4FVgH3Av8ABgiIrVd2A8EtgHPAwuAycBc4EoR\nWdrZPnjOGekA0NgI+/efXLDnTnTXMAUkwM5Vi0gfcR7xcc6eX9DrNb364mI491xzi4+n6fOPaPv5\nfaR+sQOfAeUD4vnHcz8jb+Ql1Lc1MHfp23xe8Tcm7m/g6iL49i47g5s8Ry5bHxVO8cAYcLUwssxF\nuA98CqydHrvyKAufx2fxaWAiGfZd/Efbas6t6hSjGah2RHJApSLOgQy5IJtD5SW0FG0nuaGGWI+f\nguQw1sTmsCvuIj7bvZJZ5/0/sm1VpPgrqa3zUNRYQqV1K1bLQXJrExnWYtC/pQ5sduoT06lKiKMs\nPoyiHCeFw1JojQsQFqboH+9kGA6GHGgmOTqVlEGjIKkf/rhEwiMU4vNR56rF5W2FMAeG1YaBIqW6\nBWvBRjNxSHk5gbwRFA+KZXF0FdXhflIiU0iNSiU1MpW8lDzSotPw+80VnoEAeLx+SptKaFU1WMJd\ntPlc+AN+8tPzyYzN7PZLRgQqKsxpJHFxZtjrpCRzXFQEvL4ABxqquWXaDOb97zt4WsMRv4X0dDMp\nyTFpR0WOzJStPNhOZY2b4dmxx0w1OQa3GwwDsdqor4eDB82QFcnJUNVeQkFlAVnxWeTG5RBZXWfa\nx8eblQ5W1uNqorh0I03NteQNGEd4VApVDWFY7QbJyV/W1ev3UlS7l7V7dtHY1szYpCQGuwxS6z0Y\nAl67lcomRVW7g6ixQ0jPjCbMbiXMGobHoyjbL1RtqcHb5sNtEUrcRcz7/V3cN+ki+u/dQ+beEhyG\ngXXIYBJHjyZy8DAqmlys3lLKjtJSXG3NDIhOYogzieEZiRzYa2HVCjdl+904bB4k4MZudZPu9OBN\nVXySZGVFYg2NUTuJtih+UGMwtbiBESV1HIp1UBptZ0+EQbmjmVZrE34FhkDuIRhTBaOqIfLYPxHq\nHAZb4yMojI7Da4nAjgO7EYa4vVh8h4i21hMlLqz2eJKS8klMzcVti6J4azsHCl3YfS5KyWTVmDt4\ncH4/xp0dYH3Fet7YuIiVy94itbyI1f0GIN4R2JuG0rJkNU+FX8mPSx/kkN2Jw9vCOMtyCi//I6Rt\ngFeXQFvCkfo5nWbq9OJic+rTunVfBl07UzndjvapdADWAGtF5O7gvgLKgGdEZE4X9k8AV4jIqA5l\nrwOxInJlN7/jzHQAvkFO6wMlAp9+CkuWwIMPmo1zB7x+L2+t+oJ+EVnk9nOSULcbe2mx6ej06/fl\nEguPh51vrWDTa8uo81ipVdHUEo0lsI8xzYvJ37+TkVVumhywaVg29fn/iRpzMwmJu6it+YDSHf+k\nraSY+Lo2MpogrRkawqA0OozW2OFk9MsmbtdGhuwtJa3ZyxRgEeCyGlSGheOzt2GTAI6AA2UJpzjW\ny64EFyWxFmx+xaAmH4PqYcghyGiGALAlyUFlhIUxh9pIc/X8b8WnwG+AI5jUqSw2nMroCIYcrCPO\nbV6nya5odkCLXWh0wP5Y2BcbSTGDaPAlkKX2kO2pIrvRT0SwoRdADr/zA3bwxhDmdRDrbyfG1060\nx01AQath0G4BrwUcfiHML4T7ArRbDA5EWyiP81AZLTy3B+bGg7MFwr2wM8HK1sQwdiZGEeu1kn/Q\nw5iDreTUttBmNagNh0ORAdqsEOGxEOW2Euk1MDDwKgterATEQrSvnVhvG+EBHz5lUGJPptCSSZHK\nJhBbTnTMDqJstSS0QXYdDGwAe6d1zG0WA3sggKUb2eusYVREOKiKNjgY7SMi0EJim5DYZt5PfHvX\n5x3+/ylKhM1OcBsGQ6ttDKvzEes9OgvX4WeoIgrWpRu02wJk15t1TjjO9b0G+IPPgF+Bz/jyZ78B\nSa3ms9HksFDodJJTVUu828322EiWZkYR36IY2OxloKudeK8Pq5hR2wygInoQX1j7s8oRS1F0BIbK\nJC93EJeMz8I5ajCVpHGwVnHwIEdtkZFmrLBLLwXDEugygJrLZcYWs9ng2mu77iXzBXxYjS8XkB1p\ni9591wyJPm8eled9l02b4MABc5QzNtb8t6ICNm0ye0Xq6syga8OGda/jmcIZ4QAopWxAK/B9EVnU\nofwvmC/073ZxznKgQER+1qFsBvC0iHQZX1c7AF/Nmdp1W3OgiJgEJ2ERXQ/siQg1rhrW7tvGax8X\nMrb/CO7+zngcdktHI5qLtnHVjOn856NTWddSxI6aYiZlXcjNZ80gOyH7iOne+r28X7gYj9fP0ORc\nhiXnkhkzgPadZXiWLkf9czlysJbajDHsSxnBthgn9aoSo3UblpZCrM1VKG8M/vZE3M2J+FrDsPq9\n2PxejICb3bE2vkgPUJ5QQcDWSLJrAuc35nFRs4fI+mpcVS246+pw+KsYHL6LnEApaS2NWASaw+0c\nSk2lNT0LvyMZn9uCr92K2x2g3aihXVXhUtW4LM002i3UOxRNNgObRJBIJMm2CBJsNlqU0IiXBrxE\neAwGtTjIaBKSm93cUlvJ784agysxEo/hJ7akHGdZJWm19fgMg+2JcWxIiGFLbCRxRJClHGRZDKKN\nADV+D9WBVmpVCz6jDYt4sIgbxEeLw6Ah3EKTw4rd5yHrUCu5hyCnDlAKvyMWZU/Dbx9AVWI8+5Ot\nFCe2c0i1YGtqxtHiIrytDZFUUFkY5GK1x2CN2Y7Puh2Xt4g4l4f+jQ7SGgwSmgV/eDwqPp3IDRuP\nJgAACHBJREFU1IGQ0I+dRiRbAorN4sEaYZARayEjVuE0PEQW7iO+uITU0n2ogJuytCj29jMoSvWR\nEJtGTmQOOREDmfnqOyz8w98hw4zgtr/Kxcqdu9lYWkx1dSF5/TK4ZsJILhg1BKvNQbOvjeXb97Js\ny26SUt3kDHLgsDhwWI/+N9GIpH9hFWrFCli7FoYPxzVlKh9XjGTLVsXw4XDWWZCd3f1QVUWFufpn\n9OjeHc46U9uib5K+6gCcaByAJMACVHcqrwZyuznH2Y19jFLKISLuLs4JA9i5c+cJVi90aGxsZMOG\n7ld3/FtTs/srTTKI5/6J5wGwfdvmLm2UPYZx8ZMZFz8ZghE4G/c1smHf0bpNsF8AdqAVmkob2EqD\neWDiKHMLkgxMBCCG7h/3E2H4kZ/a2syVmzUKarxes6CL2U0WICK4fV3qAN+998LTTxMJHB6argFq\n3G6zb91qZSzmspyOCKYePQ087fa5OdR2iHVt9QyMG0ik/cuB8ITg1jlHS9ec1+2Rw43Z4Q/zQcHt\nmq6MzUyvtAV3E4Pb2Z3M3B98RKXlIFSaoV1twMVD4eKhWUDWEbstu4qO/JxuwLQxWUdXpgOCUEsL\ntVFRZjS5IxHlfAwctJGBwfktzc3m1/JX0RObU8kZ3RZ9Q5xujTq8O487SHeiPQBpQDnwLRFZ26H8\nCeBCEflWF+cUAn8SkSc6lF0BfABEdOUAKKWmAa/2uGIajUaj0Wg6c4OIvNbdwRPtAagF/EBqp/JU\noKqbc6q6sW/q5usf4GPgBmAfXfrQGo1Go9FouiEMGIj5Lu2WE3IARMSrlCoALsGcG3N4EuAlQHeZ\naFYDV3QquyxY3t3vOQR067VoNBqNRqM5Lqu+yuBkpo48BfxEKTVdKTUUeAFzSPIvAEqpx5RSHdf4\nvwBkKaWeUErlKqVuB64NXkej0Wg0Gk0vcMLJgETkTaVUEvAwZlf+JuByETmcANnJkSlXICL7lFJX\nAU8DdwEHgFtE5JOvW3mNRqPRaDQnR58MBazRaDQajebUooOhajQajUYTgmgHQKPRaDSaEKTPOQBK\nqTuUUiVKqTal1BqlVOfYHCGBUmqmUmqdUqpJKVWtlPq7UmpIF3YPK6UqlFKtSqmlSqmc3qhvX0Ap\n9QulVEAp9VSn8pDWSCmVrpR6WSlVG9RgczDaZkebkNRIKWUJTlwuCd77bqXUr7qwCxl9lFITlFKL\nlFLlwb+nKV3YHFcPpZRDKfVc8JlrVkq9rZRKOX13cWo5nkZKKWtw0vsWpVRL0GZhMI5Ox2v0ukZ9\nygEIJhp6EpgFnIWZafDj4KTDUGMC8L/AuZgJlGzAP5RSR9JmKKV+DtyJmZjpHMCFqZf99Fe3dwk6\nirdiPjMdy0NaI6VUHLAScAOXA8OA+4D6DjahrNEDwC3AbcBQ4H7gfqXUnYcNQlCfSMzJ3bdjBn08\nih7qMRe4Cvg+cCGQDrxzaqt9WjmeRhGYgS1nY77HvosZOvS9Tna9r5GI9JkNWAPM67CvMFcN3N/b\ndevtDTMMcwAY36GsAri3w34MZnTT63q7vqdZmyigEJgEfA48pTU6cr+PA8u/wiZkNQLeB/7Qqext\n4CWtjxBsc6acyPMS3HcD3+1gkxu81jm9fU+nQ6MubMZhBtHL6Esa9ZkegGCioXzg08NlYqryCXBM\niOEQJA7T06wDUEoNwlxy2VGvJmAtoafXc8D7IvJZx0KtEQBXA+uVUm8Gh5I2KKV+fPig1ogPgUuU\nUoMBlFKjgQuAJcH9UNfnKHqoxzjMJeYdbQqB/YSgZkEOt9/BRCPk0wc0OuE4AKeQk0k0FBIEoy3O\nBVaIyI5gsRPzgepKL+dprF6vopT6IWZ327guDmuNzIw1t2EOrf0Gs8v2GaWUW0ReJsQ1EpHnlVL9\ngUKllA9zWPQBEXkjaBLS+nRBT/RIBTxBx6A7m5BBKeXA7Il7TURagsVO+oBGfckB0HTP85ip4y7o\n7Yr0JZRSGZiO0WQR8fZ2ffooBrBORH4d3N+slMoD/gt4ufeq1TdQSt0F3ARcD+zAdCbnKaUqgg6S\nRnPSKKWswFuYTtPtvVydY+gzQwCcXKKhMx6l1LPAlcDFIlLZ4VAV5hyJUNYrHzMj7QallFcp5QUu\nAu5WSnkwvelQ16gS6JxXeycwIPhzqD9HvwQeEZG3RGS7iLyKGbV0ZvB4qOvTmZ7oUQXYlVKd81mH\nlGYdXv79gcs6fP1DH9GozzgAwS+4w4mGgKMSDX1lUoMzkeDL/xpgoojs73hMREowH5SOesVgrhoI\nFb0+AUZifrWNDm7rgVeA0SKyF63RSo4dQssFSkE/R5htoL9TWSBYrvXpRA/1KAB8nWxyMZ3ObpPA\nnUl0ePlnAZeISH0nk76hUW/PoOw0U/I6oBWYjrkkZz5wCEju7br1ghbPYy7VmoDpFR7ewjrY3B/U\n52rMF+G7QDFg7+3696JunVcBhLRGmHMj3JhftNnANKAZ+KHWSABexJx4dSWQiblkqwb4bajqg7nE\nbTSmYx0A7gnu9++pHsH2qwS4GLOnbiXwr96+t9OhEebQ+nuYTvbITu23rS9p1OtCdiHs7cA+zGUl\nq4FxvV2nXtIhgPll0nmb3snuIcxlOa2YuZ9zervuvazbZx0dAK2REHy5bQne/3bgR13YhKRGmGu2\nfwfsxVzPXoy5ftsaqvpgDqN11f78qad6AA7MOCa1mA7nW0BKb9/b6dAI05HsfOzw/oV9SSOdDEij\n0Wg0mhCkz8wB0Gg0Go1Gc/rQDoBGo9FoNCGIdgA0Go1GowlBtAOg0Wg0Gk0Ioh0AjUaj0WhCEO0A\naDQajUYTgmgHQKPRaDSaEEQ7ABqNRqPRhCDaAdBoNBqNJgTRDoBGo9FoNCGIdgA0Go1GowlB/g8v\n38bQFzhh2gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10f7ebfd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pylab import *\n",
    "%matplotlib inline\n",
    "\n",
    "plot(fxbin[0])\n",
    "plot(fxbin[1])\n",
    "plot(fxbin[2])\n",
    "xlim([0,128])\n",
    "ylim([0,1e-7])\n",
    "show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def Smoothen(fxbin):\n",
    "    (ndim,nbins) = shape(fxbin)\n",
    "    imp = zeros(shape(fxbin))\n",
    "    for idim in range(ndim):\n",
    "        fxb = fxbin[idim,:]\n",
    "        #**** smooth the f^2 value stored for each bin ****\n",
    "        prev = fxb[0]\n",
    "        cur = fxb[1]\n",
    "        fxb[0] = 0.5*(prev + cur) # the first and the last point are different, as they can only be averag\n",
    "        norm = fxb[0]\n",
    "        for ibin in range(1,nbins-1):\n",
    "            s = prev + cur     # s=f[i-1]+f[i]\n",
    "            prev = cur\n",
    "            cur = fxb[ibin+1]         # cur=f[i+1]\n",
    "            fxb[ibin] = (s + cur)/3.  # (f[i+1]+f[i]+f[i-1])/3.\n",
    "            norm += fxb[ibin]         # \n",
    "        fxb[nbins-1] = 0.5*(prev+cur)\n",
    "        norm += fxb[nbins-1]\n",
    "        if( norm == 0 ):\n",
    "            print 'ERROR can not refine the grid with zero grid function'\n",
    "            return # can not refine the grid if the function is zero.\n",
    "        fxb *= 1.0/norm         # we normalize the function.\n",
    "        # Note that normalization is such that the sum is 1.\n",
    "        #**** compute the importance function for each bin  ****\n",
    "        #imp = zeros(nbins)\n",
    "        avgperbin = 0.0\n",
    "        for ibin in range(nbins):\n",
    "            impfun = 0.0\n",
    "            if  fxb[ibin]> 0 : \n",
    "                r = fxb[ibin]   # this is the normalized function in this bin\n",
    "                impfun = ((r - 1)/log(r))**(1.5) # this just damps the <fx> a bit. Instead of taking impfun = r,\n",
    "                                    # we use g(r), where g(r)=((r-1)/log(r))^1.5 so that changes are not too rapid\n",
    "            imp[idim,ibin] = impfun\n",
    "    return imp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\noQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1066bdad0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pylab import *\n",
    "%matplotlib inline\n",
    "\n",
    "imp = Smoothen(fxbin)\n",
    "\n",
    "plot(imp[0])\n",
    "plot(imp[1])\n",
    "plot(imp[2])\n",
    "xlim([0,128])\n",
    "show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Update the class Grid, so that it can refine the grid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vegas parameters:\n",
      "       ndim = 3\n",
      "       unit = 3.14159265359\n",
      "       maxeval = 200000\n",
      "       nstart = 10000\n",
      "       nincrease = 5000\n",
      "       nbins = 128\n",
      "       nbaths = 1000\n",
      "\n",
      "1.33092497244 +- 0.0244952318512 exact= 1.3932\n"
     ]
    },
    {
     "data": {
      "image/png": "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\noJRSSnmg/wILxLepeb2MTQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10e7d06d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy import *\n",
    "unit=pi\n",
    "ndim=3\n",
    "maxeval=200000\n",
    "exact = 1.3932  # exact value of the integral\n",
    "    \n",
    "cum = Cumulants()\n",
    "    \n",
    "nbins=128\n",
    "nstart =10000\n",
    "nincrease=5000\n",
    "\n",
    "grid = Grid(ndim,nbins)\n",
    "\n",
    "fxbin = Vegas_step2(my_integrant2, pi, maxeval, nstart, nincrease, grid, cum)\n",
    "imp = Smoothen(fxbin)\n",
    "grid.RefineGrid(imp, SharpEdges=True)\n",
    "print cum.avg, '+-', cum.err, 'exact=', exact\n",
    "\n",
    "plot(grid.g[0,:nbins])\n",
    "plot(grid.g[1,:nbins])\n",
    "plot(grid.g[2,:nbins])\n",
    "xlim([0,128])\n",
    "show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def Vegas_step3(integrant, unit, maxeval, nstart, nincrease, grid, cum):\n",
    "    ndim, nbins = grid.ndim,grid.nbins  # dimension of the integral, size of the grid for binning in each direction\n",
    "    unit_dim = unit**ndim   # converts from unit cube integration to generalized cube with unit length\n",
    "    nbatch=1000             # function will be evaluated in bacthes of 1000 evaluations at one time (for efficiency and storage issues)\n",
    "    neval=0\n",
    "    print \"\"\"Vegas parameters:\n",
    "       ndim = \"\"\"+str(ndim)+\"\"\"\n",
    "       unit = \"\"\"+str(unit)+\"\"\"\n",
    "       maxeval = \"\"\"+str(maxeval)+\"\"\"\n",
    "       nstart = \"\"\"+str(nstart)+\"\"\"\n",
    "       nincrease = \"\"\"+str(nincrease)+\"\"\"\n",
    "       nbins = \"\"\"+str(nbins)+\"\"\"\n",
    "       nbaths = \"\"\"+str(nbatch)+\"\\n\"\n",
    "\n",
    "    bins = zeros((nbatch,ndim),dtype=int) # in which sampled bin does this point fall?\n",
    "    wgh = zeros(nbatch)                   # weights for each random point in the batch\n",
    "    \n",
    "    all_nsamples = nstart\n",
    "    for iter in range(1000):\n",
    "        fxbin = zeros((ndim,nbins))    # after each iteration we reset the average function being binned\n",
    "        for nsamples in range(all_nsamples,0,-nbatch):  # loop over all_nsample evaluations in batches of nbatch\n",
    "            n = min(nbatch,nsamples)  # How many evaluations in this pass?\n",
    "            # We are integrating f(g_1(x),g_2(y),g_3(z))*dg_1/dx*dg_2/dy*dg_3/dz dx*dy*dz\n",
    "            # This is represented as  1/all_nsamples \\sum_{x_i,y_i,z_i} f(g_1(x_i),g_2(y_i),g_3(z_i))*dg_1/dx*dg_2/dy*dg_3/dz\n",
    "            #  where dg_1/dx = diff*NBINS\n",
    "            xr = random.random((n,ndim)) # generates 2-d array of random numbers in the interval [0,1)\n",
    "            for i in range(n):\n",
    "                weight = 1.0/all_nsamples\n",
    "                for dim in range(ndim):\n",
    "                    # We want to evaluate the function f at point g(x), i.e, f(g_1(x),g_2(y),...)\n",
    "                    # Here we transform the points x,y,z -> g_1(x), g_2(y), g_3(z)\n",
    "                    # We hence want to evaluate g(x) ~ g(x[i]), where x is the random number and g is the grid function\n",
    "                    # The discretized g(t) is defined on the grid :\n",
    "                    #       t[-1]=0, t[0]=1/N, t[1]=2/N, t[2]=3/N ... t[N-1]=1.\n",
    "                    # We know that g(0)=0 and g(1)=1, so that g[-1]=0.0 and g[N-1]=1.0\n",
    "                    # To interpolate g at x, we first compute  i=int(x*N) and then we use linear interpolation\n",
    "                    # g(x) = g[i-1] + (g[i]-g[i-1])*(x*N-i)  ;  if i>0\n",
    "                    # g(x) =   0    + (g[0]-0)*(x*N-0)       ;  if i=0\n",
    "                    #\n",
    "                    pos = xr[i,dim]*nbins               # which grid would it fit ? (x*N)\n",
    "                    ipos = int(pos)                     # the grid position is ipos : int(x*N)==i\n",
    "                    diff = grid.g[dim,ipos] - grid.g[dim,ipos-1]  # g[i]-g[-1]\n",
    "                    # linear interpolation for g(x) : \n",
    "                    xr[i,dim] = (grid.g[dim,ipos-1] + (pos-ipos)*diff)*unit # g(xr) ~ ( g[i-1]+(g[i]-g[i-1])*(x*N-i) )*[units]\n",
    "                    bins[i,dim]=ipos                    # remember in which bin this random number falls.\n",
    "                    weight *= diff*nbins                #  weight for this dimension is dg/dx = (g[i]-g[i-1])*N\n",
    "                                                        # because dx = i/N - (i-1)/N = 1/N\n",
    "                wgh[i] = weight # total weight is  (df/dx)*(df/dy)*(df/dx).../N_{samples}\n",
    "            \n",
    "            # Here we evaluate function f on all randomly generated x points above\n",
    "            fx = integrant(xr)  # n function evaluations required in single call\n",
    "            neval += n  # We just added so many fuction evaluations\n",
    "\n",
    "            # Now we compute the integral as weighted average, namely, f(g(x))*dg/dx\n",
    "            wfun = wgh * fx           # weight * function ~ f_i*w_i            \n",
    "            cum.sum += sum(wfun)      # sum_i f_i*w_i = <fw>\n",
    "            wfun *= wfun              # carefull : this is like  (f_i * w_i/N)^2 hence  1/N (1/N (f_i*w_i)^2)\n",
    "            cum.sqsum += sum(wfun)    # sum_i (f_i*w_i)^2 = <fw^2>/all_nsamples\n",
    "                                      # \n",
    "            for dim in range(ndim):   #new2\n",
    "                # Here we make a better approximation for the function, which we are integrating.\n",
    "                for i in range(n):    #new2\n",
    "                    fxbin[dim, bins[i,dim] ] += wfun[i] #new2: just bin the function f. We saved the bin position before.\n",
    "\n",
    "        w0 = sqrt(cum.sqsum*all_nsamples)  # w0 = sqrt(<fw^2>)\n",
    "        w1 = (w0 + cum.sum)*(w0 - cum.sum) # w1 = (w0^2 - <fw>^2) = (<fw^2>-<fw>^2)\n",
    "        w = (all_nsamples-1)/w1            # w ~ 1/sigma_i^2 = (N-1)/(<fw^2>-<fw>^2)\n",
    "        # Note that variance of the MC sampling is Var(monte-f) = (<f^2>-<f>^2)/N == 1/sigma_i^2\n",
    "        cum.weightsum += w          # weightsum ~ \\sum_i 1/sigma_i^2\n",
    "        cum.avgsum += w*cum.sum     # avgsum    ~ \\sum_i <fw>_i / sigma_i^2\n",
    "        cum.avg2sum += w*cum.sum**2  # avg2cum   ~ \\sum_i <fw>_i^2/sigma_i^2\n",
    "        \n",
    "        cum.avg = cum.avgsum/cum.weightsum     # I_best = (\\sum_i <fw>_i/sigma_i^2 )/(\\sum_i 1/sigma_i^2)\n",
    "        cum.err = sqrt(1/cum.weightsum)        # err ~ sqrt(best sigma^2) = sqrt(1/(\\sum_i 1/sigma_i^2))\n",
    "     \n",
    "        # new in this step\n",
    "        if iter>0:\n",
    "            cum.chisq = (cum.avg2sum - 2*cum.avgsum*cum.avg + cum.weightsum*cum.avg**2)/iter\n",
    "    \n",
    "        print \"Iteration {:3d}: I= {:10.8f} +- {:10.8f}  chisq= {:10.8f} number of evaluations = {:7d} \".format(iter+1, cum.avg*unit_dim, cum.err*unit_dim, cum.chisq, neval)\n",
    "        imp = Smoothen(fxbin)\n",
    "        grid.RefineGrid(imp, SharpEdges=True)\n",
    "        \n",
    "        cum.sum=0                    # clear the partial sum for the next step\n",
    "        cum.sqsum=0\n",
    "        all_nsamples += nincrease    # for the next time, increase the number of steps a bit\n",
    "        if (neval>=maxeval): break\n",
    "        \n",
    "    cum.avg *= unit**ndim\n",
    "    cum.err *= unit**ndim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vegas parameters:\n",
      "       ndim = 3\n",
      "       unit = 3.14159265359\n",
      "       maxeval = 2000000\n",
      "       nstart = 100000\n",
      "       nincrease = 5000\n",
      "       nbins = 128\n",
      "       nbaths = 1000\n",
      "\n",
      "Iteration   1: I= 1.36762346 +- 0.01023309  chisq= 0.00000000 number of evaluations =  100000 \n",
      "Iteration   2: I= 1.38308994 +- 0.00488295  chisq= 2.95787653 number of evaluations =  205000 \n",
      "Iteration   3: I= 1.38903765 +- 0.00341085  chisq= 2.92764168 number of evaluations =  315000 \n",
      "Iteration   4: I= 1.39085420 +- 0.00271957  chisq= 2.21131183 number of evaluations =  430000 \n",
      "Iteration   5: I= 1.39235286 +- 0.00238578  chisq= 1.98798517 number of evaluations =  550000 \n",
      "Iteration   6: I= 1.39215278 +- 0.00209328  chisq= 1.59649946 number of evaluations =  675000 \n",
      "Iteration   7: I= 1.39187814 +- 0.00186075  chisq= 1.34408861 number of evaluations =  805000 \n",
      "Iteration   8: I= 1.39040546 +- 0.00167503  chisq= 1.62389166 number of evaluations =  940000 \n",
      "Iteration   9: I= 1.39098400 +- 0.00155755  chisq= 1.53107506 number of evaluations = 1080000 \n",
      "Iteration  10: I= 1.39152488 +- 0.00144974  chisq= 1.46121875 number of evaluations = 1225000 \n",
      "Iteration  11: I= 1.39101550 +- 0.00135470  chisq= 1.41244571 number of evaluations = 1375000 \n",
      "Iteration  12: I= 1.39111487 +- 0.00127230  chisq= 1.28818899 number of evaluations = 1530000 \n",
      "Iteration  13: I= 1.39172957 +- 0.00120599  chisq= 1.37245777 number of evaluations = 1690000 \n",
      "Iteration  14: I= 1.39195626 +- 0.00114625  chisq= 1.29501238 number of evaluations = 1855000 \n",
      "Iteration  15: I= 1.39272504 +- 0.00110407  chisq= 1.64730521 number of evaluations = 2025000 \n",
      "1.39272503683 +- 0.00110407312053 exact= 1.3932 real error= 0.000340915280729\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x112f3fd50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy import *\n",
    "unit=pi\n",
    "ndim=3\n",
    "maxeval=2000000\n",
    "exact = 1.3932  # exact value of the integral\n",
    "    \n",
    "cum = Cumulants()\n",
    "    \n",
    "nbins=128\n",
    "nstart =100000\n",
    "nincrease=5000\n",
    "\n",
    "grid = Grid(ndim,nbins)\n",
    "\n",
    "random.seed(0)\n",
    "\n",
    "Vegas_step3(my_integrant2, pi, maxeval, nstart, nincrease, grid, cum)\n",
    "\n",
    "print cum.avg, '+-', cum.err, 'exact=', exact, 'real error=', abs(cum.avg-exact)/exact\n",
    "\n",
    "plot(grid.g[0,:nbins])\n",
    "plot(grid.g[1,:nbins])\n",
    "plot(grid.g[2,:nbins])\n",
    "show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
