{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Short description of the problem"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We consider a vacuum vessel embodied as a toroidal volume defined by a 2D arbitrary polygon representing in cross-section in (R,Z) coordinates.\n",
    "We want to efficiently mesh both the volume and the 3D surface of the vessel.\n",
    "\n",
    "As input, we provide the cross-section polygon and a list dV defining the three resolutions dV = [dR,dZ,dRphi], where each resolution is a distance in meters in the corresponding direction (note the use of dRphi instead of dphi for that purpose).\n",
    "Indeed, we do not want a simple cylindrical mesh, as we want to capture details in the toroidal (Rphi) direction with a similar accuracy for every value of R.\n",
    "\n",
    "In most uses, we will only need a fraction of the total mesh. Hence, the routine should not compute the total mesh but only the fraction we need.\n",
    "For a given resolution dV (i.e. a given tuple of dR,dZ,dRphi), there should be only one possible mesh.\n",
    "This way, the fraction of interest can be defined either by its physical limits (DR,DZ,DPhi) or by the indices of the mesh elements which are required. \n",
    "\n",
    "Hence, we need a methods to \n",
    "* Compute the mesh fraction from its limits and return it with its indices\n",
    "* Compute the mesh fraction from its indices and return it with its limits\n",
    "\n",
    "Not returning the whole mesh makes sense since it may well be a huge array (memory-expensive). The computation should be as fast as possible.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Numerical strategy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Volume"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For a given input cross-section polygon VPoly, provided with the required resolutions dR, dZ and dRphi, the total mesh is a torus of rectangular cross-section (R goes from a minimum to a maximum, as Z, and phi goes from -pi to pi). This simplifies the computation of the indices without making the result heavier since only the relevant mesh elements are returned.\n",
    "The limits of the desired submesh can be provided as DR, DZ and DPhi (note that the toroidal limit is angular as opposed to the toroidal resolution).\n",
    "\n",
    "The minimum and maximim boundaries of R and Z are also provided. They could be deduced from VPOly but they are explicitly provided for two reasons:\n",
    "* In ToFu these limits are stored in the Ves object, so it is already available and there is no need to compute it again\n",
    "* It may happen that a VPoly is slightly modified with no desire to modify the mesh, so it should remain possible to force the boundaries.\n",
    "\n",
    "The indices are return in numeric form (not boolean), and computed as follows:\n",
    "* The numbering occurs anti-clockwise from -pi to pi for phi\n",
    "* Then, it occurs along Z, from its minimum to its maximum value\n",
    "* Finally it is incremented along R, from its minimum to its maximum value\n",
    "\n",
    "Hence, we first describe the innermost column (starting from the lowest horizontal ring), and we gradually moved towards the outermost column.\n",
    "\n",
    "This is necessary since due the desired quasi-constant toroidal accuracy, the number of mesh elements in the toroidal direction is a function of R. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Surface"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The strategy for meshing the surface is similar, expect that here there are only two resolutions, dL and dRPhi, where dL is the resolution in the poloidal direction along the segments of VPoly."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Volume meshing "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Naive python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The slowest run took 44.64 times longer than the fastest. This could mean that an intermediate result is being cached.\n",
      "10000000 loops, best of 3: 90.8 ns per loop\n",
      "The slowest run took 36.53 times longer than the fastest. This could mean that an intermediate result is being cached.\n",
      "10000000 loops, best of 3: 111 ns per loop\n"
     ]
    }
   ],
   "source": [
    "A = np.random.random((100,))\n",
    "%timeit len(A)\n",
    "%timeit A.size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "10%2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "# Preliminary function to get optimal resolution from input resolution\n",
    "def _Ves_mesh_dlfromL_numpy(LMinMax, dL, DL=None, margin=1.e-9):\n",
    "    \"\"\" Get the actual reolution from the desired resolution and MinMax and limits \"\"\"\n",
    "    # Get the number of mesh elements in LMinMax\n",
    "    N = np.ceil(np.diff(LMinMax)/dL)[0]\n",
    "    # Derive the real (effective) resolution\n",
    "    dLr = (np.diff(LMinMax)/N)[0]\n",
    "    # Get desired limits if any\n",
    "    DL = LMinMax if DL is None else DL\n",
    "    # Get the extreme indices of the mesh elements that really need to be created within those limits\n",
    "    abs0 = np.abs(DL[0]-LMinMax[0])\n",
    "    if abs0-dLr*np.floor(abs0/dLr)<margin*dLr:\n",
    "        nL0 = np.round((DL[0]-LMinMax[0])/dLr)\n",
    "    else:\n",
    "        nL0 = np.floor((DL[0]-LMinMax[0])/dLr)\n",
    "    abs1 = np.abs(DL[1]-LMinMax[0])\n",
    "    if abs1-dLr*np.floor(abs1/dLr)<margin*dLr:\n",
    "        nL1 = np.round((DL[1]-LMinMax[0])/dLr)-1\n",
    "    else:\n",
    "        nL1 = np.floor((DL[1]-LMinMax[0])/dLr)\n",
    "    # Get the corresponding indices\n",
    "    indL = np.arange(nL0,nL1+1,1).astype(int)\n",
    "    # Get the centers of the mesh elements\n",
    "    L = LMinMax[0] + (0.5 + indL)*dLr\n",
    "    return L, dLr, indL, N\n",
    "\n",
    "\n",
    "def _Ves_Vmesh_Phi_numpy(DPhi, dPhir, NRPhi, margin=1.e-9):\n",
    "    \"\"\" Get the min and max indices of the relevant Phi for each R (to be finished) \"\"\"\n",
    "    nPhi0 = np.nan*np.ones((dPhir.size,))\n",
    "    nPhi1 = np.nan*np.ones((dPhir.size,))\n",
    "    abs0 = np.abs(DPhi[0]+np.pi)\n",
    "    ind0 = abs0-dPhir*np.floor(abs0/dPhir)<margin*dPhir\n",
    "    nPhi0[ind0] = np.round((DPhi[0]+np.pi)/dPhir[ind0])\n",
    "    nPhi0[~ind0] = np.floor((DPhi[0]+np.pi)/dPhir[~ind0])\n",
    "    abs1 = np.abs(DPhi[1]+np.pi)\n",
    "    ind1 = abs1-dPhir*np.floor(abs1/dPhir)<margin*dPhir\n",
    "    nPhi1[ind1] = np.round((DPhi[1]+np.pi)/dPhir[ind1])-1\n",
    "    nPhi1[~ind1] = np.floor((DPhi[1]+np.pi)/dPhir[~ind1])\n",
    "    assert np.all(nPhi0>=0) and np.all(nPhi0<=NRPhi)\n",
    "    assert np.all(nPhi1>=0) and np.all(nPhi1<=NRPhi)\n",
    "    return nPhi0, nPhi1\n",
    "\n",
    "\n",
    "def _Ves_Vmesh_Tor_SubFromD_numpy(dR, dZ, dRPhi, RMinMax, ZMinMax, DR=None, DZ=None, DPhi=None, VPoly=None, Out='(X,Y,Z)', margin=1.e-9):\n",
    "    \"\"\" Return the desired submesh indicated by the limits (DR,DZ,DPhi), for the desired resolution (dR,dZ,dRphi) \"\"\"\n",
    "    # Get the actual R and Z resolutions and mesh elements\n",
    "    R0, dRr0, indR0, NR0 = _Ves_mesh_dlfromL_numpy(RMinMax, dR, None, margin=margin)\n",
    "    R, dRr, indR, NR = _Ves_mesh_dlfromL_numpy(RMinMax, dR, DR, margin=margin)\n",
    "    Z, dZr, indZ, NZ = _Ves_mesh_dlfromL_numpy(ZMinMax, dZ, DZ, margin=margin)\n",
    "    Rn, Zn = len(R), len(Z)\n",
    "\n",
    "    # Get the actual RPhi resolution and Phi mesh elements (! depends on R !)\n",
    "    NRPhi0 = np.ceil(2.*np.pi*R0/dRPhi)\n",
    "    NRPhi = np.ceil(2.*np.pi*R/dRPhi)\n",
    "    dPhir = 2.*np.pi/NRPhi\n",
    "    # Get the limits if any (and make sure to replace them in the proper quadrants)\n",
    "    DPhi = [-np.pi,np.pi] if DPhi is None else np.arctan2(np.sin(DPhi),np.cos(DPhi))\n",
    "    # Later we'll have to remember that the lower limit may be greater than the upper limit due to 2pi modulo\n",
    "    # Get the two extreme indices of the Phi elements inside the limits for each R\n",
    "    nPhi0, nPhi1 = _Ves_Vmesh_Phi_numpy(DPhi, dPhir, NRPhi, margin=margin)\n",
    "\n",
    "    # Compute the centers and indices, using a for loop (no choice) on R\n",
    "    NRZPhi_cum0 = np.concatenate(([0],NZ*np.cumsum(NRPhi0[:-1])))\n",
    "    PtsRZP, dV, ind = [], [], []\n",
    "    for ii in range(0,Rn):\n",
    "        # Get the phi values\n",
    "        if DPhi[0]<DPhi[1]:\n",
    "            indPhi = np.arange(nPhi0[ii],nPhi1[ii]+1)\n",
    "        else:\n",
    "            indPhi = np.concatenate((np.arange(nPhi0[ii],NRPhi[ii]),np.arange(0,nPhi1[ii]+1)))\n",
    "        Phin = len(indPhi)\n",
    "        phi = -np.pi + (0.5 + indPhi)*dPhir[ii]\n",
    "        # Get the (R,Z,phi) points\n",
    "        PtsRZP.append( np.array([R[ii]*np.ones((Phin*Zn,)), np.repeat(Z,Phin), np.tile(phi,Zn)]) )\n",
    "        # Get the volume\n",
    "        dV.append( dRr*dZr*dPhir[ii]*R[ii]*np.ones((Phin*Zn,))  )\n",
    "        # Get the indices\n",
    "        indii = R0==R[ii]\n",
    "        ind.append( NRZPhi_cum0[indii] + (indZ[:,np.newaxis]*NRPhi[ii] + indPhi[np.newaxis,:]).flatten() )\n",
    "        \n",
    "    PtsRZP = np.concatenate(tuple(PtsRZP),axis=1)\n",
    "    dV = np.concatenate(tuple(dV))\n",
    "    ind = np.concatenate(tuple(ind))\n",
    "    \n",
    "    # To be commented out once debugged\n",
    "    assert ind.size==PtsRZP.shape[1]\n",
    "    assert ind.size==dV.size\n",
    "    assert np.unique(ind).size==ind.size \n",
    "\n",
    "    dRPhir = (dPhir*R)\n",
    "    if not VPoly is None:\n",
    "        indin = _Ves_isInside(VPoly, 'Tor', None, PtsRZP[:-1,:], In='(R,Z)')\n",
    "        PtsRZP, dV, ind = PtsRZP[:,indin], dV[indin], ind[indin]\n",
    "        Ru = np.unique(PtsRZP[0,:])\n",
    "        if not Ru==R:\n",
    "            indii = np.array([R[ii] in Ru for ii in range(0,len(R))], dtype=bool)\n",
    "            dRPhir = dRPhir[indii]\n",
    "\n",
    "    if Out.lower()=='(x,y,z)':\n",
    "        Pts = np.array([PtsRZP[0,:]*np.cos(PtsRZP[2,:]), PtsRZP[0,:]*np.sin(PtsRZP[2,:]), PtsRZP[1,:]])\n",
    "    else:\n",
    "        Pts = PtsRZP\n",
    "        \n",
    "    return Pts, dV, ind, dRr, dZr, dRPhir\n",
    "\n",
    "def _Ves_Vmesh_Tor_SubFromInd_numpy(dR, dZ, dRPhi, RMinMax, ZMinMax, ind, Out='(X,Y,Z)', margin=1.e-9):\n",
    "    \"\"\" Return the desired submesh indicated by the (numerical) indices, for the desired resolution (dR,dZ,dRphi) \"\"\"\n",
    "    # Get the actual R and Z resolutions and mesh elements\n",
    "    R, dRr, indR, NR = _Ves_mesh_dlfromL_numpy(RMinMax, dR, None, margin=margin)\n",
    "    Z, dZr, indZ, NZ = _Ves_mesh_dlfromL_numpy(ZMinMax, dZ, None, margin=margin)\n",
    "    Rn, Zn = len(R), len(Z)\n",
    "\n",
    "    # Get the actual RPhi resolution and Phi mesh elements (! depends on R !)\n",
    "    NRPhi = np.ceil(2.*np.pi*R/dRPhi)\n",
    "    dPhir = 2.*np.pi/NRPhi\n",
    "    NRZPhi_cum = np.concatenate(([0],NZ*np.cumsum(NRPhi[:-1])))\n",
    "    \n",
    "    # Get R, Z, and Phi indices\n",
    "    Nind = ind.size\n",
    "    indR = ind[:,np.newaxis]-NRZPhi_cum[np.newaxis,:]<0\n",
    "    indRtemp = np.tile(np.arange(0,NR),(Nind,1))\n",
    "    indRtemp[indR] = np.nan\n",
    "    indR = np.nanmax(indRtemp, axis=1).astype(int)\n",
    "    indZ = ((ind - NRZPhi_cum[indR]) // NRPhi[indR]).astype(int)\n",
    "    indPhi = ind - NRZPhi_cum[indR] - indZ*NRPhi[indR]\n",
    "    \n",
    "    # Derive R, Z and phi values\n",
    "    PtsRZP = np.array([R[indR], Z[indZ], np.nan*np.ones((Nind,))])\n",
    "    dV = np.nan*np.ones((Nind,))\n",
    "    Ru = np.unique(PtsRZP[0,:])\n",
    "    dRPhir = np.nan*np.ones((len(Ru),))\n",
    "    for ii in range(0,len(Ru)):\n",
    "        indRii = R==Ru[ii]\n",
    "        indRu = PtsRZP[0,:]==Ru[ii]\n",
    "        PtsRZP[2,indRu] = -np.pi + (0.5+indPhi[indRu])*dPhir[R==Ru[ii]]\n",
    "        dRPhir[ii] = dPhir[indRii]*Ru[ii]\n",
    "        dV[indRu] = dRr*dZr*dRPhir[ii]\n",
    "        \n",
    "    if Out.lower()=='(x,y,z)':\n",
    "        Pts = np.array([PtsRZP[0,:]*np.cos(PtsRZP[2,:]), PtsRZP[0,:]*np.sin(PtsRZP[2,:]), PtsRZP[1,:]])\n",
    "    else:\n",
    "        Pts = PtsRZP\n",
    "\n",
    "    return Pts, dV, dRr, dZr, dRPhir\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Check and debug"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Check 0 [True, True, True, True, True]\n",
      "Check 1 [True, True, True, True, True]\n"
     ]
    }
   ],
   "source": [
    "# Check and debug\n",
    "[dR, dZ, dRPhi], RMinMax, ZMinMax = [0.03]*3, [2.,3.], [-1.,1.]\n",
    "DR, DZ, DPhi = [2.15,2.6], [-0.21,0.51], [7.*np.pi/4.,5.*np.pi/4.]\n",
    "\n",
    "Pts0, dV0, ind0, dRr0, dZr0, dRPhir0 = _Ves_Vmesh_Tor_SubFromD_numpy(dR,dZ,dRPhi, RMinMax,ZMinMax, Out='(X,Y,Z)')\n",
    "PtsRZP0 = np.array([np.hypot(Pts0[0,:],Pts0[1,:]), Pts0[2,:],np.arctan2(Pts0[1,:],Pts0[0,:])])\n",
    "Pts0b, dV0b, dRr0b, dZr0b, dRPhir0b = _Ves_Vmesh_Tor_SubFromInd_numpy(dR, dZ, dRPhi, RMinMax, ZMinMax, ind0, Out='(X,Y,Z)')\n",
    "print \"Check 0\", [np.allclose(Pts0,Pts0b,atol=1.e-14,rtol=0.,equal_nan=True) for (A,B) in [(Pts0,Pts0b),(dV0,dV0b),(dRr0,dRr0b),(dZr0,dZr0b),(dRPhir0,dRPhir0b)]]\n",
    "\n",
    "Pts, dV, ind, dRr, dZr, dRPhir = _Ves_Vmesh_Tor_SubFromD_numpy(dR,dZ,dRPhi, RMinMax,ZMinMax, DR=DR,DZ=DZ,DPhi=DPhi, Out='(X,Y,Z)')\n",
    "PtsRZP = np.array([np.hypot(Pts[0,:],Pts[1,:]), Pts[2,:],np.arctan2(Pts[1,:],Pts[0,:])])\n",
    "Ptsb, dVb, dRrb, dZrb, dRPhirb = _Ves_Vmesh_Tor_SubFromInd_numpy(dR,dZ,dRPhi, RMinMax,ZMinMax, ind, Out='(X,Y,Z)')\n",
    "print \"Check 1\", [np.allclose(A,B,atol=1.e-14,rtol=0.,equal_nan=True) for (A,B) in [(Pts,Ptsb),(dV,dVb),(dRr,dRrb),(dZr,dZrb),(dRPhir,dRPhirb)]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nMIXjZyXtzZYElpHwwtTavEmesrKxRbImhvoa8AvgBdNseVWZoZUkSWNlPlPsQhxT1stEUKQeZ3U7\nbm/LuqHcEThg0BciqYYmuItHcTGbBqxZuk0M1V4WTQz1MOB3xMnpmsgMrUbGOrT1Zx1aSXX0OeB6\n4PV0L82Tl73t5ZgLgHOAl5Rsnz0vpKZ7BJdxwf2PioLUvM+dXsbc/lVrnxXEiaGG2VMkhJn/DDOg\n1chYh1aSNApnA5cA/0T3yZ3KzCLa7ZjzgXcCrxnuZUmqgHITQz2cO4gB5lz6nxiqqGZtOgjeu7X+\nOuA5DZwYyi7HkvpmHVpJdXQNsA+blt0pU9eRHo5p73MJ8GDgVieEkgTAUfwrcabjMhNDdW6D4pq1\nnUHwvq1t19HMSTwNaMdQVWptWoe2/tdqHdrRnrfMdkmdEn5DvMHLGivbLSObdfPYbd9LgEMoNyGU\n3Y2lcbAPz2aSXVqPeg1S28cUjZtN77MVsVTQW2lmmUUDWlVC02qzVu28w2yTdWgl1cn5zGUNMUML\n5bOs/e77R2K3wvYYNkkC2I+LuJyNv/wqG6RC96EQnUHwLkCCGVppaJpWm7Vq5x1mm6xDK6lOJlhN\nIAa0vWRZ+933VuJN5P7DuRxJFVSup8VJHM/GwWqZILW9LDvDcXufbxHH8TcxAWFAO4aSZMO/Xrf3\nu63b9m2ThFlJcn/N07LbRnVs3c47zDZNHHlk7vZhvV6q+Bqu4rVKdTTs7vMHAWuAwymXbZ1u9nYO\ncCfgvP6SNjaf36Ye9VqOp31M2SD4auA04E/EmY6bxIBWkiSNja1b/3agfLZ1utnbBwA7DfGaJNXR\nfO4Gfs+mQWp7WWaG9TLB71pg99Z+K4m1uJvEsj0aGevQ1p91aCXVzceB3wHv6VifLpeRLpuRpcw+\nbWcAU8ALnOFY0kbiSP7rgD3YOEPb1utnUdGkdu1PoFU0bwiEAa1Gxjq0kqSZ9k3gt8QatO2xZO2b\nyHTdxqxlP/t+FbgdeE+JGY4ljZP5QJw07gmptZ01ZDvrzHauS28r+rJtt9ZyJcOf9ySEmR0KZZfj\nMVTF0iRNKmVTxfMOq02LFy/mvQXbq1jKpknnLbNd0sZuIY5rnW7JnrL7/g7Yq2TbHAsvjZNJ3s0O\nPLb1qGhiqPb66ZTu2bX1+I80b2IoA1qNTLoObdNK2VTtvMNq05IlS/h+l+eVpCpZyYYbu26TPvUy\nQVTevquB2cO8IEk1NYu3czv7MzOlex4I3EWc6bhplSkMaFUJTStlU7XzDrNNlu2RVB8JNwJzGX5m\ntt31bw0bJmORND7K9bhYznn0XrqnTPDbGQQnwBY0MwlhQDuGqliapGmlbKp23mG2ybI9oztvme2S\nNljGJLOIGdphZ2bXA38g3jjuOOTrklRXb+b19F9ftsyXbO39ZgEfAk6heUkIA1pJkjQWHs4q7gRe\ny3Azs+11+xMztC8b8nVJqqvdWEn/9WXLluxpB8HnA1/BDK0kSVItrSV2u7ub4WZm08sE+MtwL0tS\nbc3hVuLwraz6smU+f7oFv+kv3R4I3EHzMrSW7dHIWIe2/qxDK6lOrgMWA/8M/BXF2Y/1Odt62fdc\nYtmejw73siTV1q4kwE3A9mzInLY/W7p9/qS7H5cpJbYdMaBtWobWgFYjYx1aSdJM+jXwWeBEYgXI\nQdSZLdr30tbzfWBYFySp5rYH4E5iObHOIBWy69KmP4d6CX63Iw6DuHNIVzMqdjkeQ1Wstdmk2qxV\nPO+w2mQd2tGet8x2SRvc21ruzHDGzHYu7wEmcFIoSXkey2eIpb06uxG3l2V6iJQdS7sNcabjpmU0\nDWg1MtahnbnzDqtN1qGVNEjD/mLm1tZygvxJU7qNWetl3zXAtsAKJod7YZJqag+eT/zSqzNIzao9\nmzeGtr3s9mXcPxG7HG8JLGfesC5qxhnQqhKaVpu1aucdZpusQyupLtoZ2tnkZ127ZWZ72fdOYkC7\nHzcM/dok1dEazgVWd6zNK7uTlaHtRfs7w1nAfKb6OEM1GdCOoSrW2mxabdaqnXeYbbIO7ejOW2a7\npA3uI3a322Ya50iXyihj52k8l6Sm+z1PBX7ExlnXXpTN5q4FLgJeCFw/vUZXzkAC2hDC00IIvw4h\nrAghvCVjewghfLi1/bIQwiPKHitJkmZeE/8+vxr+f3v3HT5XWSf8//0hFKUJSITkCwg+ogEbaLCs\nXVAReWRdwbqKbRHbqisqgmvj509XsO1iw16w8KgoRlwFl4A+VlSUqkEETAEiKohBIMn9/HFmkslk\nypl65pzzfl3XXGdmTvnedzJn5nzOXT7cSja2ddg0PYOk8vkY8IOcZfOmlFRHOwBZb45uXY57ffdA\n/tbcbclagr8AXE+1etaNHNBGxDzgg8CTgP2BZ0XE/m2bPYlsQsF9ySYX/PAA+0qSpCmq6u/zKBM8\nDdLVuP14ktTZVkB2k61bkNrruwcGu/GW2o5fFeOY5OrBwJUppasAIuJLwBHAZS3bHAF8NqWUgB9H\nxE4RsQDYO8e+qijz0JafeWilysrz2146p5Plhv0gm6e+6JemZ5Btm9t8ALh5khWSVAmdcst2+l6h\nbV37vq2Bbr+ZkW2h3dQc8IeW18sb7+XZJs++GrNZSU1y3HHHbchFW6VUNrN43KLKNIupbKp03Dzr\npSFV8vf5crLudpOeDKr5/ILGQ5J66dWNuFd34vZ98wyNaD1+VZRmUqiIOCYiLoyIC1evXl10cTRm\nVUplM4vHnVSZTjnlFD7c5+9Kqq6y/TY3ZzmedLqe1u596yZfLUmltRNfAp5I/yC103cQDHbjbUvg\nTmTfTbbQbmoFsGfL6z0a7+XZJs++AKSUTkspLU4pLZ4/f/7IhVbxWvPQVi2Vzawdd1JlWrJkCWf1\n+buSSinX73PZfpu3aiyn1UIbZDlvJamzO/FkYB/6B6mdvoNgsBtvh5JNQHUQ1WqIGEdA+zNg34jY\nJyK2Bp4JnNW2zVnA8xqzHT8UuCmltCrnvhqzWUxNUrVUNrN23EmWybQ9xR03z3ppSJX8fbaFVtJs\nuY3/S3a3sF+Q2nx/lBZax9B2kVJaC7wC+A7Z8JQzUkqXRsSxEXFsY7OzgauAK8lmsX9Zr31HLZMk\nSRpeVX+ftyFLkjGtFtrtgR2nUjNJ5XQDhwLfJl+Q2r4OBrvx9nPgaLI8tFVqoR3HLMeklM4mC1pb\n3/tIy/NElv4t176SJKlYVfx9Ph54O/lmDx11lmOArzTe22EitZFUfrcAcBfyzXLc6b1BZjm+Cvg8\n8DpsoZUkSSqdXl3wBm197delr3XbPJypXKqjLKBtBqmj5qFtvu7WQntTY5tmAF0VY2mhVbm0/mh2\nGnfXa/2w6zqtb81De0vEhpO5fSxmr3VF7Vu2406qTEuXLt2QtqfT+nF+Xqaxb9mOm2e9pI2+D3wU\neD9wtyGPsZ78rQGfJ+tKKEmd/RXIhia0ttAOolOA2+2GW7NVdvtRijyDDGhVmGYOWqhWKptZPG5R\nZZKkWXIV8EXgOGBXhutOPMi2lwFfBi5njv06J3GQVGtZC237sITWLsfN19D5e2jwv5btu6z8qcU3\nsMuxZkKVUtnM4nEnVaZTTjmFd/b5u5KU16R7GezSWK5j+O7Eg2y7feNv7cXKyVZMUkkt5nP0TtvT\naTKo9hbZ5rLfLOx3NPbdGljE8klVauoMaGtoVlKTtOahrVoqm1k77qTKtGTJEs4xbU9hx82zXtJG\nzTy0N9J9ZlC6rBtm220a21w3qQpJKrmFPBvYmeGCVOgf9LYu30LWyfnWidWnGAa0kiSpFu7aWN7O\n6JND5dl2j8Z2N0+qQpJK7mL+m+GDVMifH7u5bRWHiRnQSpKkWtgKuBPZOLJRW1/zbLsLWcvLDZOt\nlqTSOpUXMFqQOsgM7acAJ1K9YWJOCiVJkmrhAWQXconeF36tMxn3u0jste3BwJ8YfNZSSXVxHXdj\n80mgBvn+6TZhVKcJpM4iGz9rC60kSVIJXckczeHm4xonm3dbSdrcdSxk8Bba5jZ5x842W2hXAbtT\nve8kW2hraFZybZqHtvx1NQ9tscfNs17SRotYzmsJdgNex2itr3m3fTFw4KQrJqmkVrErmwepvXLJ\ndgp6+7XMrifrmXIdsIDqtdAa0Kow5qGd3nGLKpMkzZoLgB2B1zZe570gHHbb7wM3TaYqkmZY6w3n\nztYD17EH+YPU5jZNeSewWw/8rXGcKrbQ2uVYM6FKuVln8biTKpN5aCWVzUI2ptEZ54zG3bbdB7h2\nkhWSVFKJT7Ij/8ymwxb6dRuGTQPVft2Sm+/9kWyiuiq20BrQ1tCs5No0D23562oe2mKPm2e9pE3N\nJwtoJ5V7tn3bewLLAOh/kvZv0ZFUHfM4mhu5X+NVryC1+X6nGY7zBL/bAvcAVgPPonqNEAa0kiSp\nNvYAbiQbczVq62uebe9F1uX4hyycYK0klc+v+Dqwtu3dPMFppwCudextr5nV5zH5Ftpp32Q3oJUk\nSbWxJ9kYstVt77dPxtJLnm2a7kXW7XiHDR2dJQng8zy78ay11bVVv+C0W+ttp+VnyVpn7xi53LPH\ngFaSJNXGUcAKYGdG717cuk23bR8FXAnsPbkqSSqlZfwvst4i7RM4NZf9xsh2a73ttPwBcB5ZC+0y\n5iZVqUIY0NZQxMbHoOuHXddvfTP1yy0dVvZaV9S+ZTvuJMu07vzzu66f1OdlFj/Ds1hXqYwm3VVt\nO8bXvZgBtq3aJCySRrWMfeieV7a5zJu6p9fY2+yvZWP6IUthViWm7VFhWvPQ1imVTZXqunTpUtZH\neLEmqTSWMcc7WMF9yHLRQv80Gc1tht32eODvY6+JpFnV/ybzbcBvuS/DpewZNF/tFmQB7eOo3oRQ\nYAutCnTcccdtyEVbpVQ2s3jcosokSbNmEcu5BFjaeD3OVthu2/4ROHcitZFUTpcAazmQ6aTsuYVs\nqMW9qGYDhAFtDc1iapIqpbKZxeNOqkynnHIKHzn5ZNP2FHTcPOslbW4fstaKUVP39Nunuc2BwDXA\nj3PMdOzwAakO7sdPgCc0XnUKUqFzcDpMyp4/Av+LLKCtYgOEAa0K05qHVuW0ZMkSlixZUnQxJGkg\ni4Crga0YPh1Pnn2a2xzQeH4zqyZRHUmlszX7A3ehe5Daazwt5A9+1wB7Ab8Fno4ttJIkSaW3F7AO\nuJThW18H2efejXU/nUhtJM2SfL0s/pMf0jlIbS7zzHCcJ/htP37VZjgGA1pJklQzB5EFmbcy2qzF\neffZC3g8WaqgPOx2LFXZOuCNfIPRZzhuLvsFv68Ajm08n/QMx0UMgTKglSRJtbIdc1wGPIzBWl9p\ned3porG5bou2JcB32XhBKanOLgHW8GA2bV3tplMvkEGC3y3Ivn/+SDXHz4IBbS3NYq7NquVmnbXj\nTrJM5qEt7rh51ktlNOk7/M0WikFnLe41GQt0DnTbU3JcXMHufpIGcQEAj2Hzm2GdxsR26lLcS/sN\ntZvJJsF7INUcPwvmoVWBzEM7veNOqkzmoZVUVu8HPg38EpjHpsFnL+0Xi1u0rWsPdFtzQD4EOJWV\nYym/pLK6gD2BPdk0x2ynG2Sdvmea63otW3PY/rLx3oFjKv0ssoVWhTEP7fSOW1SZJGlWJeBi4Hf0\nn+SJtm3yTAzVvs98YC1wXs7y2etCKp985+2veRSjTwjVqRdJc9l6Y+1XjfcfQDUnhAID2lqaxVyb\nVcrNOovHnVSZzENb7HHzrJfU2YMby8vp3c24uRyka3KnfXYEHg78aMz1kFQul3ILH2D0CaHyzMJO\nY7/HAQuo5oRQYECrApmHtvzMQyuprLZjAUHWHW9crbD99nkkWaqgH7Fg/BWSVAqLWMldG897jb+n\nyzJP0Ns6IdQLgXPIZnWvKgNaSZI0cyZ9p/9BrGQ/NuaGHUcrbL99Ht14fjXXjbk2ksrhjZxA75yy\nvXLLwmDB7+1kSYKqPteJAa0kSaqlI4H70LsVtl+XvkFabu8DvAxYmLN8jqOVyqP/+boW+AjX0Xv8\nbHPZa/xs3uD3PLLx+z+n2nOdGNDW0CymJqlaKptZO+4ky2TanuKOm2e9pO7eApxM9xbVPF362vfp\nte+OwAeBRwBXsMckqiRpZv0I+AtPpv/42eay2/jZ9mW3m27nA7cA98YWWmniqpTKZhaPO8kyzeuz\nXpJm1RrgDmA5g7e+0mUfWtZ1SvGzjmzW0W1YMfb6SJpl32Ir4ImNV/2CsH7jZ9uXnW66fR94UON5\nVWc4BgNaFejwww/fkIu2TqlsqlTXpUuXsqTP35WkWbUtWW7YVzFY62tzmacFpT3gXQ4sBj6Ss4z2\nvpBmX77zdAmPJOup0WqQwLWX5o2z5jFuJZsj4FGN96o6wzHAlsX9aRWl3weu1/ph13Va38xBC2xI\n+bJ9h/16rStq37Idt6gyjfPzMo19y3bcPOsldbeMOe7PCpaQtZzOY/MW1V66tcK27tse8O4JPJRs\n1lFJdXEbh/A7nsrmgWunZTf9eo3QcowLySaFehTVZwutpKGdcsopnHLKKUUXQ1JFTfqGzSKW8xDg\nRjam7xlHt+N++z4Z+AVwHruPt0KSpi5f6+w2fIe/87LGq1HT9fRaNs0HXg48jGp3NwYDWhXIPLTl\nZx5aSWV3SGP5I8bX7bjfvkc2nv+M68dVDUkzbcXIMxb3unlGh+Ui4FRgFybf3bhoBrSSJKm21jPH\nPYGzGW8rbK9jLAQOAs7IWUbH0Upl9ntgD77M+NP1dAuC15CNn11LPeY4cQytJEmqrUUs53SCHRqv\n846F3bbLtnnH034S2J2sW2AeEY6Zl2ZNvptNXwbgseQbP9vte6bfTbM1je3XkN2gewZwAfDwQSs1\nhKK/m2yhraFZzLVZtdyss3bcSZbJPLTFHTfPekn9PYVsXOs4W2H7HWN/sq6A5qOVqm0Rb+ZhwD0a\nrzt1IabPMs/wh9Yg+NvATmSzuFd9/CwY0GpGVC0366wdd5JlMg+tpEmaxp3/bYHLyFozhhlH21wO\nOp72m8DbWcHlNbjglKom343ky7mCO3gmm89inGfc7DCTR60na6F9IllX3KqPnwUDWhXIPLTTO+6k\nymQeWklVsIw53gQcS5a+Bzqnw+gnb/fj5nIl8AXgJlaOWANJs+lzbAE8jc3Hw+ZJ09M0yORRvwRu\nAA6jPtdmkYru9DyExYsXpwsvvLDoYkiSKiIifp5SWlx0Ocpskr/N0+hSfxrBMcBFwAPoHIQOq3Vs\nW+tyFXAv4CjgM+S7HivhZZtUSfm+l1bxBRbyLIb/LhnkJtl64CTgbWRB7S7AvJzfLcOa5HdS3t9m\nW2glDc08tJKq4rDGslciskG6HzeXvbohLwCeCXwFgJuHLruk2XQFB/EMhssnO8xYW4BXAt8hC2br\nMH4WDGhVIPPQlp95aCVNwzRaJW9hjoeQBZfjmAQq74RS/wL8DXgrd89VTieAk4qX7zx8I8tYMXI+\n2UHG2m5BNhnUwY1j1mH8LBjQSpIksYjlPAO4GPgDo7e+5p1Q6iCyLsf78hdnPJZKIF8wexXwLn5O\n7wC137hY2vbvFwx/BngvEExnss5ZGQJhQFtDs5iapGqpbGbtuJMsk2l7ijtunvWS8nskC1gO7Mlw\nqXjypt9oXc4DvgQ8G9iXFeOtkKSCfJwtgBc3XrUGqu1jabsFrO37NZe9guH3AGcCifp0N4ZsNmep\nMOeff/5m3Y4PP+UUjjvuOIDNuyQ/5jEcfvjhudcf3rYOyL1+W+Bxbeua6/+N7Ivj8LZ1edY/GXgd\n2RdQpy7XhwP/tuHPDr6+efxh1w/y73/++efzaEzbI2nyUpr8jZuDWMk6YpOLTuh+ATnorMatF6zt\nk0QFcF7OckbMTsuIpHZrgI/xZGCOTSeB6tRa2/490dq7Y5CbZZeS9TD5r8Z7deluDLbQqkBLly7l\n0Y9+NLAxTcK6Dtv1WjfJfdf0Wbe+x3F7rb+d7mlu1pHdVes2zXqv9c2/dXuPfbutH/bf8NGPfjT/\nhGl7JFXHL8luZv6I7q2wwwSzTd1aWE4CngpkHZ4llddngD/yb/SfDKrfza/27Xstz2g8b6YIqhPT\n9kiSas+0PaObxm/zNLrW30CwEHgN8G76p+/plpKnfdnPNcC+wPPYnk/x11xlLeElnFRq+b6DPslT\neBFfJ2uEaP3eGOR7oduNsU7fSUH2/bE3cC7N4QzlTdfTZNoeSZKkAf2JOR4PfBlYS/eLyryTQuWd\nHOruwNOBr3ALcFOusjp2XpqevOfbFbx5wzhW6D0ZVLfvhNb98kwK9UfgrmRj8ddTr/GzYEArSZJK\nYhotAotYzpHAtcB/M/5JoXotXwv8FTiOvcZRFUlTlfgIu7J3h1Q9kD9Abd0v76RQ88mGSRxNFszW\nafwsGNBKkiRt4pnALmQj4UZpdR10eSBZ/shfcnPuFD620kqTl+88+wHHciOfZ/MhCoMEqDDYzbBb\ngRsb+wb1mgyqyYBWkiRtEBFHRcSlEbE+ImZuXPE0Wmn/wByvBxYzWmqe9td5ll8AvospfKTyeSvz\ngWeweWtrnvOfltcMsPwSsAfwG6Y3GdSsjd8fKaCNiF0i4pyIWNZY7txhmz0j4ryIuKzxA/mqlnVv\njYgVEXFR43HYKOVRPmXLtWm+0mqWybpOfl9pSJcA/wRcUHRBirKI5bwOeEPj9aAXmO2tMr26Lbcv\nmxPFrASytpf+PP+lycl3fv0P8D+cAGzPcK2tnYKy9mC30/I04B7AvahvCsVRW2iPB76XUtoX+F7j\ndbu1wGtTSvsDDwVeHhH7t6x/X0rpgMbj7BHLI0mSRpBSujyl9Juiy1G0Zczxd+CbZBcyMFiKntbX\ng0wetS1wHXA/AD40uQpK6itfMJuAf2c3tuAYhm9t7TbGttd+vwZ+ChzTKEXdJoNqGjWgPYJsiAmN\n5T+2b5BSWpVS+kXj+V+By6Gm/9qSJGlk05oc6kPszD8C5zFca+uwk0ftDhwE7MzrIWcKH0lFuY6F\n/IS3sH5DC+kwY2Fb9+s0qVQnpwF3Ap7D9CaDmrXuxjB6QLtbSmlV4/l1wG69No6IvcnmPPhJy9uv\njIhfR8QnO3VZ1viltPEx6Pph183icWexTNa1mmUqqq5SNxFxbkRc0uFxxIDHOSYiLoyIC1evXj2p\n4hbmtaxkF+BjDN/aOuwkUf8f8GfW82onh5IKkf+cWsDvWMeL6d5bI88SBguA1wCfB44im8SujpNB\nNW3Zb4OIOJfsZmG7E1tfpJRSRHS9pIqI7YGvAq9OKd3cePvDwElkreQnAe8BXthl/2PIWtTZay+n\ns5ckaVgppUPGdJzTyBoJWLx4cQVvq9yJ55BdrPwGuHfLmlFS9OTptrwYeArwKW4myzK5a9/SRnhz\nSxqH/MHspVzEE9i65Z31XbfdVDMobW3VHWQSue3Jxntux/S6Gs/q90vfFtqU0iEppft2eHwDuD4i\nFgA0ljd0OkZEbEUWzJ6eUvpay7GvTymtSymtJ7sB+uAe5TgtpbQ4pbR4/vz5g9VSkiRpCK8hu+t+\nGuNL0ZM3+H0HcAtwAvccsvSSJudW4DDexMqhWltbe3F0m/G43/IgYBH1bp2F0bscn0WWw5fG8hvt\nG0REAJ8ALk8pvbdt3YKWl08lm1lRkiQVJCKeGhHLgYcB34qI7xRdpk6m1VJwO3M8HTiXTSeHal8O\n0rpCzuX+wC+Bt3OTeWmlKcl/Dr0HuJbXkH8sbKdJ4zqNs++3/zeAFwB/ZnqpemZZ3y7HfbwLOCMi\nXgRcAzwdICIWAh9PKR0GPBx4LnBxRFzU2O+ExozG746IA8hufl4NvGTE8iiH1hO10wVBr/XDuxsj\npgAAIABJREFUrpvF485imaxrNctUVF2lYaSUzgTOLLoceaQ0+QBuEctZTbATnVtSul2QjqtL8n0a\nyx1YQXa5ZMQqFW8Fd+bNPAl4HL3zyvZbDtrVOIB3kgWzOzK9b4RZvsYYKaBNKd0IHNzh/ZXAYY3n\nP6DLv3VK6bmj/H1JkqRJu5E5dmEFt5Nd0GzDcBeieZftF70/AR4D/Be78kpu7Ftex9JKw8l/g+x4\n1pM4he5B7CDne3MsbZ7lzxqPD5N9H9U1VU+rUbscS5IkVdoilnM+u7E32ayi426F7dcl+UDgnsB7\n+RPZuL3+7HosDSb/ObOGRXyZ1wJ3b7zTqatwr/O8fZ9BZk5/DzCfrPtrnVP1tDKgraGypSYxvUs1\ny2RdJ7+vpPF5HKvYnexicpiUHJ0mhmrmqaXPckvgfcDvgZdwt5HqIWk0V3AvfsUd/Hvj9TBpd7oF\nvv32vQz4FvAK4M44GVSTAa0kSSqt6d3MCf4VuBz4IpsGpK2BaV7N1pbm837LxwHPBz7BLXyd3fKV\n2FZaKZf858q3mM8Ktga2ZtNAdJCbWnkC3U7LHcm+B47FrsatDGglSZJyeC6wH9mELInNuwPC4N2P\nOwXD3boqngzcFbi4c5bEjgxqpd7ynyOXsxWH80byj5elx7LfzMedlnsAnyLLSm3r7EYGtJIkqdSm\n1Up7FXO8layV9uuMlpKnuewUDHdq+V0P7AL8GjgBcqfxkTQO63kgB7A98PbGO3m6Gnc793vt0235\nH8CvBi/4yMowpMmAVpIkKYdFLOd+LOSbwBGMPzUHbD4BDG3rdm0sb2UF57J7rnLbSit1lv/c+Ci/\n4HbeRzYhE+TrJtyt1XbQm1+/BI4HzmocY1rdjcsQzMLoeWhVQmXLtWm+0mqWybpOfl9J47c/K1hH\nsAWwluxCaphUPIN0SW4GuM3j3QIcAuzP9cA6YF7fcje/K/yekDL5g9kr2ZaX8zDgnxvvDDqZU+ty\nmO7JbyLrofGaxmu7G2/KFlpJklR60wzUljHHp4EHsjGJTr/WWIZcNnNPth6/mbrj+8Cr2WXk+kjq\nZR6PJPEpsryv3VLv5Fm27pP3GD8C/ht4PbA9TgbViQGtJEnSABaxnIXAxcDH6JySZ9BlrxbeTl2P\n/xl4JnAqN3PGAKl87H4sDXYeXMEjORs2hJH9Uu/0ankdtHtyACcCu5Gl6gFbZzsxoK2hsuXaNF9p\nNctkXSe/r1Q30zwP9mIhjyObIOaPjN4am3c25ObfmQd8EFgIvJHVZB2R8zGoVZ3l//x/n8dzZ+7K\nioFS7/QKYgftpnwbcF/gbWR5Z6fZOlum6woDWkmSVBnTugjbjxW8irvxZ7KgdtRWWPosm620rcfb\nCfgscChwEfceqPwGtaqj/J/7vwD/zFX8nW0YrsW13TDdlLcG/hP4F7Jgdlqts2UKZsGAVpIkaShH\ncD3HAB8CrmH0VthewW+34z4SOBW4Hyu5zLF10hgk4MXM41o+B2zXeDdvV+Pmtmtang8yA3Jz+Vng\nBy372NW4OwNaSZKkIR3N7nwT2IfRW2Fbl926HLevax7/CuAoVpJlqs3HVlrVRcQgn/eTga/yLuBh\njXfyTOrUHvB2yjGdd9/rgZcD72W6aXqgfK2zYNqeWipbahLTu1SzTNZ18vtKmryHsYq/EqwHbgLu\n0nh/1C7IvSaGal3XPN5OwJ+APXkgf2A1sHOu8kf43aFqG+zGzU3AyRwJvJbOvSQGOXcHPc+bf+cE\n4Hbg3Uy3q3FZ2UIrSZIqZdoB2rZkEzQ9kmwSl3FNBNWp9aZbq+/uwFeA61jHo1nQspek/O7Cuczj\n42Qdj6F/MEuPZd4ZkNe0LH8GfJos5+w9mW5X47Le3DKglSRJlTPNC7NlzHFP4FLgXYxvIqjWZfN4\n7cvW4z0UeD9wPrcBJ+Uu/2DdMaXyyP+5/jvwKS5njsdy/YaeFnlmNR70nO20b7N78jbAK8nS9LwR\nc87mZZfjGur3I99r/bDrZvG4s1gm61rNMhVVV0nTsYjlrCM4EvgPsvyw+7Fpl+BRuh7TY1378V5C\nNpHMlbyVT3Ia92NF7nrY/VhVkj+YTcAxwOf4E71bYAfpNjzMtols1vL7ADsAO9nVOBdbaCVJUiVN\nu5X2A2S5Io8F1jK+rsftOWh7tfIG8DHgPGB/VnIFewxUD1tqVXaD9zh4G/A53g78A71bYPN2Oc67\n7Zq297YkSwN2FNNvnS3zzSwDWkmSpBEtYjl/ZY6Tge8D/0P+1lj6LDvloO12XMjSjNwZ+BtwEiuA\n341SNanCPgO8jRcAr2bTgDTvDadBuhq3b9vsapzIcs1+p7GtE0ENxi7HkiSpslKaXqvjIpazluAg\n4H6N9/p1Ec4T9HY6TrfjrmFjALwK+DawN4u4muuBXXLVw67HKqvBzvXlbMXzeRTwUWBe493W8462\n9ybV1fjzwCeBAxvvTzuYLfv5bgutJEmqtGlerF3JHPcju8C6DFjH4BNB9eqS2K+VtzW9zz2BrwMr\nWctiFpBNfJOPE0WpbAb/vO7BV4GvkgWzredfp3NynF2NYeNQghuAfyPr7nwsdjUehgFtDTV/pLqd\n+L3WD7tuFo87i2WyrtUsU1F1lTR9i1jOMuY4B7g/cDqDTwhFy3LbDu/163LceqyHk6UAuZDbOZid\ngTsGqo/fLSqDwT6nVwHncgV78GSyyZege1AKG4PP9u1al3TYptu2rTefXg3cQtZK/Du7Gg/FLseS\nJKnypt31+DaCxWQXq48B9iLfLMWdgtQ83RebrbnbdjjWM4A/AW/i72TjaReNs7pSiSwHDmY+17IH\n63O3urb2fBi1q3FzuQY4H/gyWZKt/YF5djUeii20kiRJY/Z75vgccDvwAjbOejzIhFDduhw3l+3H\n6dSa21y+FPgFsI79GjMf57+StZVWs2qwHkrXszf7sCNXs4T1bEfnoLR92XqOjaOrcXO5LVmKnk8B\nb8Ccs6MwoK2hlDY+Bl0/7LpZPO4slsm6VrNMRdVVUnGyboNzvJ9sxuP3MlzX415Bat6L6ub2d288\n/woreB47MGhQa2CrWTLY5/FPwBO4gbV8C1jMcEFpc7vWJR226xUgN9ffQJZm63nAVQV0Na7SdYMB\nrSRJqoVpX8AtYjn/wnqezsaRq3mD07xBar+L6vbWp3XAauCz/I0T2XngOhnUqmjD3Vz5AFvxa84k\nm3ypaQvynYO0bdevVRd6B8jvIJsJ/frGa4PZ0RjQSpIkTUzwNhbyRvIHp3lafvJeVLd3W74duLLx\nen9uGq5GttaqIMN+7i7l4xzLxozMredHr9bXXhNEDToDcnP5E7Ixs4cCu2FX43EwoJUkSbVRRMvE\nfqxgGXN8G3gT+bocw/BjbLt1W74deDrwLeCDwINGvJA2qNU0jfJ5uzcruRZ4GdlswnlbX7tNEDXo\nDMjN5S3Ac4A9gf8kC2ZtnR2dAW0NlS01ieldqlkm6zr5fSV1VsQF3SKWsxR4J/B5enc5HiT3bJ60\nPs19tgJ2Aj5Mlu/S9CCqiyuZ44tkraIvIzsHerW+QvfWWtg8wO20XfsyAc8HriX7DrgLdjUeF9P2\nSJIkTcHzWMhPWMmxZOPnDqTzhe+2Hd7r1dW4V2oQgFuBPwO7A58lu7AeVzfH5s20ql4oq3jjuGG7\nMXC8jSdzJ17RePVSugenvXpOdFrXr3X378DNwLuBh2FX43EyoJUkSbUzzby0TfdlBT9gAc/gOo4E\nfgrszGATQTUvnDvlnO108X0HWTfj35Kl7bkzk+nmGGFQq/Eb/zm6De9kIbCS3zJ4cNprrGzznOy0\n3RZk5963G8/tajxedjmuobKlJjG9SzXLZF0nv6+k2fMIVnEG8AfgVAafrThvV+M1wG3AkcAS4FXA\ncuaYR5rYhbRDHzQukxxKc39W8C1u56UsZD3wNzoHp+1dj+mwXes52C2YvQY4AlhF1u0/sLv/uBnQ\nSpKkWirqRtBdmeMCNk4QlXe2YujeUtS+/TzgGWTB7AeBg6fUIuSYfo1qOp+frdiPFSxlN/YDPkLv\n4BQ6n5u9xuCuJ+tmfBSwlI2BcxFdjat+09uAVpIk1VZRE0TtzBwBrADOY9OJoPoFq83t2petF9av\nA75JcRNAGdRqUEXcDDmYazgAeDnwITY/51qf0/ZevwmiEvCvwM+B04B7YlfjSXEMrSRJ0pQtYjnr\nCF4CfB+4gI2TRPULVvOMrX098FDg2RQ3+YwTRimv4m6AbBxT+/LGO8ey+bkGm7bC9ps8aj3wfuAT\nZD0xjgLm4YkwKbbQSpKkWisq4FrGHB8lS9/xv8nSeeTNOdvpQvo24ONkLUN7sDGYLXq8nt2Q1c0s\nfDbuzwreyUKeTNZS+39a1g0yVrZ1+xuAD5AFsm+huJtKdbmZZAttDbV+cXT6oPdaP+y6WTzuLJbJ\nulazTEXVVVJ+KU3/wnoRy7mCPVjCCh4FPAU4nyzA7ZfOp/0C+layi+dvAfsDd5+BQLadMyGrVdGB\nbKv7swK4jVdyJx7XeC/PbOPQuefE3YAfks1i/ruCzsU6nWu20EqSJBVkEcs5kMSXgUuA4+iex7Lb\nmNo72BjMnspsBrNNs9Aip2LN7mdgG94PzCfr7fBNerfCwuYTRP0eOAFYR9ZL4s44o/E0GNBKkiRR\nbIvGPZjjDOAdjdf9JoJqXkDfATyNLJj9EPBSynEBPZsBjSZpdgPZjZYxx3rgfWQ9Jj7UeL/bTMet\n5+KNwGHAR8lS9BQ1ozHUq3UW7HJcS/0+5L3WD7tuFo87i2WyrtUsU1F1lTS4Iroew8bux7uygnXA\n2cDhdJ8Iqvn+z4BzyC68X0JxF9DDcNKo+pj1QLapOVnba4EfkY2p3QI4hu5perYl6/L/NOBq4Htk\nrbNFjV+v4/lkC60kSdIMWMRyljHHe8kmifog3SeCSo3lPwC/YWMwW4bW2XZlCXY0uDK0yrZbxhxb\nAf8/C3ksd+KlZGl3uqXpuZ2sy/8PGtv9A+U9F8vKFlpJkqQWRbXSQhbU/p3g/wKvILtgfgGbtsre\nSjaD8VHAM4G9G+vKfAFta231lC2Qbdr0PLqNx7ITr+PvHAEsYPObSz8GziXravxcik3PU9fzxxZa\nSZKkNikVd3F4NXN8CTgYeDFwBptPAPV1YDUbx/yVqatxL80WvbIGQ3XW+n9Xnf+/bTiPv3A+mwez\nNJaPIusl8SKKPQ/rGsyCLbS1VLbUJKZ3qWaZrOvk95VUTs0Wol+wkFeyin8hC263Z9MJoF4CzCtx\nq2w/ttqWR3UC2E62YTvmWM8KPgQEcCzwGuCRZDeY7o7djItkQCtJktRFkd2PH8hKfsZCbmcV27Ex\nmD2V8k0ANQoD29lV7UB2o0Us5w6Cc4CzgDPJJn9q3mQqOpit+7lhQCtJktRDkUHtQaxkHdkf34ss\nmH055R8zO4wIL9xnRV0C2Va/Y44vsYKnAd8mOw/fQTZBm8FssQxoa6hsqUlM71LNMlnXye8rqRqW\nMce+je6Ozcmh6tI62649kPI7cHrqGMS2agattxL8BHg4WTBb13NxljgplCRJUh9FBk7NdD7NQHYe\nqXats91UawKi2eS/8aauYY5HkrXYFn0uekMnYwutJElSDkWn81F3TpA3Xgaw3c3KuejnfCMDWkmS\nJFWG3ZIHZwCrMrPLsSRJUk4GR+VjsNad3YnLp8gc2bPKFtoaKluuTfOVVrNM1nXy+0qajCK7Hms4\nttpu5Ge3vOr8ue3FFlpJkrRBRJwcEVdExK8j4syI2KnoMs0iW0nKrdky2fqomk51rGI968Lvm+4M\naCVJUqtzgPumlO4P/BZ4Y8HlkaaiCoFf2csvDWOkLscRsQvwZWBv4Grg6SmlP3fY7mrgr8A6YG1K\nafEg+2u8ypZr03yl1SyTdZ38vtIwUkrfbXn5Y+DIospSBnY/rq5e/69Ffff6Wasnf+t7G7WF9njg\neymlfYHvNV5389iU0gHNYHaI/SVJ0nS9EPh20YWYdV5s1k+37ryTfqh+/H7pb9SA9gjgM43nnwH+\nccr7S5KkAUXEuRFxSYfHES3bnAisBU7vcZxjIuLCiLhw9erV0yi6JEmbGHWW491SSqsaz68Dduuy\nXQLOjYh1wEdTSqcNuD8RcQxwDMBee+01YrElSaqvlNIhvdZHxPOBw4GDU+rePtD4PT8NYPHixbVu\nR7DrsaRxsmU2v74BbUScC+zeYdWJrS9SSikiuv3TPyKltCIi7gacExFXpJQuGGB/fzTHqGypSUzv\nUs0yWdfJ7ysNIyIOBV4PPDqltKbo8pRJ8xw0sJU0Cn/PB9M3oO11Fzciro+IBSmlVRGxALihyzFW\nNJY3RMSZwIOBC4Bc+0uSpKk5FdiG7AY0wI9TSscWW6RysbVW0rAMZgc36hjas4CjG8+PBr7RvkFE\nbBcROzSfA08ALsm7vyRJmp6U0j1TSns2JnI8wGBWkjTLRh1D+y7gjIh4EXAN8HSAiFgIfDyldBjZ\nuNgzG3d5twS+kFL67177a7LKlprE9C7VLJN1nfy+kopjK62kQfmbPpyRAtqU0o3AwR3eXwkc1nh+\nFfCAQfaXJEkqO4NaSXkYyI5m1C7HkiRJ6iIlL1Yldef3w+gMaCVJkiRJpWRAK0mSNGG2wkhq5/fC\neIw6KZRKqGy5Ns1XWs0yWdfJ7ytptjimVhL4ez1uttBKkiRNiWNqpXrz/B8/A1pJkiRJUinZ5biG\nypZr03yl1SyTdZ38vpJml92PpfrxN3sybKGVJEkqgBe3Uj041GCyDGglSZIK4oWuVG2e35NnQCtJ\nklQwL3qlavFm1fQ4hraGypaaxPQu1SyTdZ38vpIkSVVnC60kSdIMsEVHqgbP4+kyoJUkSZohXgxL\n5eX5O312Oa6hsqUmMb1LNctkXSe/r6TyMq2PVC7+HhfHFlpJkqQZZBdkqRw8T4tlQCtJkjTDvFiW\nZpM3nWaDAa0kSdKM88JZmi2ej7PDgFaSJEmSVEpOClVDZcu1ab7SapbJuk5+X0nV42RRUrH8rZ09\nttBKkiSViN2PpWJ43s0mA1pJkqQS8uJamg5vIs02uxzXUNlybZqvtJplsq6T31dS9TW/A+yGLE2G\nv7OzzxZaSZKkkvOiWxovW2XLw4BWkiSpArwAl8bD86hcDGglSZIqxItxaTjeFConx9DWUNlSk5je\npZplsq6T31dSfTm2VhqMv6HlZUArSZJUUQa2Um8GsuVnl2NJkqSK86Jd2pznRTXYQltDZUtNYnqX\napbJuk5+X0lqZWutlPG3s1psoZUkSaoRL+ZVV076VE0GtJIkSTXjhb3qxs97dRnQSpIk1ZQX+ao6\nb95UnwGtJElSjXnBr6ryc10PTgpVQ2XLtWm+0mqWybpOfl9JGoSTRqkq/D2sFwNaSZIkbdAaDBjc\nqiwMYuvLgFaSJEkd2WqrWWcgKwPaGipbrk3zlVazTNZ18vtK0rikZFCr2eLvn5qcFEqSJEl9OXmU\nZoWfQ7WyhVaSJEm52Q1ZRTGQVScGtJIkSRqYk0dpGgxi1Y8BbQ2VLTWJ6V2qWSbrOvl9JWlabLXV\nuPmbprwcQytJkqSxMAjRqByrrUHZQitJkqSx6dXTROrEAFajMKCtobKlJjG9SzXLZF0nv68kzQK7\nI6sbf8M0Dga0kiRJmjgnkRIYxGr8DGglSZI0VXZLrg8DWE2ak0JJkiSpUAY91ePkTpoWW2glSZJU\nOFtty88AVkUwoK2hsuXaNF9pNctkXSe/rySVmWNuZ5+/O5oFBrSSJEmaabbezg6DWM0aA1pJkiSV\nigHu9BjAatYZ0NZQ2XJtmq+0mmWyrpPfVxpGRJwEHAGsB24Anp9SWllsqaTe+g3JUD7+pqiMnOVY\nkiS1OjmldP+U0gHAEuDNRRdIGkZzlt32h/y3UbXYQitJkjZIKd3c8nI7wMtcVUrdWnMNVFV1I7XQ\nRsQuEXFORCxrLHfusM29I+KilsfNEfHqxrq3RsSKlnWHjVIeSZI0uoh4R0T8AXgOPVpoI+KYiLgw\nIi5cvXr19AoojVm3FssyBIO9yl6G8kujGrXL8fHA91JK+wLfa7zeRErpNymlAxpdlx4ErAHObNnk\nfc31KaWzRyyPcojY+Bh0/bDrZvG4s1gm61rNMhVVV6mbiDg3Ii7p8DgCIKV0YkppT+B04BXdjpNS\nOi2ltDiltHj+/PnTKr40Vf0CxqIfUt2N2uX4COAxjeefAZYCb+ix/cHA71JK14z4dyVJ0pBSSofk\n3PR04GzgLRMsjiRJQxu1hXa3lNKqxvPrgN36bP9M4Itt770yIn4dEZ/s1GW5yW5NkiRNXkTs2/Ly\nCOCKosoiSVI/fVtoI+JcYPcOq05sfZFSShHRteNDRGwNPAV4Y8vbHwZOIptw4iTgPcALO+2fUjoN\nOA1g8eLFdrAYQdlSk5jepZplsq6T31ca0rsi4t5kaXuuAY4tuDySJHXVN6Dt1S0pIq6PiAUppVUR\nsYAsX103TwJ+kVK6vuXYG55HxMfI0gNIkqSCpJSeVnQZJEnKa9Qux2cBRzeeHw18o8e2z6Ktu3Ej\nCG56KnDJiOWRJEmSJNXEqAHtu4DHR8Qy4JDGayJiYURsmLE4IrYDHg98rW3/d0fExRHxa+CxwGtG\nLI8kSZIkqSZGmuU4pXQj2czF7e+vBA5ref034K4dtnvuKH9fkiRJklRfo6btUQm15qvsNKFMr/XD\nrpvF485imaxrNctUVF0lSZKqbtQux5IkSZIkFcKAVpIkSZJUSnY5rqGy5do0X2k1y2RdJ7+vJElS\n1dlCK0mSJEkqJQNaSZIkSVIpGdBKkiRJkkrJMbQ1VLbUJKZ3qWaZrOvk95UkSao6W2glSZIkSaVk\nQCtJkiRJKiW7HNdQ2VKTmN6lmmWyrpPfV5IkqepsoZUkSZIklZIBrSRJkiSplAxoJUmSJEmlZEAr\nSZIkSSolJ4WqobLl2jRfaTXLZF0nv68kSVLV2UIrSZIkSSolA1pJkiRJUinZ5biGypZr03yl1SyT\ndZ38vpIkSVVnC60kSZIkqZQMaCVJkiRJpWRAK0mSJEkqJcfQ1lDZUpOY3qWaZbKuk99XkiSp6myh\nlSRJkiSVkgGtJEmSJKmU7HJcQ2VLTWJ6l2qWybpOfl9JkqSqs4VWkiRJklRKBrSSJEmSpFIyoJUk\nSZIklZIBrSRJkiSplJwUqobKlmvTfKXVLJN1nfy+kiRJVWcLrSRJkiSplAxoJUmSJEmlZJfjGipb\nrk3zlVazTNZ18vtKkiRVnS20kiRJkqRSMqCVJEmSJJWSAa0kSZIkqZQcQ1tDZUtNYnqXapbJuk5+\nX0mSpKqzhVaSJEmSVEoGtJIkSZKkUrLLcQ2VLTWJ6V2qWSbrOvl9JUmSqs4WWkmSJElSKRnQSpIk\nSZJKyYBWkiRJklRKBrSSJEmSpFJyUqgaKluuTfOVVrNM1nXy+0qSJFWdLbSSJEmSpFIyoJUkSZIk\nlZJdjmuobLk2zVdazTJZ18nvK0mSVHW20EqSJEmSSsmAVpIkbSYiXhsRKSJ2LboskiR1Y0ArSZI2\nERF7Ak8Ari26LJIk9WJAW0MRGx+Drh923SwedxbLZF2rWaai6iqN4H3A6wFHaUuSZtpIAW1EHBUR\nl0bE+ohY3GO7QyPiNxFxZUQc3/L+LhFxTkQsayx3HqU8kiRpNBFxBLAipfSrHNseExEXRsSFq1ev\nnkLpJEna1KgttJcA/wRc0G2DiJgHfBB4ErA/8KyI2L+x+njgeymlfYHvNV5LkqQJiohzI+KSDo8j\ngBOAN+c5TkrptJTS4pTS4vnz50+20JIkdTBS2p6U0uUA0buv24OBK1NKVzW2/RJwBHBZY/mYxnaf\nAZYCbxilTOqvbKlJTO9SzTJZ18nvK3WTUjqk0/sRcT9gH+BXjd/2PYBfRMSDU0rXTbGIkiTlMo08\ntHPAH1peLwce0ni+W0ppVeP5dcBuUyiPJEnqIKV0MXC35uuIuBpYnFL6Y2GFkiSph74BbUScC+ze\nYdWJKaVvjKsgKaUUEV3bGiLiGOAYgL322mtcf1aSJEmSVFJ9A9pu3ZIGsALYs+X1Ho33AK6PiAUp\npVURsQC4oUc5TgNOA1i8eLGd7CRJmrCU0t5Fl0GSpF6mkbbnZ8C+EbFPRGwNPBM4q7HuLODoxvOj\ngbG1+EqSJEmSqm3UtD1PjYjlwMOAb0XEdxrvL4yIswFSSmuBVwDfAS4HzkgpXdo4xLuAx0fEMuCQ\nxmtJkiRJkvoadZbjM4EzO7y/Ejis5fXZwNkdtrsROHiUMkiSJEmS6mkaXY4lSZIkSRo7A1pJkiRJ\nUikZ0EqSJEmSSsmAVpIkSZJUSga0kiRJkqRSMqCVJEmSJJWSAa0kSZIkqZQMaCVJkiRJpWRAK0mS\nJEkqJQNaSZIkSVIpGdBKkiRJkkrJgFaSJEmSVEoGtJIkSZKkUjKglSRJkiSVkgGtJEmSJKmUDGgl\nSZIkSaUUKaWiyzCwiFgNXDOlP7cr8Mcp/a1Jqko9oDp1sR6zxXrMlmnX4+4ppflT/HuVM6bf5qp8\nfgdlvevFetdHHesM46t3rt/mUga00xQRF6aUFhddjlFVpR5QnbpYj9liPWZLVeqhwdT1/91614v1\nro861hmmX2+7HEuSJEmSSsmAVpIkSZJUSga0/Z1WdAHGpCr1gOrUxXrMFusxW6pSDw2mrv/v1rte\nrHd91LHOMOV6O4ZWkiRJklRKttBKkiRJkkrJgBaIiE9GxA0RcUmX9XeJiG9GxK8i4tKIeMG0y5hH\nROwZEedFxGWNcr6qwzYREf8ZEVdGxK8j4oFFlLWXnPV4TqP8F0fEDyPiAUWUtZ88dWnZ9qCIWBsR\nR06zjHnkrUdEPCYiLmpsc/60y9lPzs/WzJ/vEXGniPhpSxnf1mGbMpzreepRinNd4xMRJzX+zy+K\niO9GxMKiyzQNEXFyRFzRqPuZEbFT0WWahog4qnH+r4+ISs8GGxGHRsRvGt/Lxxddnmngh0gLAAAF\ngklEQVTpd51dRYNc/1VJnt/1iUgp1f4BPAp4IHBJl/UnAP/ReD4f+BOwddHl7lDOBcADG893AH4L\n7N+2zWHAt4EAHgr8pOhyD1mPfwB2bjx/0izWI29dGuvmAf8DnA0cWXS5h/w/2Qm4DNir8fpuRZd7\nyHrM/PneOH+3bzzfCvgJ8NC2bcpwruepRynOdR9j/Vzs2PL8X4GPFF2mKdX7CcCWjef/0fweqvoD\n2A+4N7AUWFx0eSZYz3nA74B7AFsDv+p0PVDFR7/r7Co+8l7/Ve2R53d9Eg9baIGU0gVkF61dNwF2\niIgAtm9su3YaZRtESmlVSukXjed/BS4H5to2OwL4bMr8GNgpIhZMuag95alHSumHKaU/N17+GNhj\nuqXMJ+f/CcArga8CN0yxeLnlrMezga+llK5tbDdzdclZj5k/3xvn7y2Nl1s1Hu0TIpThXO9bj7Kc\n6xqflNLNLS+3Y/PPdiWllL6bUmp+19Tms55Sujyl9JuiyzEFDwauTCldlVK6HfgS2fd05eW4zq6c\nAa7/KiXn9cnYGdDmcyrZHcSVwMXAq1JK64stUm8RsTdwINmdkVZzwB9aXi9nhk+wHvVo9SKylqiZ\n1q0uETEHPBX48PRLNbge/yf3AnaOiKUR8fOIeN60yzaIHvUoxfkeEfMi4iKymyDnpJRKea7nqEer\nUpzrGl1EvCMi/gA8B3hz0eUpwAvxs141pfhO1vjlvJatjAF/18fCgDafJwIXAQuBA4BTI2LHYovU\nXURsT9ba9+q2O92lkqceEfFYsovcN0yzbIPqU5f3A2+YxaCpXZ96bAk8CHgy2Tnz7xFxrykXMZc+\n9SjF+Z5SWpdSOoCsFefBEXHfoss0jLz1KMu5rnwi4tyIuKTD4wiAlNKJKaU9gdOBVxRb2vHpV+/G\nNieS9Qo5vbiSjleeektVVJVr8kEUcX2y5aT/QEW8AHhXyjqEXxkRvwcWAT8ttlibi4ityE6c01NK\nX+uwyQpgz5bXezTemyk56kFE3B/4OPCklNKN0yzfIHLUZTHwpayHK7sCh0XE2pTS16dYzL5y1GM5\ncGNK6W/A3yLiAuABZONGZkaOepTmfAdIKf0lIs4DDgVaJ9woxbne1KMepTnXlV9K6ZCcm55ONrfA\nWyZYnKnpV++IeD5wOHBw4zuoEgb4/66yUn0na3R5rmWrrNfv+rjZQpvPtcDBABGxG9nkBVcVWqIO\nGmP+PgFcnlJ6b5fNzgKel02AGg8FbkoprZpaIXPIU4+I2Av4GvDclNJMBUyt8tQlpbRPSmnvlNLe\nwFeAl81gMJvns/UN4BERsWVEbAs8hGzMyMzIWY+ZP98jYn5zBtSIuDPweOCKts3KcK73rUdZznWN\nT0Ts2/LyCDb/bFdSRBwKvB54SkppTdHl0dj9DNg3IvaJiK2BZ5J9T6uCcl5vVE7O65Px/90K3QAc\nWkR8EXgMWevY9WR3grcCSCl9JLKUAZ8mm7EsyFpvPl9IYXuIiEcA3ycb99fsvnoCsBdsqEuQjRE8\nFFgDvCCldGEBxe0qZz0+DjwNuKaxfm1Kaeam+89Tl7btPw0sSSl9ZYrF7CtvPSLidWQtnOuBj6eU\n3j/90naX87M18+d7o8XyM2SzZm4BnJFSentEHAulOtfz1KMU57rGJyK+SnYjaT3Z//uxKaXKt2RF\nxJXANkCzF8KPU0rHFlikqYiIpwL/RTar/F+Ai1JKTyy2VJMREYeRDTOaB3wypfSOgos0FZ2us1NK\nnyi0UBPW7XojpXR2caWavG6/6xP/uwa0kiRJkqQyssuxJEmSJKmUDGglSZIkSaVkQCtJkiRJKiUD\nWkmSJElSKRnQSpIkSZJKyYBWkiRJklRKBrSSJEmSpFIyoJUkSZIkldL/A/Nw89MW3ugjAAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efee06d8a10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot for check and debug\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.figure(figsize=(16,10))\n",
    "plt.subplot(1,2,1, aspect=\"equal\", adjustable=\"datalim\")\n",
    "plt.plot(PtsRZP0[0,:],PtsRZP0[1,:],'.b', PtsRZP[0,:],PtsRZP[1,:],'.r', markersize=2)\n",
    "plt.plot([DR[0],DR[1],DR[1],DR[0],DR[0]], [DZ[0],DZ[0],DZ[1],DZ[1],DZ[0]],'--k')\n",
    "\n",
    "plt.subplot(1,2,2, aspect=\"equal\", adjustable=\"datalim\")\n",
    "plt.plot(Pts0[0,:],Pts0[1,:],'.b', Pts[0,:],Pts[1,:],'.r', markersize=2)\n",
    "thet = np.linspace(DPhi[0],DPhi[1],100) if DPhi[0]<DPhi[1] else np.linspace(DPhi[0],DPhi[1]+2.*np.pi,100)\n",
    "X = np.concatenate((DR[0]*np.cos(thet),DR[1]*np.cos(thet[::-1]),[DR[0]*np.cos(thet[0])]))\n",
    "Y = np.concatenate((DR[0]*np.sin(thet),DR[1]*np.sin(thet[::-1]),[DR[0]*np.sin(thet[0])]))\n",
    "plt.plot(X,Y,'--k')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 loop, best of 3: 606 ms per loop\n",
      "1 loop, best of 3: 5.07 s per loop\n"
     ]
    }
   ],
   "source": [
    "# Check and debug\n",
    "[dR, dZ, dRPhi], RMinMax, ZMinMax = [0.02]*3, [2.,3.], [-1.,1.]\n",
    "DR, DZ, DPhi = [2.15,2.6], [-0.21,0.51], [3.*np.pi/4.,-np.pi/4.]\n",
    "Pts0, dV0, ind0, dRr0, dZr0, dRPhir0 = _Ves_Vmesh_Tor_SubFromD(dR,dZ,dRPhi, RMinMax,ZMinMax, Out='(X,Y,Z)')\n",
    "\n",
    "%timeit out = _Ves_Vmesh_Tor_SubFromD(dR,dZ,dRPhi, RMinMax,ZMinMax, Out='(X,Y,Z)')\n",
    "%timeit out = _Ves_Vmesh_Tor_SubFromInd(dR, dZ, dRPhi, RMinMax, ZMinMax, ind0, Out='(X,Y,Z)')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cython"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%load_ext cython"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<!DOCTYPE html>\n",
       "<!-- Generated by Cython 0.25.2 -->\n",
       "<html>\n",
       "<head>\n",
       "    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n",
       "    <title>Cython: _cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771.pyx</title>\n",
       "    <style type=\"text/css\">\n",
       "    \n",
       "body.cython { font-family: courier; font-size: 12; }\n",
       "\n",
       ".cython.tag  {  }\n",
       ".cython.line { margin: 0em }\n",
       ".cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 8px; border-left: 8px none; }\n",
       "\n",
       ".cython.line .run { background-color: #B0FFB0; }\n",
       ".cython.line .mis { background-color: #FFB0B0; }\n",
       ".cython.code.run  { border-left: 8px solid #B0FFB0; }\n",
       ".cython.code.mis  { border-left: 8px solid #FFB0B0; }\n",
       "\n",
       ".cython.code .py_c_api  { color: red; }\n",
       ".cython.code .py_macro_api  { color: #FF7000; }\n",
       ".cython.code .pyx_c_api  { color: #FF3000; }\n",
       ".cython.code .pyx_macro_api  { color: #FF7000; }\n",
       ".cython.code .refnanny  { color: #FFA000; }\n",
       ".cython.code .trace  { color: #FFA000; }\n",
       ".cython.code .error_goto  { color: #FFA000; }\n",
       "\n",
       ".cython.code .coerce  { color: #008000; border: 1px dotted #008000 }\n",
       ".cython.code .py_attr { color: #FF0000; font-weight: bold; }\n",
       ".cython.code .c_attr  { color: #0000FF; }\n",
       ".cython.code .py_call { color: #FF0000; font-weight: bold; }\n",
       ".cython.code .c_call  { color: #0000FF; }\n",
       "\n",
       ".cython.score-0 {background-color: #FFFFff;}\n",
       ".cython.score-1 {background-color: #FFFFe7;}\n",
       ".cython.score-2 {background-color: #FFFFd4;}\n",
       ".cython.score-3 {background-color: #FFFFc4;}\n",
       ".cython.score-4 {background-color: #FFFFb6;}\n",
       ".cython.score-5 {background-color: #FFFFaa;}\n",
       ".cython.score-6 {background-color: #FFFF9f;}\n",
       ".cython.score-7 {background-color: #FFFF96;}\n",
       ".cython.score-8 {background-color: #FFFF8d;}\n",
       ".cython.score-9 {background-color: #FFFF86;}\n",
       ".cython.score-10 {background-color: #FFFF7f;}\n",
       ".cython.score-11 {background-color: #FFFF79;}\n",
       ".cython.score-12 {background-color: #FFFF73;}\n",
       ".cython.score-13 {background-color: #FFFF6e;}\n",
       ".cython.score-14 {background-color: #FFFF6a;}\n",
       ".cython.score-15 {background-color: #FFFF66;}\n",
       ".cython.score-16 {background-color: #FFFF62;}\n",
       ".cython.score-17 {background-color: #FFFF5e;}\n",
       ".cython.score-18 {background-color: #FFFF5b;}\n",
       ".cython.score-19 {background-color: #FFFF57;}\n",
       ".cython.score-20 {background-color: #FFFF55;}\n",
       ".cython.score-21 {background-color: #FFFF52;}\n",
       ".cython.score-22 {background-color: #FFFF4f;}\n",
       ".cython.score-23 {background-color: #FFFF4d;}\n",
       ".cython.score-24 {background-color: #FFFF4b;}\n",
       ".cython.score-25 {background-color: #FFFF48;}\n",
       ".cython.score-26 {background-color: #FFFF46;}\n",
       ".cython.score-27 {background-color: #FFFF44;}\n",
       ".cython.score-28 {background-color: #FFFF43;}\n",
       ".cython.score-29 {background-color: #FFFF41;}\n",
       ".cython.score-30 {background-color: #FFFF3f;}\n",
       ".cython.score-31 {background-color: #FFFF3e;}\n",
       ".cython.score-32 {background-color: #FFFF3c;}\n",
       ".cython.score-33 {background-color: #FFFF3b;}\n",
       ".cython.score-34 {background-color: #FFFF39;}\n",
       ".cython.score-35 {background-color: #FFFF38;}\n",
       ".cython.score-36 {background-color: #FFFF37;}\n",
       ".cython.score-37 {background-color: #FFFF36;}\n",
       ".cython.score-38 {background-color: #FFFF35;}\n",
       ".cython.score-39 {background-color: #FFFF34;}\n",
       ".cython.score-40 {background-color: #FFFF33;}\n",
       ".cython.score-41 {background-color: #FFFF32;}\n",
       ".cython.score-42 {background-color: #FFFF31;}\n",
       ".cython.score-43 {background-color: #FFFF30;}\n",
       ".cython.score-44 {background-color: #FFFF2f;}\n",
       ".cython.score-45 {background-color: #FFFF2e;}\n",
       ".cython.score-46 {background-color: #FFFF2d;}\n",
       ".cython.score-47 {background-color: #FFFF2c;}\n",
       ".cython.score-48 {background-color: #FFFF2b;}\n",
       ".cython.score-49 {background-color: #FFFF2b;}\n",
       ".cython.score-50 {background-color: #FFFF2a;}\n",
       ".cython.score-51 {background-color: #FFFF29;}\n",
       ".cython.score-52 {background-color: #FFFF29;}\n",
       ".cython.score-53 {background-color: #FFFF28;}\n",
       ".cython.score-54 {background-color: #FFFF27;}\n",
       ".cython.score-55 {background-color: #FFFF27;}\n",
       ".cython.score-56 {background-color: #FFFF26;}\n",
       ".cython.score-57 {background-color: #FFFF26;}\n",
       ".cython.score-58 {background-color: #FFFF25;}\n",
       ".cython.score-59 {background-color: #FFFF24;}\n",
       ".cython.score-60 {background-color: #FFFF24;}\n",
       ".cython.score-61 {background-color: #FFFF23;}\n",
       ".cython.score-62 {background-color: #FFFF23;}\n",
       ".cython.score-63 {background-color: #FFFF22;}\n",
       ".cython.score-64 {background-color: #FFFF22;}\n",
       ".cython.score-65 {background-color: #FFFF22;}\n",
       ".cython.score-66 {background-color: #FFFF21;}\n",
       ".cython.score-67 {background-color: #FFFF21;}\n",
       ".cython.score-68 {background-color: #FFFF20;}\n",
       ".cython.score-69 {background-color: #FFFF20;}\n",
       ".cython.score-70 {background-color: #FFFF1f;}\n",
       ".cython.score-71 {background-color: #FFFF1f;}\n",
       ".cython.score-72 {background-color: #FFFF1f;}\n",
       ".cython.score-73 {background-color: #FFFF1e;}\n",
       ".cython.score-74 {background-color: #FFFF1e;}\n",
       ".cython.score-75 {background-color: #FFFF1e;}\n",
       ".cython.score-76 {background-color: #FFFF1d;}\n",
       ".cython.score-77 {background-color: #FFFF1d;}\n",
       ".cython.score-78 {background-color: #FFFF1c;}\n",
       ".cython.score-79 {background-color: #FFFF1c;}\n",
       ".cython.score-80 {background-color: #FFFF1c;}\n",
       ".cython.score-81 {background-color: #FFFF1c;}\n",
       ".cython.score-82 {background-color: #FFFF1b;}\n",
       ".cython.score-83 {background-color: #FFFF1b;}\n",
       ".cython.score-84 {background-color: #FFFF1b;}\n",
       ".cython.score-85 {background-color: #FFFF1a;}\n",
       ".cython.score-86 {background-color: #FFFF1a;}\n",
       ".cython.score-87 {background-color: #FFFF1a;}\n",
       ".cython.score-88 {background-color: #FFFF1a;}\n",
       ".cython.score-89 {background-color: #FFFF19;}\n",
       ".cython.score-90 {background-color: #FFFF19;}\n",
       ".cython.score-91 {background-color: #FFFF19;}\n",
       ".cython.score-92 {background-color: #FFFF19;}\n",
       ".cython.score-93 {background-color: #FFFF18;}\n",
       ".cython.score-94 {background-color: #FFFF18;}\n",
       ".cython.score-95 {background-color: #FFFF18;}\n",
       ".cython.score-96 {background-color: #FFFF18;}\n",
       ".cython.score-97 {background-color: #FFFF17;}\n",
       ".cython.score-98 {background-color: #FFFF17;}\n",
       ".cython.score-99 {background-color: #FFFF17;}\n",
       ".cython.score-100 {background-color: #FFFF17;}\n",
       ".cython.score-101 {background-color: #FFFF16;}\n",
       ".cython.score-102 {background-color: #FFFF16;}\n",
       ".cython.score-103 {background-color: #FFFF16;}\n",
       ".cython.score-104 {background-color: #FFFF16;}\n",
       ".cython.score-105 {background-color: #FFFF16;}\n",
       ".cython.score-106 {background-color: #FFFF15;}\n",
       ".cython.score-107 {background-color: #FFFF15;}\n",
       ".cython.score-108 {background-color: #FFFF15;}\n",
       ".cython.score-109 {background-color: #FFFF15;}\n",
       ".cython.score-110 {background-color: #FFFF15;}\n",
       ".cython.score-111 {background-color: #FFFF15;}\n",
       ".cython.score-112 {background-color: #FFFF14;}\n",
       ".cython.score-113 {background-color: #FFFF14;}\n",
       ".cython.score-114 {background-color: #FFFF14;}\n",
       ".cython.score-115 {background-color: #FFFF14;}\n",
       ".cython.score-116 {background-color: #FFFF14;}\n",
       ".cython.score-117 {background-color: #FFFF14;}\n",
       ".cython.score-118 {background-color: #FFFF13;}\n",
       ".cython.score-119 {background-color: #FFFF13;}\n",
       ".cython.score-120 {background-color: #FFFF13;}\n",
       ".cython.score-121 {background-color: #FFFF13;}\n",
       ".cython.score-122 {background-color: #FFFF13;}\n",
       ".cython.score-123 {background-color: #FFFF13;}\n",
       ".cython.score-124 {background-color: #FFFF13;}\n",
       ".cython.score-125 {background-color: #FFFF12;}\n",
       ".cython.score-126 {background-color: #FFFF12;}\n",
       ".cython.score-127 {background-color: #FFFF12;}\n",
       ".cython.score-128 {background-color: #FFFF12;}\n",
       ".cython.score-129 {background-color: #FFFF12;}\n",
       ".cython.score-130 {background-color: #FFFF12;}\n",
       ".cython.score-131 {background-color: #FFFF12;}\n",
       ".cython.score-132 {background-color: #FFFF11;}\n",
       ".cython.score-133 {background-color: #FFFF11;}\n",
       ".cython.score-134 {background-color: #FFFF11;}\n",
       ".cython.score-135 {background-color: #FFFF11;}\n",
       ".cython.score-136 {background-color: #FFFF11;}\n",
       ".cython.score-137 {background-color: #FFFF11;}\n",
       ".cython.score-138 {background-color: #FFFF11;}\n",
       ".cython.score-139 {background-color: #FFFF11;}\n",
       ".cython.score-140 {background-color: #FFFF11;}\n",
       ".cython.score-141 {background-color: #FFFF10;}\n",
       ".cython.score-142 {background-color: #FFFF10;}\n",
       ".cython.score-143 {background-color: #FFFF10;}\n",
       ".cython.score-144 {background-color: #FFFF10;}\n",
       ".cython.score-145 {background-color: #FFFF10;}\n",
       ".cython.score-146 {background-color: #FFFF10;}\n",
       ".cython.score-147 {background-color: #FFFF10;}\n",
       ".cython.score-148 {background-color: #FFFF10;}\n",
       ".cython.score-149 {background-color: #FFFF10;}\n",
       ".cython.score-150 {background-color: #FFFF0f;}\n",
       ".cython.score-151 {background-color: #FFFF0f;}\n",
       ".cython.score-152 {background-color: #FFFF0f;}\n",
       ".cython.score-153 {background-color: #FFFF0f;}\n",
       ".cython.score-154 {background-color: #FFFF0f;}\n",
       ".cython.score-155 {background-color: #FFFF0f;}\n",
       ".cython.score-156 {background-color: #FFFF0f;}\n",
       ".cython.score-157 {background-color: #FFFF0f;}\n",
       ".cython.score-158 {background-color: #FFFF0f;}\n",
       ".cython.score-159 {background-color: #FFFF0f;}\n",
       ".cython.score-160 {background-color: #FFFF0f;}\n",
       ".cython.score-161 {background-color: #FFFF0e;}\n",
       ".cython.score-162 {background-color: #FFFF0e;}\n",
       ".cython.score-163 {background-color: #FFFF0e;}\n",
       ".cython.score-164 {background-color: #FFFF0e;}\n",
       ".cython.score-165 {background-color: #FFFF0e;}\n",
       ".cython.score-166 {background-color: #FFFF0e;}\n",
       ".cython.score-167 {background-color: #FFFF0e;}\n",
       ".cython.score-168 {background-color: #FFFF0e;}\n",
       ".cython.score-169 {background-color: #FFFF0e;}\n",
       ".cython.score-170 {background-color: #FFFF0e;}\n",
       ".cython.score-171 {background-color: #FFFF0e;}\n",
       ".cython.score-172 {background-color: #FFFF0e;}\n",
       ".cython.score-173 {background-color: #FFFF0d;}\n",
       ".cython.score-174 {background-color: #FFFF0d;}\n",
       ".cython.score-175 {background-color: #FFFF0d;}\n",
       ".cython.score-176 {background-color: #FFFF0d;}\n",
       ".cython.score-177 {background-color: #FFFF0d;}\n",
       ".cython.score-178 {background-color: #FFFF0d;}\n",
       ".cython.score-179 {background-color: #FFFF0d;}\n",
       ".cython.score-180 {background-color: #FFFF0d;}\n",
       ".cython.score-181 {background-color: #FFFF0d;}\n",
       ".cython.score-182 {background-color: #FFFF0d;}\n",
       ".cython.score-183 {background-color: #FFFF0d;}\n",
       ".cython.score-184 {background-color: #FFFF0d;}\n",
       ".cython.score-185 {background-color: #FFFF0d;}\n",
       ".cython.score-186 {background-color: #FFFF0d;}\n",
       ".cython.score-187 {background-color: #FFFF0c;}\n",
       ".cython.score-188 {background-color: #FFFF0c;}\n",
       ".cython.score-189 {background-color: #FFFF0c;}\n",
       ".cython.score-190 {background-color: #FFFF0c;}\n",
       ".cython.score-191 {background-color: #FFFF0c;}\n",
       ".cython.score-192 {background-color: #FFFF0c;}\n",
       ".cython.score-193 {background-color: #FFFF0c;}\n",
       ".cython.score-194 {background-color: #FFFF0c;}\n",
       ".cython.score-195 {background-color: #FFFF0c;}\n",
       ".cython.score-196 {background-color: #FFFF0c;}\n",
       ".cython.score-197 {background-color: #FFFF0c;}\n",
       ".cython.score-198 {background-color: #FFFF0c;}\n",
       ".cython.score-199 {background-color: #FFFF0c;}\n",
       ".cython.score-200 {background-color: #FFFF0c;}\n",
       ".cython.score-201 {background-color: #FFFF0c;}\n",
       ".cython.score-202 {background-color: #FFFF0c;}\n",
       ".cython.score-203 {background-color: #FFFF0b;}\n",
       ".cython.score-204 {background-color: #FFFF0b;}\n",
       ".cython.score-205 {background-color: #FFFF0b;}\n",
       ".cython.score-206 {background-color: #FFFF0b;}\n",
       ".cython.score-207 {background-color: #FFFF0b;}\n",
       ".cython.score-208 {background-color: #FFFF0b;}\n",
       ".cython.score-209 {background-color: #FFFF0b;}\n",
       ".cython.score-210 {background-color: #FFFF0b;}\n",
       ".cython.score-211 {background-color: #FFFF0b;}\n",
       ".cython.score-212 {background-color: #FFFF0b;}\n",
       ".cython.score-213 {background-color: #FFFF0b;}\n",
       ".cython.score-214 {background-color: #FFFF0b;}\n",
       ".cython.score-215 {background-color: #FFFF0b;}\n",
       ".cython.score-216 {background-color: #FFFF0b;}\n",
       ".cython.score-217 {background-color: #FFFF0b;}\n",
       ".cython.score-218 {background-color: #FFFF0b;}\n",
       ".cython.score-219 {background-color: #FFFF0b;}\n",
       ".cython.score-220 {background-color: #FFFF0b;}\n",
       ".cython.score-221 {background-color: #FFFF0b;}\n",
       ".cython.score-222 {background-color: #FFFF0a;}\n",
       ".cython.score-223 {background-color: #FFFF0a;}\n",
       ".cython.score-224 {background-color: #FFFF0a;}\n",
       ".cython.score-225 {background-color: #FFFF0a;}\n",
       ".cython.score-226 {background-color: #FFFF0a;}\n",
       ".cython.score-227 {background-color: #FFFF0a;}\n",
       ".cython.score-228 {background-color: #FFFF0a;}\n",
       ".cython.score-229 {background-color: #FFFF0a;}\n",
       ".cython.score-230 {background-color: #FFFF0a;}\n",
       ".cython.score-231 {background-color: #FFFF0a;}\n",
       ".cython.score-232 {background-color: #FFFF0a;}\n",
       ".cython.score-233 {background-color: #FFFF0a;}\n",
       ".cython.score-234 {background-color: #FFFF0a;}\n",
       ".cython.score-235 {background-color: #FFFF0a;}\n",
       ".cython.score-236 {background-color: #FFFF0a;}\n",
       ".cython.score-237 {background-color: #FFFF0a;}\n",
       ".cython.score-238 {background-color: #FFFF0a;}\n",
       ".cython.score-239 {background-color: #FFFF0a;}\n",
       ".cython.score-240 {background-color: #FFFF0a;}\n",
       ".cython.score-241 {background-color: #FFFF0a;}\n",
       ".cython.score-242 {background-color: #FFFF0a;}\n",
       ".cython.score-243 {background-color: #FFFF0a;}\n",
       ".cython.score-244 {background-color: #FFFF0a;}\n",
       ".cython.score-245 {background-color: #FFFF0a;}\n",
       ".cython.score-246 {background-color: #FFFF09;}\n",
       ".cython.score-247 {background-color: #FFFF09;}\n",
       ".cython.score-248 {background-color: #FFFF09;}\n",
       ".cython.score-249 {background-color: #FFFF09;}\n",
       ".cython.score-250 {background-color: #FFFF09;}\n",
       ".cython.score-251 {background-color: #FFFF09;}\n",
       ".cython.score-252 {background-color: #FFFF09;}\n",
       ".cython.score-253 {background-color: #FFFF09;}\n",
       ".cython.score-254 {background-color: #FFFF09;}\n",
       ".cython .hll { background-color: #ffffcc }\n",
       ".cython  { background: #f8f8f8; }\n",
       ".cython .c { color: #408080; font-style: italic } /* Comment */\n",
       ".cython .err { border: 1px solid #FF0000 } /* Error */\n",
       ".cython .k { color: #008000; font-weight: bold } /* Keyword */\n",
       ".cython .o { color: #666666 } /* Operator */\n",
       ".cython .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n",
       ".cython .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n",
       ".cython .cp { color: #BC7A00 } /* Comment.Preproc */\n",
       ".cython .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n",
       ".cython .c1 { color: #408080; font-style: italic } /* Comment.Single */\n",
       ".cython .cs { color: #408080; font-style: italic } /* Comment.Special */\n",
       ".cython .gd { color: #A00000 } /* Generic.Deleted */\n",
       ".cython .ge { font-style: italic } /* Generic.Emph */\n",
       ".cython .gr { color: #FF0000 } /* Generic.Error */\n",
       ".cython .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n",
       ".cython .gi { color: #00A000 } /* Generic.Inserted */\n",
       ".cython .go { color: #888888 } /* Generic.Output */\n",
       ".cython .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n",
       ".cython .gs { font-weight: bold } /* Generic.Strong */\n",
       ".cython .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n",
       ".cython .gt { color: #0044DD } /* Generic.Traceback */\n",
       ".cython .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n",
       ".cython .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n",
       ".cython .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n",
       ".cython .kp { color: #008000 } /* Keyword.Pseudo */\n",
       ".cython .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n",
       ".cython .kt { color: #B00040 } /* Keyword.Type */\n",
       ".cython .m { color: #666666 } /* Literal.Number */\n",
       ".cython .s { color: #BA2121 } /* Literal.String */\n",
       ".cython .na { color: #7D9029 } /* Name.Attribute */\n",
       ".cython .nb { color: #008000 } /* Name.Builtin */\n",
       ".cython .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n",
       ".cython .no { color: #880000 } /* Name.Constant */\n",
       ".cython .nd { color: #AA22FF } /* Name.Decorator */\n",
       ".cython .ni { color: #999999; font-weight: bold } /* Name.Entity */\n",
       ".cython .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n",
       ".cython .nf { color: #0000FF } /* Name.Function */\n",
       ".cython .nl { color: #A0A000 } /* Name.Label */\n",
       ".cython .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n",
       ".cython .nt { color: #008000; font-weight: bold } /* Name.Tag */\n",
       ".cython .nv { color: #19177C } /* Name.Variable */\n",
       ".cython .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n",
       ".cython .w { color: #bbbbbb } /* Text.Whitespace */\n",
       ".cython .mb { color: #666666 } /* Literal.Number.Bin */\n",
       ".cython .mf { color: #666666 } /* Literal.Number.Float */\n",
       ".cython .mh { color: #666666 } /* Literal.Number.Hex */\n",
       ".cython .mi { color: #666666 } /* Literal.Number.Integer */\n",
       ".cython .mo { color: #666666 } /* Literal.Number.Oct */\n",
       ".cython .sb { color: #BA2121 } /* Literal.String.Backtick */\n",
       ".cython .sc { color: #BA2121 } /* Literal.String.Char */\n",
       ".cython .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n",
       ".cython .s2 { color: #BA2121 } /* Literal.String.Double */\n",
       ".cython .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n",
       ".cython .sh { color: #BA2121 } /* Literal.String.Heredoc */\n",
       ".cython .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n",
       ".cython .sx { color: #008000 } /* Literal.String.Other */\n",
       ".cython .sr { color: #BB6688 } /* Literal.String.Regex */\n",
       ".cython .s1 { color: #BA2121 } /* Literal.String.Single */\n",
       ".cython .ss { color: #19177C } /* Literal.String.Symbol */\n",
       ".cython .bp { color: #008000 } /* Name.Builtin.Pseudo */\n",
       ".cython .vc { color: #19177C } /* Name.Variable.Class */\n",
       ".cython .vg { color: #19177C } /* Name.Variable.Global */\n",
       ".cython .vi { color: #19177C } /* Name.Variable.Instance */\n",
       ".cython .il { color: #666666 } /* Literal.Number.Integer.Long */\n",
       "    </style>\n",
       "    <script>\n",
       "    function toggleDiv(id) {\n",
       "        theDiv = id.nextElementSibling\n",
       "        if (theDiv.style.display != 'block') theDiv.style.display = 'block';\n",
       "        else theDiv.style.display = 'none';\n",
       "    }\n",
       "    </script>\n",
       "</head>\n",
       "<body class=\"cython\">\n",
       "<p><span style=\"border-bottom: solid 1px grey;\">Generated by Cython 0.25.2</span></p>\n",
       "<p>\n",
       "    <span style=\"background-color: #FFFF00\">Yellow lines</span> hint at Python interaction.<br />\n",
       "    Click on a line that starts with a \"<code>+</code>\" to see the C code that Cython generated for it.\n",
       "</p>\n",
       "<div class=\"cython\"><pre class=\"cython line score-11\" onclick='toggleDiv(this)'>+<span class=\"\">01</span>: <span class=\"k\">cimport</span> <span class=\"nn\">cython</span></pre>\n",
       "<pre class='cython code score-11 '>  __pyx_t_1 = <span class='py_c_api'>PyDict_New</span>(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_test, __pyx_t_1) &lt; 0) __PYX_ERR(0, 1, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "</pre><pre class=\"cython line score-8\" onclick='toggleDiv(this)'>+<span class=\"\">02</span>: <span class=\"k\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span></pre>\n",
       "<pre class='cython code score-8 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_np, __pyx_t_1) &lt; 0) __PYX_ERR(0, 2, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">03</span>: <span class=\"k\">cimport</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">cnp</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">04</span>: <span class=\"k\">from</span> <span class=\"nn\">cpython</span> <span class=\"k\">cimport</span> <span class=\"nb\">bool</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">05</span>: <span class=\"k\">from</span> <span class=\"nn\">libc.math</span> <span class=\"k\">cimport</span> <span class=\"n\">ceil</span> <span class=\"k\">as</span> <span class=\"n\">Cceil</span><span class=\"p\">,</span> <span class=\"nb\">abs</span> <span class=\"k\">as</span> <span class=\"n\">Cabs</span><span class=\"p\">,</span> <span class=\"n\">floor</span> <span class=\"k\">as</span> <span class=\"n\">Cfloor</span><span class=\"p\">,</span> <span class=\"nb\">round</span> <span class=\"k\">as</span> <span class=\"n\">Cround</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">06</span>: </pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">07</span>: <span class=\"c\">#@cython.cdivision(True)</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">08</span>: <span class=\"c\">#@cython.wraparound(False)</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">09</span>: <span class=\"c\">#@cython.boundscheck(False)</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">10</span>: </pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">11</span>: <span class=\"c\"># Preliminary function to get optimal resolution from input resolution</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">12</span>: <span class=\"nd\">@cython</span><span class=\"o\">.</span><span class=\"n\">cdivision</span><span class=\"p\">(</span><span class=\"bp\">True</span><span class=\"p\">)</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">13</span>: <span class=\"nd\">@cython</span><span class=\"o\">.</span><span class=\"n\">wraparound</span><span class=\"p\">(</span><span class=\"bp\">False</span><span class=\"p\">)</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">14</span>: <span class=\"nd\">@cython</span><span class=\"o\">.</span><span class=\"n\">boundscheck</span><span class=\"p\">(</span><span class=\"bp\">False</span><span class=\"p\">)</span></pre>\n",
       "<pre class=\"cython line score-90\" onclick='toggleDiv(this)'>+<span class=\"\">15</span>: <span class=\"k\">def</span> <span class=\"nf\">_Ves_mesh_dlfromL_cython</span><span class=\"p\">(</span><span class=\"n\">double</span><span class=\"p\">[::</span><span class=\"mf\">1</span><span class=\"p\">]</span> <span class=\"n\">LMinMax</span><span class=\"p\">,</span> <span class=\"n\">double</span> <span class=\"n\">dL</span><span class=\"p\">,</span> <span class=\"n\">DL</span><span class=\"o\">=</span><span class=\"bp\">None</span><span class=\"p\">,</span> <span class=\"n\">double</span> <span class=\"n\">margin</span><span class=\"o\">=</span><span class=\"mf\">1.e-9</span><span class=\"p\">):</span></pre>\n",
       "<pre class='cython code score-90 '>/* Python wrapper */\n",
       "static PyObject *__pyx_pw_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_1_Ves_mesh_dlfromL_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
       "static char __pyx_doc_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771__Ves_mesh_dlfromL_cython[] = \" Get the actual reolution from the desired resolution and MinMax and limits \";\n",
       "static PyMethodDef __pyx_mdef_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_1_Ves_mesh_dlfromL_cython = {\"_Ves_mesh_dlfromL_cython\", (PyCFunction)__pyx_pw_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_1_Ves_mesh_dlfromL_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771__Ves_mesh_dlfromL_cython};\n",
       "static PyObject *__pyx_pw_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_1_Ves_mesh_dlfromL_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
       "  __Pyx_memviewslice __pyx_v_LMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
       "  double __pyx_v_dL;\n",
       "  PyObject *__pyx_v_DL = 0;\n",
       "  double __pyx_v_margin;\n",
       "  PyObject *__pyx_r = 0;\n",
       "  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>\n",
       "  <span class='refnanny'>__Pyx_RefNannySetupContext</span>(\"_Ves_mesh_dlfromL_cython (wrapper)\", 0);\n",
       "  {\n",
       "    static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_LMinMax,&amp;__pyx_n_s_dL,&amp;__pyx_n_s_DL,&amp;__pyx_n_s_margin,0};\n",
       "    PyObject* values[4] = {0,0,0,0};\n",
       "    values[2] = ((PyObject *)Py_None);\n",
       "    if (unlikely(__pyx_kwds)) {\n",
       "      Py_ssize_t kw_args;\n",
       "      const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);\n",
       "      switch (pos_args) {\n",
       "        case  4: values[3] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 3);\n",
       "        case  3: values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);\n",
       "        case  2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);\n",
       "        case  1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);\n",
       "        case  0: break;\n",
       "        default: goto __pyx_L5_argtuple_error;\n",
       "      }\n",
       "      kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);\n",
       "      switch (pos_args) {\n",
       "        case  0:\n",
       "        if (likely((values[0] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_LMinMax)) != 0)) kw_args--;\n",
       "        else goto __pyx_L5_argtuple_error;\n",
       "        case  1:\n",
       "        if (likely((values[1] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;\n",
       "        else {\n",
       "          <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"_Ves_mesh_dlfromL_cython\", 0, 2, 4, 1); __PYX_ERR(0, 15, __pyx_L3_error)\n",
       "        }\n",
       "        case  2:\n",
       "        if (kw_args &gt; 0) {\n",
       "          PyObject* value = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_DL);\n",
       "          if (value) { values[2] = value; kw_args--; }\n",
       "        }\n",
       "        case  3:\n",
       "        if (kw_args &gt; 0) {\n",
       "          PyObject* value = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_margin);\n",
       "          if (value) { values[3] = value; kw_args--; }\n",
       "        }\n",
       "      }\n",
       "      if (unlikely(kw_args &gt; 0)) {\n",
       "        if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, \"_Ves_mesh_dlfromL_cython\") &lt; 0)) __PYX_ERR(0, 15, __pyx_L3_error)\n",
       "      }\n",
       "    } else {\n",
       "      switch (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)) {\n",
       "        case  4: values[3] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 3);\n",
       "        case  3: values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);\n",
       "        case  2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);\n",
       "        values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);\n",
       "        break;\n",
       "        default: goto __pyx_L5_argtuple_error;\n",
       "      }\n",
       "    }\n",
       "    __pyx_v_LMinMax = <span class='pyx_c_api'>__Pyx_PyObject_to_MemoryviewSlice_dc_double</span>(values[0]); if (unlikely(!__pyx_v_LMinMax.memview)) __PYX_ERR(0, 15, __pyx_L3_error)\n",
       "    __pyx_v_dL = __pyx_<span class='py_c_api'>PyFloat_AsDouble</span>(values[1]); if (unlikely((__pyx_v_dL == (double)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) __PYX_ERR(0, 15, __pyx_L3_error)\n",
       "    __pyx_v_DL = values[2];\n",
       "    if (values[3]) {\n",
       "      __pyx_v_margin = __pyx_<span class='py_c_api'>PyFloat_AsDouble</span>(values[3]); if (unlikely((__pyx_v_margin == (double)-1) &amp;&amp; <span class='py_c_api'>PyErr_Occurred</span>())) __PYX_ERR(0, 15, __pyx_L3_error)\n",
       "    } else {\n",
       "      __pyx_v_margin = ((double)1.e-9);\n",
       "    }\n",
       "  }\n",
       "  goto __pyx_L4_argument_unpacking_done;\n",
       "  __pyx_L5_argtuple_error:;\n",
       "  <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"_Ves_mesh_dlfromL_cython\", 0, 2, 4, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); __PYX_ERR(0, 15, __pyx_L3_error)\n",
       "  __pyx_L3_error:;\n",
       "  <span class='pyx_c_api'>__Pyx_AddTraceback</span>(\"_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771._Ves_mesh_dlfromL_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
       "  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n",
       "  return NULL;\n",
       "  __pyx_L4_argument_unpacking_done:;\n",
       "  __pyx_r = __pyx_pf_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771__Ves_mesh_dlfromL_cython(__pyx_self, __pyx_v_LMinMax, __pyx_v_dL, __pyx_v_DL, __pyx_v_margin);\n",
       "\n",
       "  /* function exit code */\n",
       "  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n",
       "  return __pyx_r;\n",
       "}\n",
       "\n",
       "static PyObject *__pyx_pf_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771__Ves_mesh_dlfromL_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_LMinMax, double __pyx_v_dL, PyObject *__pyx_v_DL, double __pyx_v_margin) {\n",
       "  double __pyx_v_N;\n",
       "  double __pyx_v_dLr;\n",
       "  __Pyx_memviewslice __pyx_v_DLc = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
       "  double __pyx_v_nL0;\n",
       "  double __pyx_v_nL1;\n",
       "  double __pyx_v_abs0;\n",
       "  double __pyx_v_abs1;\n",
       "  PyObject *__pyx_v_indL = NULL;\n",
       "  PyObject *__pyx_v_L = NULL;\n",
       "  PyObject *__pyx_r = NULL;\n",
       "  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>\n",
       "  <span class='refnanny'>__Pyx_RefNannySetupContext</span>(\"_Ves_mesh_dlfromL_cython\", 0);\n",
       "/* … */\n",
       "  /* function exit code */\n",
       "  __pyx_L1_error:;\n",
       "  __PYX_XDEC_MEMVIEW(&amp;__pyx_t_7, 1);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_20);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_21);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_22);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_23);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_24);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_25);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_27);\n",
       "  <span class='pyx_c_api'>__Pyx_AddTraceback</span>(\"_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771._Ves_mesh_dlfromL_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
       "  __pyx_r = NULL;\n",
       "  __pyx_L0:;\n",
       "  __PYX_XDEC_MEMVIEW(&amp;__pyx_v_DLc, 1);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_indL);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_L);\n",
       "  __PYX_XDEC_MEMVIEW(&amp;__pyx_v_LMinMax, 1);\n",
       "  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);\n",
       "  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n",
       "  return __pyx_r;\n",
       "}\n",
       "/* … */\n",
       "  __pyx_tuple__23 = <span class='py_c_api'>PyTuple_Pack</span>(13, __pyx_n_s_LMinMax, __pyx_n_s_dL, __pyx_n_s_DL, __pyx_n_s_margin, __pyx_n_s_N, __pyx_n_s_dLr, __pyx_n_s_DLc, __pyx_n_s_nL0, __pyx_n_s_nL1, __pyx_n_s_abs0, __pyx_n_s_abs1, __pyx_n_s_indL, __pyx_n_s_L); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 15, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__23);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__23);\n",
       "/* … */\n",
       "  __pyx_t_1 = PyCFunction_NewEx(&amp;__pyx_mdef_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_1_Ves_mesh_dlfromL_cython, NULL, __pyx_n_s_cython_magic_1e9ae0b4a9168851b2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_Ves_mesh_dlfromL_cython, __pyx_t_1) &lt; 0) __PYX_ERR(0, 15, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_codeobj__24 = (PyObject*)<span class='pyx_c_api'>__Pyx_PyCode_New</span>(4, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Home_DV226270_cache_ipython_cyt, __pyx_n_s_Ves_mesh_dlfromL_cython, 15, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 15, __pyx_L1_error)\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">16</span>:     <span class=\"sd\">&quot;&quot;&quot; Get the actual reolution from the desired resolution and MinMax and limits &quot;&quot;&quot;</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">17</span>:     <span class=\"c\"># Get the number of mesh elements in LMinMax</span></pre>\n",
       "<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">18</span>:     <span class=\"k\">cdef</span> <span class=\"kt\">double</span> <span class=\"nf\">N</span> <span class=\"o\">=</span> <span class=\"n\">Cceil</span><span class=\"p\">((</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">dL</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-0 '>  __pyx_t_1 = 1;\n",
       "  __pyx_t_2 = 0;\n",
       "  __pyx_v_N = ceil((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_1)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_2)) )))) / __pyx_v_dL));\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">19</span>:     <span class=\"c\"># Derive the real (effective) resolution</span></pre>\n",
       "<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">20</span>:     <span class=\"k\">cdef</span> <span class=\"kt\">double</span> <span class=\"nf\">dLr</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">N</span></pre>\n",
       "<pre class='cython code score-0 '>  __pyx_t_3 = 1;\n",
       "  __pyx_t_4 = 0;\n",
       "  __pyx_v_dLr = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_3)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_4)) )))) / __pyx_v_N);\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">21</span>:     <span class=\"c\"># Get desired limits if any</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">22</span>:     <span class=\"k\">cdef</span> <span class=\"kt\">double</span>[<span class=\"p\">::</span><span class=\"mf\">1</span><span class=\"p\">]</span> <span class=\"n\">DLc</span></pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">23</span>:     <span class=\"k\">cdef</span> <span class=\"kt\">double</span> <span class=\"nf\">nL0</span><span class=\"p\">,</span> <span class=\"nf\">nL1</span><span class=\"p\">,</span> <span class=\"nf\">abs0</span><span class=\"p\">,</span> <span class=\"nf\">abs1</span></pre>\n",
       "<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">24</span>:     <span class=\"k\">if</span> <span class=\"n\">DL</span> <span class=\"ow\">is</span> <span class=\"bp\">None</span><span class=\"p\">:</span></pre>\n",
       "<pre class='cython code score-0 '>  __pyx_t_5 = (__pyx_v_DL == Py_None);\n",
       "  __pyx_t_6 = (__pyx_t_5 != 0);\n",
       "  if (__pyx_t_6) {\n",
       "/* … */\n",
       "    goto __pyx_L3;\n",
       "  }\n",
       "</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">25</span>:         <span class=\"n\">DLc</span> <span class=\"o\">=</span> <span class=\"n\">LMinMax</span></pre>\n",
       "<pre class='cython code score-0 '>    __PYX_INC_MEMVIEW(&amp;__pyx_v_LMinMax, 0);\n",
       "    __pyx_v_DLc = __pyx_v_LMinMax;\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">26</span>:     <span class=\"k\">else</span><span class=\"p\">:</span></pre>\n",
       "<pre class=\"cython line score-2\" onclick='toggleDiv(this)'>+<span class=\"\">27</span>:         <span class=\"n\">DLc</span> <span class=\"o\">=</span> <span class=\"n\">DL</span></pre>\n",
       "<pre class='cython code score-2 '>  /*else*/ {\n",
       "    __pyx_t_7 = <span class='pyx_c_api'>__Pyx_PyObject_to_MemoryviewSlice_dc_double</span>(__pyx_v_DL);\n",
       "    if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
       "    __pyx_v_DLc = __pyx_t_7;\n",
       "    __pyx_t_7.memview = NULL;\n",
       "    __pyx_t_7.data = NULL;\n",
       "  }\n",
       "  __pyx_L3:;\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">28</span>:     <span class=\"c\"># Get the extreme indices of the mesh elements that really need to be created within those limits</span></pre>\n",
       "<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">29</span>:     <span class=\"n\">abs0</span> <span class=\"o\">=</span> <span class=\"n\">Cabs</span><span class=\"p\">(</span><span class=\"n\">DLc</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span></pre>\n",
       "<pre class='cython code score-0 '>  __pyx_t_8 = 0;\n",
       "  __pyx_t_9 = 0;\n",
       "  __pyx_v_abs0 = fabs(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_8)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_9)) )))));\n",
       "</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">30</span>:     <span class=\"k\">if</span> <span class=\"n\">abs0</span><span class=\"o\">-</span><span class=\"n\">dLr</span><span class=\"o\">*</span><span class=\"n\">Cfloor</span><span class=\"p\">(</span><span class=\"n\">abs0</span><span class=\"o\">/</span><span class=\"n\">dLr</span><span class=\"p\">)</span><span class=\"o\">&lt;</span><span class=\"n\">margin</span><span class=\"o\">*</span><span class=\"n\">dLr</span><span class=\"p\">:</span></pre>\n",
       "<pre class='cython code score-0 '>  __pyx_t_6 = (((__pyx_v_abs0 - (__pyx_v_dLr * floor((__pyx_v_abs0 / __pyx_v_dLr)))) &lt; (__pyx_v_margin * __pyx_v_dLr)) != 0);\n",
       "  if (__pyx_t_6) {\n",
       "/* … */\n",
       "    goto __pyx_L4;\n",
       "  }\n",
       "</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">31</span>:         <span class=\"n\">nL0</span> <span class=\"o\">=</span> <span class=\"n\">Cround</span><span class=\"p\">((</span><span class=\"n\">DLc</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">dLr</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-0 '>    __pyx_t_10 = 0;\n",
       "    __pyx_t_11 = 0;\n",
       "    __pyx_v_nL0 = round((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_10)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_11)) )))) / __pyx_v_dLr));\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">32</span>:     <span class=\"k\">else</span><span class=\"p\">:</span></pre>\n",
       "<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">33</span>:         <span class=\"n\">nL0</span> <span class=\"o\">=</span> <span class=\"n\">Cfloor</span><span class=\"p\">((</span><span class=\"n\">DLc</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">dLr</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-0 '>  /*else*/ {\n",
       "    __pyx_t_12 = 0;\n",
       "    __pyx_t_13 = 0;\n",
       "    __pyx_v_nL0 = floor((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_12)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_13)) )))) / __pyx_v_dLr));\n",
       "  }\n",
       "  __pyx_L4:;\n",
       "</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">34</span>:     <span class=\"n\">abs1</span> <span class=\"o\">=</span> <span class=\"n\">Cabs</span><span class=\"p\">(</span><span class=\"n\">DLc</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span></pre>\n",
       "<pre class='cython code score-0 '>  __pyx_t_14 = 1;\n",
       "  __pyx_t_15 = 0;\n",
       "  __pyx_v_abs1 = fabs(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_14)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_15)) )))));\n",
       "</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">35</span>:     <span class=\"k\">if</span> <span class=\"n\">abs1</span><span class=\"o\">-</span><span class=\"n\">dLr</span><span class=\"o\">*</span><span class=\"n\">Cfloor</span><span class=\"p\">(</span><span class=\"n\">abs1</span><span class=\"o\">/</span><span class=\"n\">dLr</span><span class=\"p\">)</span><span class=\"o\">&lt;</span><span class=\"n\">margin</span><span class=\"o\">*</span><span class=\"n\">dLr</span><span class=\"p\">:</span></pre>\n",
       "<pre class='cython code score-0 '>  __pyx_t_6 = (((__pyx_v_abs1 - (__pyx_v_dLr * floor((__pyx_v_abs1 / __pyx_v_dLr)))) &lt; (__pyx_v_margin * __pyx_v_dLr)) != 0);\n",
       "  if (__pyx_t_6) {\n",
       "/* … */\n",
       "    goto __pyx_L5;\n",
       "  }\n",
       "</pre><pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">36</span>:         <span class=\"n\">nL1</span> <span class=\"o\">=</span> <span class=\"n\">Cround</span><span class=\"p\">((</span><span class=\"n\">DLc</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">dLr</span><span class=\"p\">)</span><span class=\"o\">-</span><span class=\"mf\">1</span></pre>\n",
       "<pre class='cython code score-0 '>    __pyx_t_16 = 1;\n",
       "    __pyx_t_17 = 0;\n",
       "    __pyx_v_nL1 = (round((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_16)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_17)) )))) / __pyx_v_dLr)) - 1.0);\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">37</span>:     <span class=\"k\">else</span><span class=\"p\">:</span></pre>\n",
       "<pre class=\"cython line score-0\" onclick='toggleDiv(this)'>+<span class=\"\">38</span>:         <span class=\"n\">nL1</span> <span class=\"o\">=</span> <span class=\"n\">Cfloor</span><span class=\"p\">((</span><span class=\"n\">DLc</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">-</span><span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">dLr</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-0 '>  /*else*/ {\n",
       "    __pyx_t_18 = 1;\n",
       "    __pyx_t_19 = 0;\n",
       "    __pyx_v_nL1 = floor((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_18)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_19)) )))) / __pyx_v_dLr));\n",
       "  }\n",
       "  __pyx_L5:;\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">39</span>:     <span class=\"c\"># Get the corresponding indices</span></pre>\n",
       "<pre class=\"cython line score-96\" onclick='toggleDiv(this)'>+<span class=\"\">40</span>:     <span class=\"n\">indL</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"n\">nL0</span><span class=\"p\">,</span><span class=\"n\">nL1</span><span class=\"o\">+</span><span class=\"mf\">1</span><span class=\"p\">,</span><span class=\"mf\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">astype</span><span class=\"p\">(</span><span class=\"nb\">int</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-96 '>  __pyx_t_22 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_22);\n",
       "  __pyx_t_23 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_22, __pyx_n_s_arange); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_23);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_22); __pyx_t_22 = 0;\n",
       "  __pyx_t_22 = <span class='py_c_api'>PyFloat_FromDouble</span>(__pyx_v_nL0); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_22);\n",
       "  __pyx_t_24 = <span class='py_c_api'>PyFloat_FromDouble</span>((__pyx_v_nL1 + 1.0)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_24);\n",
       "  __pyx_t_25 = NULL;\n",
       "  __pyx_t_26 = 0;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_23))) {\n",
       "    __pyx_t_25 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_23);\n",
       "    if (likely(__pyx_t_25)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_23);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_25);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_23, function);\n",
       "      __pyx_t_26 = 1;\n",
       "    }\n",
       "  }\n",
       "  #if CYTHON_FAST_PYCALL\n",
       "  if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_23)) {\n",
       "    PyObject *__pyx_temp[4] = {__pyx_t_25, __pyx_t_22, __pyx_t_24, __pyx_int_1};\n",
       "    __pyx_t_21 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_23, __pyx_temp+1-__pyx_t_26, 3+__pyx_t_26); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_25); __pyx_t_25 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_21);\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_22); __pyx_t_22 = 0;\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_24); __pyx_t_24 = 0;\n",
       "  } else\n",
       "  #endif\n",
       "  #if CYTHON_FAST_PYCCALL\n",
       "  if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_23)) {\n",
       "    PyObject *__pyx_temp[4] = {__pyx_t_25, __pyx_t_22, __pyx_t_24, __pyx_int_1};\n",
       "    __pyx_t_21 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_23, __pyx_temp+1-__pyx_t_26, 3+__pyx_t_26); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_25); __pyx_t_25 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_21);\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_22); __pyx_t_22 = 0;\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_24); __pyx_t_24 = 0;\n",
       "  } else\n",
       "  #endif\n",
       "  {\n",
       "    __pyx_t_27 = <span class='py_c_api'>PyTuple_New</span>(3+__pyx_t_26); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_27);\n",
       "    if (__pyx_t_25) {\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_25); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_27, 0, __pyx_t_25); __pyx_t_25 = NULL;\n",
       "    }\n",
       "    <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_22);\n",
       "    <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_27, 0+__pyx_t_26, __pyx_t_22);\n",
       "    <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_24);\n",
       "    <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_27, 1+__pyx_t_26, __pyx_t_24);\n",
       "    <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_int_1);\n",
       "    <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_int_1);\n",
       "    <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_27, 2+__pyx_t_26, __pyx_int_1);\n",
       "    __pyx_t_22 = 0;\n",
       "    __pyx_t_24 = 0;\n",
       "    __pyx_t_21 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_23, __pyx_t_27, NULL); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_21);\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_27); __pyx_t_27 = 0;\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_23); __pyx_t_23 = 0;\n",
       "  __pyx_t_23 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_21, __pyx_n_s_astype); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_23);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_21); __pyx_t_21 = 0;\n",
       "  __pyx_t_21 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_23))) {\n",
       "    __pyx_t_21 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_23);\n",
       "    if (likely(__pyx_t_21)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_23);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_21);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_23, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_21) {\n",
       "    __pyx_t_20 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_23, ((PyObject *)(&amp;PyInt_Type))); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_20);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_23)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_21, ((PyObject *)(&amp;PyInt_Type))};\n",
       "      __pyx_t_20 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_23, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_21); __pyx_t_21 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_20);\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_23)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_21, ((PyObject *)(&amp;PyInt_Type))};\n",
       "      __pyx_t_20 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_23, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_21); __pyx_t_21 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_20);\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_27 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_27);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_21); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_27, 0, __pyx_t_21); __pyx_t_21 = NULL;\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)(&amp;PyInt_Type)));\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)(&amp;PyInt_Type)));\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_27, 0+1, ((PyObject *)(&amp;PyInt_Type)));\n",
       "      __pyx_t_20 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_23, __pyx_t_27, NULL); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 40, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_20);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_27); __pyx_t_27 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_23); __pyx_t_23 = 0;\n",
       "  __pyx_v_indL = __pyx_t_20;\n",
       "  __pyx_t_20 = 0;\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">41</span>:     <span class=\"c\"># Get the centers of the mesh elements</span></pre>\n",
       "<pre class=\"cython line score-26\" onclick='toggleDiv(this)'>+<span class=\"\">42</span>:     <span class=\"n\">L</span> <span class=\"o\">=</span> <span class=\"n\">LMinMax</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"mf\">0.5</span> <span class=\"o\">+</span> <span class=\"n\">indL</span><span class=\"p\">)</span><span class=\"o\">*</span><span class=\"n\">dLr</span></pre>\n",
       "<pre class='cython code score-26 '>  __pyx_t_28 = 0;\n",
       "  __pyx_t_20 = <span class='py_c_api'>PyFloat_FromDouble</span>((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_28)) )))); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 42, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_20);\n",
       "  __pyx_t_23 = <span class='pyx_c_api'>__Pyx_PyFloat_AddCObj</span>(__pyx_float_0_5, __pyx_v_indL, 0.5, 0); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 42, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_23);\n",
       "  __pyx_t_27 = <span class='py_c_api'>PyFloat_FromDouble</span>(__pyx_v_dLr); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 42, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_27);\n",
       "  __pyx_t_21 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_t_23, __pyx_t_27); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 42, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_21);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_23); __pyx_t_23 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_27); __pyx_t_27 = 0;\n",
       "  __pyx_t_27 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_t_20, __pyx_t_21); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 42, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_27);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_20); __pyx_t_20 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_21); __pyx_t_21 = 0;\n",
       "  __pyx_v_L = __pyx_t_27;\n",
       "  __pyx_t_27 = 0;\n",
       "</pre><pre class=\"cython line score-22\" onclick='toggleDiv(this)'>+<span class=\"\">43</span>:     <span class=\"k\">return</span> <span class=\"n\">L</span><span class=\"p\">,</span> <span class=\"n\">dLr</span><span class=\"p\">,</span> <span class=\"n\">indL</span><span class=\"p\">,</span> <span class=\"n\">N</span></pre>\n",
       "<pre class='cython code score-22 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);\n",
       "  __pyx_t_27 = <span class='py_c_api'>PyFloat_FromDouble</span>(__pyx_v_dLr); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 43, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_27);\n",
       "  __pyx_t_21 = <span class='py_c_api'>PyFloat_FromDouble</span>(__pyx_v_N); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 43, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_21);\n",
       "  __pyx_t_20 = <span class='py_c_api'>PyTuple_New</span>(4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 43, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_20);\n",
       "  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_L);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_L);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_20, 0, __pyx_v_L);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_27);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_20, 1, __pyx_t_27);\n",
       "  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_indL);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_indL);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_20, 2, __pyx_v_indL);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_21);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_20, 3, __pyx_t_21);\n",
       "  __pyx_t_27 = 0;\n",
       "  __pyx_t_21 = 0;\n",
       "  __pyx_r = __pyx_t_20;\n",
       "  __pyx_t_20 = 0;\n",
       "  goto __pyx_L0;\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">44</span>: </pre>\n",
       "<pre class=\"cython line score-0\">&#xA0;<span class=\"\">45</span>: </pre>\n",
       "<pre class=\"cython line score-73\" onclick='toggleDiv(this)'>+<span class=\"\">46</span>: <span class=\"k\">def</span> <span class=\"nf\">_Ves_Vmesh_Phi_numpy</span><span class=\"p\">(</span><span class=\"n\">DPhi</span><span class=\"p\">,</span> <span class=\"n\">dPhir</span><span class=\"p\">,</span> <span class=\"n\">NRPhi</span><span class=\"p\">,</span> <span class=\"n\">margin</span><span class=\"o\">=</span><span class=\"mf\">1.e-9</span><span class=\"p\">):</span></pre>\n",
       "<pre class='cython code score-73 '>/* Python wrapper */\n",
       "static PyObject *__pyx_pw_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_3_Ves_Vmesh_Phi_numpy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
       "static char __pyx_doc_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_2_Ves_Vmesh_Phi_numpy[] = \" Get the min and max indices of the relevant Phi for each R (to be finished) \";\n",
       "static PyMethodDef __pyx_mdef_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_3_Ves_Vmesh_Phi_numpy = {\"_Ves_Vmesh_Phi_numpy\", (PyCFunction)__pyx_pw_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_3_Ves_Vmesh_Phi_numpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_2_Ves_Vmesh_Phi_numpy};\n",
       "static PyObject *__pyx_pw_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_3_Ves_Vmesh_Phi_numpy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
       "  PyObject *__pyx_v_DPhi = 0;\n",
       "  PyObject *__pyx_v_dPhir = 0;\n",
       "  PyObject *__pyx_v_NRPhi = 0;\n",
       "  PyObject *__pyx_v_margin = 0;\n",
       "  PyObject *__pyx_r = 0;\n",
       "  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>\n",
       "  <span class='refnanny'>__Pyx_RefNannySetupContext</span>(\"_Ves_Vmesh_Phi_numpy (wrapper)\", 0);\n",
       "  {\n",
       "    static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_DPhi,&amp;__pyx_n_s_dPhir,&amp;__pyx_n_s_NRPhi,&amp;__pyx_n_s_margin,0};\n",
       "    PyObject* values[4] = {0,0,0,0};\n",
       "    values[3] = ((PyObject *)__pyx_float_1_eneg_9);\n",
       "    if (unlikely(__pyx_kwds)) {\n",
       "      Py_ssize_t kw_args;\n",
       "      const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);\n",
       "      switch (pos_args) {\n",
       "        case  4: values[3] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 3);\n",
       "        case  3: values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);\n",
       "        case  2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);\n",
       "        case  1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);\n",
       "        case  0: break;\n",
       "        default: goto __pyx_L5_argtuple_error;\n",
       "      }\n",
       "      kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);\n",
       "      switch (pos_args) {\n",
       "        case  0:\n",
       "        if (likely((values[0] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_DPhi)) != 0)) kw_args--;\n",
       "        else goto __pyx_L5_argtuple_error;\n",
       "        case  1:\n",
       "        if (likely((values[1] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_dPhir)) != 0)) kw_args--;\n",
       "        else {\n",
       "          <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"_Ves_Vmesh_Phi_numpy\", 0, 3, 4, 1); __PYX_ERR(0, 46, __pyx_L3_error)\n",
       "        }\n",
       "        case  2:\n",
       "        if (likely((values[2] = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_NRPhi)) != 0)) kw_args--;\n",
       "        else {\n",
       "          <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"_Ves_Vmesh_Phi_numpy\", 0, 3, 4, 2); __PYX_ERR(0, 46, __pyx_L3_error)\n",
       "        }\n",
       "        case  3:\n",
       "        if (kw_args &gt; 0) {\n",
       "          PyObject* value = <span class='py_c_api'>PyDict_GetItem</span>(__pyx_kwds, __pyx_n_s_margin);\n",
       "          if (value) { values[3] = value; kw_args--; }\n",
       "        }\n",
       "      }\n",
       "      if (unlikely(kw_args &gt; 0)) {\n",
       "        if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, \"_Ves_Vmesh_Phi_numpy\") &lt; 0)) __PYX_ERR(0, 46, __pyx_L3_error)\n",
       "      }\n",
       "    } else {\n",
       "      switch (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)) {\n",
       "        case  4: values[3] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 3);\n",
       "        case  3: values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);\n",
       "        values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);\n",
       "        values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);\n",
       "        break;\n",
       "        default: goto __pyx_L5_argtuple_error;\n",
       "      }\n",
       "    }\n",
       "    __pyx_v_DPhi = values[0];\n",
       "    __pyx_v_dPhir = values[1];\n",
       "    __pyx_v_NRPhi = values[2];\n",
       "    __pyx_v_margin = values[3];\n",
       "  }\n",
       "  goto __pyx_L4_argument_unpacking_done;\n",
       "  __pyx_L5_argtuple_error:;\n",
       "  <span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>(\"_Ves_Vmesh_Phi_numpy\", 0, 3, 4, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); __PYX_ERR(0, 46, __pyx_L3_error)\n",
       "  __pyx_L3_error:;\n",
       "  <span class='pyx_c_api'>__Pyx_AddTraceback</span>(\"_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771._Ves_Vmesh_Phi_numpy\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
       "  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n",
       "  return NULL;\n",
       "  __pyx_L4_argument_unpacking_done:;\n",
       "  __pyx_r = __pyx_pf_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_2_Ves_Vmesh_Phi_numpy(__pyx_self, __pyx_v_DPhi, __pyx_v_dPhir, __pyx_v_NRPhi, __pyx_v_margin);\n",
       "\n",
       "  /* function exit code */\n",
       "  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n",
       "  return __pyx_r;\n",
       "}\n",
       "\n",
       "static PyObject *__pyx_pf_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_2_Ves_Vmesh_Phi_numpy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_DPhi, PyObject *__pyx_v_dPhir, PyObject *__pyx_v_NRPhi, PyObject *__pyx_v_margin) {\n",
       "  PyObject *__pyx_v_nPhi0 = NULL;\n",
       "  PyObject *__pyx_v_nPhi1 = NULL;\n",
       "  PyObject *__pyx_v_abs0 = NULL;\n",
       "  PyObject *__pyx_v_ind0 = NULL;\n",
       "  PyObject *__pyx_v_abs1 = NULL;\n",
       "  PyObject *__pyx_v_ind1 = NULL;\n",
       "  PyObject *__pyx_r = NULL;\n",
       "  <span class='refnanny'>__Pyx_RefNannyDeclarations</span>\n",
       "  <span class='refnanny'>__Pyx_RefNannySetupContext</span>(\"_Ves_Vmesh_Phi_numpy\", 0);\n",
       "/* … */\n",
       "  /* function exit code */\n",
       "  __pyx_L1_error:;\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_c_api'>__Pyx_AddTraceback</span>(\"_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771._Ves_Vmesh_Phi_numpy\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
       "  __pyx_r = NULL;\n",
       "  __pyx_L0:;\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_nPhi0);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_nPhi1);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_abs0);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_ind0);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_abs1);\n",
       "  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_ind1);\n",
       "  <span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);\n",
       "  <span class='refnanny'>__Pyx_RefNannyFinishContext</span>();\n",
       "  return __pyx_r;\n",
       "}\n",
       "/* … */\n",
       "  __pyx_tuple__25 = <span class='py_c_api'>PyTuple_Pack</span>(10, __pyx_n_s_DPhi, __pyx_n_s_dPhir, __pyx_n_s_NRPhi, __pyx_n_s_margin, __pyx_n_s_nPhi0, __pyx_n_s_nPhi1, __pyx_n_s_abs0, __pyx_n_s_ind0, __pyx_n_s_abs1, __pyx_n_s_ind1); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 46, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__25);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__25);\n",
       "/* … */\n",
       "  __pyx_t_1 = PyCFunction_NewEx(&amp;__pyx_mdef_46_cython_magic_1e9ae0b4a9168851b26e8dfa94f3a771_3_Ves_Vmesh_Phi_numpy, NULL, __pyx_n_s_cython_magic_1e9ae0b4a9168851b2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_Ves_Vmesh_Phi_numpy, __pyx_t_1) &lt; 0) __PYX_ERR(0, 46, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_codeobj__26 = (PyObject*)<span class='pyx_c_api'>__Pyx_PyCode_New</span>(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Home_DV226270_cache_ipython_cyt, __pyx_n_s_Ves_Vmesh_Phi_numpy, 46, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 46, __pyx_L1_error)\n",
       "</pre><pre class=\"cython line score-0\">&#xA0;<span class=\"\">47</span>:     <span class=\"sd\">&quot;&quot;&quot; Get the min and max indices of the relevant Phi for each R (to be finished) &quot;&quot;&quot;</span></pre>\n",
       "<pre class=\"cython line score-64\" onclick='toggleDiv(this)'>+<span class=\"\">48</span>:     <span class=\"n\">nPhi0</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">nan</span><span class=\"o\">*</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">((</span><span class=\"n\">dPhir</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">,))</span></pre>\n",
       "<pre class='cython code score-64 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_dPhir, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_t_3);\n",
       "  __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_4))) {\n",
       "    __pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_4);\n",
       "    if (likely(__pyx_t_3)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_4);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_4, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_3) {\n",
       "    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};\n",
       "      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};\n",
       "      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_6 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_5);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0+1, __pyx_t_5);\n",
       "      __pyx_t_5 = 0;\n",
       "      __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 48, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_v_nPhi0 = __pyx_t_4;\n",
       "  __pyx_t_4 = 0;\n",
       "</pre><pre class=\"cython line score-64\" onclick='toggleDiv(this)'>+<span class=\"\">49</span>:     <span class=\"n\">nPhi1</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">nan</span><span class=\"o\">*</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">((</span><span class=\"n\">dPhir</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">,))</span></pre>\n",
       "<pre class='cython code score-64 '>  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_4, __pyx_n_s_nan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n",
       "  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_ones); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n",
       "  __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_dPhir, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);\n",
       "  __pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_2);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_t_2);\n",
       "  __pyx_t_2 = 0;\n",
       "  __pyx_t_2 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_6))) {\n",
       "    __pyx_t_2 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_6);\n",
       "    if (likely(__pyx_t_2)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_6, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_2) {\n",
       "    __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_6)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_5};\n",
       "      __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_6)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_5};\n",
       "      __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2); __pyx_t_2 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_3 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_2); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_5);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0+1, __pyx_t_5);\n",
       "      __pyx_t_5 = 0;\n",
       "      __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_6, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  __pyx_t_6 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 49, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_v_nPhi1 = __pyx_t_6;\n",
       "  __pyx_t_6 = 0;\n",
       "</pre><pre class=\"cython line score-58\" onclick='toggleDiv(this)'>+<span class=\"\">50</span>:     <span class=\"n\">abs0</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">abs</span><span class=\"p\">(</span><span class=\"n\">DPhi</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-58 '>  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_4, __pyx_n_s_abs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_3, __pyx_n_s_pi); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "  __pyx_t_5 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_1))) {\n",
       "    __pyx_t_5 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_1);\n",
       "    if (likely(__pyx_t_5)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_1);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_1, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_5) {\n",
       "    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_1)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_3};\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_1)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_3};\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_4 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_5); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0+1, __pyx_t_3);\n",
       "      __pyx_t_3 = 0;\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 50, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_v_abs0 = __pyx_t_6;\n",
       "  __pyx_t_6 = 0;\n",
       "</pre><pre class=\"cython line score-70\" onclick='toggleDiv(this)'>+<span class=\"\">51</span>:     <span class=\"n\">ind0</span> <span class=\"o\">=</span> <span class=\"n\">abs0</span><span class=\"o\">-</span><span class=\"n\">dPhir</span><span class=\"o\">*</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">floor</span><span class=\"p\">(</span><span class=\"n\">abs0</span><span class=\"o\">/</span><span class=\"n\">dPhir</span><span class=\"p\">)</span><span class=\"o\">&lt;</span><span class=\"n\">margin</span><span class=\"o\">*</span><span class=\"n\">dPhir</span></pre>\n",
       "<pre class='cython code score-70 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_floor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyNumber_Divide</span>(__pyx_v_abs0, __pyx_v_dPhir); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_3 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_4))) {\n",
       "    __pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_4);\n",
       "    if (likely(__pyx_t_3)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_4);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_4, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_3) {\n",
       "    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_1};\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_1};\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0+1, __pyx_t_1);\n",
       "      __pyx_t_1 = 0;\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_v_dPhir, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  __pyx_t_6 = <span class='py_c_api'>PyNumber_Subtract</span>(__pyx_v_abs0, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_v_margin, __pyx_v_dPhir); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_5 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_t_6, __pyx_t_4, Py_LT); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_v_ind0 = __pyx_t_5;\n",
       "  __pyx_t_5 = 0;\n",
       "</pre><pre class=\"cython line score-73\" onclick='toggleDiv(this)'>+<span class=\"\">52</span>:     <span class=\"n\">nPhi0</span><span class=\"p\">[</span><span class=\"n\">ind0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">round</span><span class=\"p\">((</span><span class=\"n\">DPhi</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"n\">dPhir</span><span class=\"p\">[</span><span class=\"n\">ind0</span><span class=\"p\">])</span></pre>\n",
       "<pre class='cython code score-73 '>  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_4, __pyx_n_s_round); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_pi); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_v_dPhir, __pyx_v_ind0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyNumber_Divide</span>(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_6))) {\n",
       "    __pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_6);\n",
       "    if (likely(__pyx_t_3)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_6, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_3) {\n",
       "    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_6)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_6)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0+1, __pyx_t_4);\n",
       "      __pyx_t_4 = 0;\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  if (unlikely(<span class='py_c_api'>PyObject_SetItem</span>(__pyx_v_nPhi0, __pyx_v_ind0, __pyx_t_5) &lt; 0)) __PYX_ERR(0, 52, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "</pre><pre class=\"cython line score-85\" onclick='toggleDiv(this)'>+<span class=\"\">53</span>:     <span class=\"n\">nPhi0</span><span class=\"p\">[</span><span class=\"o\">~</span><span class=\"n\">ind0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">floor</span><span class=\"p\">((</span><span class=\"n\">DPhi</span><span class=\"p\">[</span><span class=\"mf\">0</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"n\">dPhir</span><span class=\"p\">[</span><span class=\"o\">~</span><span class=\"n\">ind0</span><span class=\"p\">])</span></pre>\n",
       "<pre class='cython code score-85 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_6, __pyx_n_s_floor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_4, __pyx_n_s_pi); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='py_c_api'>PyNumber_Invert</span>(__pyx_v_ind0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_6 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_v_dPhir, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyNumber_Divide</span>(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  __pyx_t_6 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_1))) {\n",
       "    __pyx_t_6 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_1);\n",
       "    if (likely(__pyx_t_6)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_1);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_1, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_6) {\n",
       "    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_1)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_1)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_4 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_6); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0, __pyx_t_6); __pyx_t_6 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0+1, __pyx_t_3);\n",
       "      __pyx_t_3 = 0;\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='py_c_api'>PyNumber_Invert</span>(__pyx_v_ind0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  if (unlikely(<span class='py_c_api'>PyObject_SetItem</span>(__pyx_v_nPhi0, __pyx_t_1, __pyx_t_5) &lt; 0)) __PYX_ERR(0, 53, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "</pre><pre class=\"cython line score-58\" onclick='toggleDiv(this)'>+<span class=\"\">54</span>:     <span class=\"n\">abs1</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">abs</span><span class=\"p\">(</span><span class=\"n\">DPhi</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-58 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_abs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_3, __pyx_n_s_pi); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  __pyx_t_6 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_4))) {\n",
       "    __pyx_t_6 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_4);\n",
       "    if (likely(__pyx_t_6)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_4);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_4, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_6) {\n",
       "    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_6); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0+1, __pyx_t_3);\n",
       "      __pyx_t_3 = 0;\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_v_abs1 = __pyx_t_5;\n",
       "  __pyx_t_5 = 0;\n",
       "</pre><pre class=\"cython line score-70\" onclick='toggleDiv(this)'>+<span class=\"\">55</span>:     <span class=\"n\">ind1</span> <span class=\"o\">=</span> <span class=\"n\">abs1</span><span class=\"o\">-</span><span class=\"n\">dPhir</span><span class=\"o\">*</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">floor</span><span class=\"p\">(</span><span class=\"n\">abs1</span><span class=\"o\">/</span><span class=\"n\">dPhir</span><span class=\"p\">)</span><span class=\"o\">&lt;</span><span class=\"n\">margin</span><span class=\"o\">*</span><span class=\"n\">dPhir</span></pre>\n",
       "<pre class='cython code score-70 '>  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_4, __pyx_n_s_floor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyNumber_Divide</span>(__pyx_v_abs1, __pyx_v_dPhir); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_3 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_1))) {\n",
       "    __pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_1);\n",
       "    if (likely(__pyx_t_3)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_1);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_1, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_3) {\n",
       "    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_1)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_1)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_6 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0+1, __pyx_t_4);\n",
       "      __pyx_t_4 = 0;\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_v_dPhir, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "  __pyx_t_5 = <span class='py_c_api'>PyNumber_Subtract</span>(__pyx_v_abs1, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='py_c_api'>PyNumber_Multiply</span>(__pyx_v_margin, __pyx_v_dPhir); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_6 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_t_5, __pyx_t_1, Py_LT); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 55, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_v_ind1 = __pyx_t_6;\n",
       "  __pyx_t_6 = 0;\n",
       "</pre><pre class=\"cython line score-76\" onclick='toggleDiv(this)'>+<span class=\"\">56</span>:     <span class=\"n\">nPhi1</span><span class=\"p\">[</span><span class=\"n\">ind1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">round</span><span class=\"p\">((</span><span class=\"n\">DPhi</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"n\">dPhir</span><span class=\"p\">[</span><span class=\"n\">ind1</span><span class=\"p\">])</span><span class=\"o\">-</span><span class=\"mf\">1</span></pre>\n",
       "<pre class='cython code score-76 '>  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_round); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_4, __pyx_n_s_pi); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_v_dPhir, __pyx_v_ind1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyNumber_Divide</span>(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_5))) {\n",
       "    __pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_5);\n",
       "    if (likely(__pyx_t_3)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_5, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_3) {\n",
       "    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_5)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_1};\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_5)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_1};\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_4 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0+1, __pyx_t_1);\n",
       "      __pyx_t_1 = 0;\n",
       "      __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "  __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyInt_SubtractObjC</span>(__pyx_t_6, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  if (unlikely(<span class='py_c_api'>PyObject_SetItem</span>(__pyx_v_nPhi1, __pyx_v_ind1, __pyx_t_5) &lt; 0)) __PYX_ERR(0, 56, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "</pre><pre class=\"cython line score-85\" onclick='toggleDiv(this)'>+<span class=\"\">57</span>:     <span class=\"n\">nPhi1</span><span class=\"p\">[</span><span class=\"o\">~</span><span class=\"n\">ind1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">floor</span><span class=\"p\">((</span><span class=\"n\">DPhi</span><span class=\"p\">[</span><span class=\"mf\">1</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"n\">dPhir</span><span class=\"p\">[</span><span class=\"o\">~</span><span class=\"n\">ind1</span><span class=\"p\">])</span></pre>\n",
       "<pre class='cython code score-85 '>  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_6, __pyx_n_s_floor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetItemInt</span>(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_pi); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  __pyx_t_1 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='py_c_api'>PyNumber_Invert</span>(__pyx_v_ind1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  __pyx_t_6 = <span class='py_c_api'>PyObject_GetItem</span>(__pyx_v_dPhir, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "  __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyNumber_Divide</span>(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "  __pyx_t_6 = NULL;\n",
       "  if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_4))) {\n",
       "    __pyx_t_6 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_4);\n",
       "    if (likely(__pyx_t_6)) {\n",
       "      PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_4);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_6);\n",
       "      <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_4, function);\n",
       "    }\n",
       "  }\n",
       "  if (!__pyx_t_6) {\n",
       "    __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  } else {\n",
       "    #if CYTHON_FAST_PYCALL\n",
       "    if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    #if CYTHON_FAST_PYCCALL\n",
       "    if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_4)) {\n",
       "      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    } else\n",
       "    #endif\n",
       "    {\n",
       "      __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_6); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;\n",
       "      <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3);\n",
       "      <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0+1, __pyx_t_3);\n",
       "      __pyx_t_3 = 0;\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    }\n",
       "  }\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  __pyx_t_4 = <span class='py_c_api'>PyNumber_Invert</span>(__pyx_v_ind1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "  if (unlikely(<span class='py_c_api'>PyObject_SetItem</span>(__pyx_v_nPhi1, __pyx_t_4, __pyx_t_5) &lt; 0)) __PYX_ERR(0, 57, __pyx_L1_error)\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "  <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "</pre><pre class=\"cython line score-109\" onclick='toggleDiv(this)'>+<span class=\"\">58</span>:     <span class=\"k\">assert</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(</span><span class=\"n\">nPhi0</span><span class=\"o\">&gt;=</span><span class=\"mf\">0</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(</span><span class=\"n\">nPhi0</span><span class=\"o\">&lt;=</span><span class=\"n\">NRPhi</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-109 '>  #ifndef CYTHON_WITHOUT_ASSERTIONS\n",
       "  if (unlikely(!Py_OptimizeFlag)) {\n",
       "    __pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_4, __pyx_n_s_all); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    __pyx_t_4 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_v_nPhi0, __pyx_int_0, Py_GE); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    __pyx_t_3 = NULL;\n",
       "    if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_1))) {\n",
       "      __pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_1);\n",
       "      if (likely(__pyx_t_3)) {\n",
       "        PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_1);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_1, function);\n",
       "      }\n",
       "    }\n",
       "    if (!__pyx_t_3) {\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "    } else {\n",
       "      #if CYTHON_FAST_PYCALL\n",
       "      if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_1)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      #if CYTHON_FAST_PYCCALL\n",
       "      if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_1)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      {\n",
       "        __pyx_t_6 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);\n",
       "        <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0+1, __pyx_t_4);\n",
       "        __pyx_t_4 = 0;\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      }\n",
       "    }\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    __pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_5); if (unlikely(__pyx_t_8 &lt; 0)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    if (__pyx_t_8) {\n",
       "    } else {\n",
       "      __pyx_t_7 = __pyx_t_8;\n",
       "      goto __pyx_L3_bool_binop_done;\n",
       "    }\n",
       "    __pyx_t_1 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_all); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "    __pyx_t_1 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_v_nPhi0, __pyx_v_NRPhi, Py_LE); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    __pyx_t_4 = NULL;\n",
       "    if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_6))) {\n",
       "      __pyx_t_4 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_6);\n",
       "      if (likely(__pyx_t_4)) {\n",
       "        PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_6);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_6, function);\n",
       "      }\n",
       "    }\n",
       "    if (!__pyx_t_4) {\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "    } else {\n",
       "      #if CYTHON_FAST_PYCALL\n",
       "      if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_6)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_1};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      #if CYTHON_FAST_PYCCALL\n",
       "      if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_6)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_1};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      {\n",
       "        __pyx_t_3 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);\n",
       "        <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0+1, __pyx_t_1);\n",
       "        __pyx_t_1 = 0;\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_6, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      }\n",
       "    }\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "    __pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_5); if (unlikely(__pyx_t_8 &lt; 0)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    __pyx_t_7 = __pyx_t_8;\n",
       "    __pyx_L3_bool_binop_done:;\n",
       "    if (unlikely(!__pyx_t_7)) {\n",
       "      <span class='py_c_api'>PyErr_SetNone</span>(PyExc_AssertionError);\n",
       "      __PYX_ERR(0, 58, __pyx_L1_error)\n",
       "    }\n",
       "  }\n",
       "  #endif\n",
       "</pre><pre class=\"cython line score-109\" onclick='toggleDiv(this)'>+<span class=\"\">59</span>:     <span class=\"k\">assert</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(</span><span class=\"n\">nPhi1</span><span class=\"o\">&gt;=</span><span class=\"mf\">0</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(</span><span class=\"n\">nPhi1</span><span class=\"o\">&lt;=</span><span class=\"n\">NRPhi</span><span class=\"p\">)</span></pre>\n",
       "<pre class='cython code score-109 '>  #ifndef CYTHON_WITHOUT_ASSERTIONS\n",
       "  if (unlikely(!Py_OptimizeFlag)) {\n",
       "    __pyx_t_6 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);\n",
       "    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_6, __pyx_n_s_all); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "    __pyx_t_6 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_v_nPhi1, __pyx_int_0, Py_GE); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    __pyx_t_1 = NULL;\n",
       "    if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_3))) {\n",
       "      __pyx_t_1 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_3);\n",
       "      if (likely(__pyx_t_1)) {\n",
       "        PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_3);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_3, function);\n",
       "      }\n",
       "    }\n",
       "    if (!__pyx_t_1) {\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "    } else {\n",
       "      #if CYTHON_FAST_PYCALL\n",
       "      if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_3)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_6};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      #if CYTHON_FAST_PYCCALL\n",
       "      if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_3)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_6};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      {\n",
       "        __pyx_t_4 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_6);\n",
       "        <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_4, 0+1, __pyx_t_6);\n",
       "        __pyx_t_6 = 0;\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "      }\n",
       "    }\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    __pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_5); if (unlikely(__pyx_t_8 &lt; 0)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    if (__pyx_t_8) {\n",
       "    } else {\n",
       "      __pyx_t_7 = __pyx_t_8;\n",
       "      goto __pyx_L5_bool_binop_done;\n",
       "    }\n",
       "    __pyx_t_3 = <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);\n",
       "    __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_3, __pyx_n_s_all); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "    __pyx_t_3 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_v_nPhi1, __pyx_v_NRPhi, Py_LE); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    __pyx_t_6 = NULL;\n",
       "    if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_4))) {\n",
       "      __pyx_t_6 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_4);\n",
       "      if (likely(__pyx_t_6)) {\n",
       "        PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_4);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_6);\n",
       "        <span class='pyx_macro_api'>__Pyx_INCREF</span>(function);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_4, function);\n",
       "      }\n",
       "    }\n",
       "    if (!__pyx_t_6) {\n",
       "      __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "      <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "    } else {\n",
       "      #if CYTHON_FAST_PYCALL\n",
       "      if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_4)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      #if CYTHON_FAST_PYCCALL\n",
       "      if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_4)) {\n",
       "        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_3};\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;\n",
       "      } else\n",
       "      #endif\n",
       "      {\n",
       "        __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_6); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;\n",
       "        <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3);\n",
       "        <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0+1, __pyx_t_3);\n",
       "        __pyx_t_3 = 0;\n",
       "        __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "        <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "        <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;\n",
       "      }\n",
       "    }\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;\n",
       "    __pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_5); if (unlikely(__pyx_t_8 &lt; 0)) __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;\n",
       "    __pyx_t_7 = __pyx_t_8;\n",
       "    __pyx_L5_bool_binop_done:;\n",
       "    if (unlikely(!__pyx_t_7)) {\n",
       "      <span class='py_c_api'>PyErr_SetNone</span>(PyExc_AssertionError);\n",
       "      __PYX_ERR(0, 59, __pyx_L1_error)\n",
       "    }\n",
       "  }\n",
       "  #endif\n",
       "</pre><pre class=\"cython line score-10\" onclick='toggleDiv(this)'>+<span class=\"\">60</span>:     <span class=\"k\">return</span> <span class=\"n\">nPhi0</span><span class=\"p\">,</span> <span class=\"n\">nPhi1</span></pre>\n",
       "<pre class='cython code score-10 '>  <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);\n",
       "  __pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 60, __pyx_L1_error)\n",
       "  <span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);\n",
       "  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_nPhi0);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_nPhi0);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_v_nPhi0);\n",
       "  <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_nPhi1);\n",
       "  <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_nPhi1);\n",
       "  <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 1, __pyx_v_nPhi1);\n",
       "  __pyx_r = __pyx_t_5;\n",
       "  __pyx_t_5 = 0;\n",
       "  goto __pyx_L0;\n",
       "</pre></div></body></html>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 219,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%cython -a\n",
    "cimport cython\n",
    "import numpy as np\n",
    "cimport numpy as cnp\n",
    "from cpython cimport bool\n",
    "from libc.math cimport ceil as Cceil, abs as Cabs, floor as Cfloor, round as Cround\n",
    "\n",
    "#@cython.cdivision(True)\n",
    "#@cython.wraparound(False)\n",
    "#@cython.boundscheck(False)\n",
    "\n",
    "# Preliminary function to get optimal resolution from input resolution\n",
    "@cython.cdivision(True)\n",
    "@cython.wraparound(False)\n",
    "@cython.boundscheck(False)\n",
    "def _Ves_mesh_dlfromL_cython(double[::1] LMinMax, double dL, DL=None, double margin=1.e-9):\n",
    "    \"\"\" Get the actual reolution from the desired resolution and MinMax and limits \"\"\"\n",
    "    # Get the number of mesh elements in LMinMax\n",
    "    cdef double N = Cceil((LMinMax[1]-LMinMax[0])/dL)\n",
    "    # Derive the real (effective) resolution\n",
    "    cdef double dLr = (LMinMax[1]-LMinMax[0])/N\n",
    "    # Get desired limits if any\n",
    "    cdef double[::1] DLc, L\n",
    "    cdef int[::1] indL\n",
    "    cdef double nL0, nL1, abs0, abs1\n",
    "    if DL is None:\n",
    "        DLc = LMinMax\n",
    "    else:\n",
    "        DLc = DL\n",
    "    # Get the extreme indices of the mesh elements that really need to be created within those limits\n",
    "    abs0 = Cabs(DLc[0]-LMinMax[0])\n",
    "    if abs0-dLr*Cfloor(abs0/dLr)<margin*dLr:\n",
    "        nL0 = Cround((DLc[0]-LMinMax[0])/dLr)\n",
    "    else:\n",
    "        nL0 = Cfloor((DLc[0]-LMinMax[0])/dLr)\n",
    "    abs1 = Cabs(DLc[1]-LMinMax[0])\n",
    "    if abs1-dLr*Cfloor(abs1/dLr)<margin*dLr:\n",
    "        nL1 = Cround((DLc[1]-LMinMax[0])/dLr)-1\n",
    "    else:\n",
    "        nL1 = Cfloor((DLc[1]-LMinMax[0])/dLr)\n",
    "    # Get the corresponding indices\n",
    "    for ii in range(nL0,nL1+1):\n",
    "    indL = np.arange(nL0,nL1+1,1).astype(int)\n",
    "    # Get the centers of the mesh elements\n",
    "    L = LMinMax[0] + (0.5 + indL)*dLr\n",
    "    return L, dLr, indL, N\n",
    "\n",
    "\n",
    "def _Ves_Vmesh_Phi_numpy(DPhi, dPhir, NRPhi, margin=1.e-9):\n",
    "    \"\"\" Get the min and max indices of the relevant Phi for each R (to be finished) \"\"\"\n",
    "    nPhi0 = np.nan*np.ones((dPhir.size,))\n",
    "    nPhi1 = np.nan*np.ones((dPhir.size,))\n",
    "    abs0 = np.abs(DPhi[0]+np.pi)\n",
    "    ind0 = abs0-dPhir*np.floor(abs0/dPhir)<margin*dPhir\n",
    "    nPhi0[ind0] = np.round((DPhi[0]+np.pi)/dPhir[ind0])\n",
    "    nPhi0[~ind0] = np.floor((DPhi[0]+np.pi)/dPhir[~ind0])\n",
    "    abs1 = np.abs(DPhi[1]+np.pi)\n",
    "    ind1 = abs1-dPhir*np.floor(abs1/dPhir)<margin*dPhir\n",
    "    nPhi1[ind1] = np.round((DPhi[1]+np.pi)/dPhir[ind1])-1\n",
    "    nPhi1[~ind1] = np.floor((DPhi[1]+np.pi)/dPhir[~ind1])\n",
    "    assert np.all(nPhi0>=0) and np.all(nPhi0<=NRPhi)\n",
    "    assert np.all(nPhi1>=0) and np.all(nPhi1<=NRPhi)\n",
    "    return nPhi0, nPhi1\n"
   ]
  },
  {
   "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.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
