diff --git a/code/BaseMesh.py b/SimPEG/BaseMesh.py similarity index 100% rename from code/BaseMesh.py rename to SimPEG/BaseMesh.py diff --git a/code/EldadsCode/GaussNewton.py b/SimPEG/EldadsCode/GaussNewton.py similarity index 100% rename from code/EldadsCode/GaussNewton.py rename to SimPEG/EldadsCode/GaussNewton.py diff --git a/code/EldadsCode/MFDdriver.py b/SimPEG/EldadsCode/MFDdriver.py similarity index 100% rename from code/EldadsCode/MFDdriver.py rename to SimPEG/EldadsCode/MFDdriver.py diff --git a/code/EldadsCode/getCellVolume.py b/SimPEG/EldadsCode/getCellVolume.py similarity index 100% rename from code/EldadsCode/getCellVolume.py rename to SimPEG/EldadsCode/getCellVolume.py diff --git a/code/EldadsCode/getDiffOps.py b/SimPEG/EldadsCode/getDiffOps.py similarity index 100% rename from code/EldadsCode/getDiffOps.py rename to SimPEG/EldadsCode/getDiffOps.py diff --git a/code/EldadsCode/getEdgeInnerProduct.py b/SimPEG/EldadsCode/getEdgeInnerProduct.py similarity index 100% rename from code/EldadsCode/getEdgeInnerProduct.py rename to SimPEG/EldadsCode/getEdgeInnerProduct.py diff --git a/code/EldadsCode/getEdgeTangent.py b/SimPEG/EldadsCode/getEdgeTangent.py similarity index 100% rename from code/EldadsCode/getEdgeTangent.py rename to SimPEG/EldadsCode/getEdgeTangent.py diff --git a/code/EldadsCode/getFaceInnerProduct.py b/SimPEG/EldadsCode/getFaceInnerProduct.py similarity index 100% rename from code/EldadsCode/getFaceInnerProduct.py rename to SimPEG/EldadsCode/getFaceInnerProduct.py diff --git a/code/EldadsCode/getFaceNormals.py b/SimPEG/EldadsCode/getFaceNormals.py similarity index 100% rename from code/EldadsCode/getFaceNormals.py rename to SimPEG/EldadsCode/getFaceNormals.py diff --git a/code/EldadsCode/getVolume.py b/SimPEG/EldadsCode/getVolume.py similarity index 100% rename from code/EldadsCode/getVolume.py rename to SimPEG/EldadsCode/getVolume.py diff --git a/code/EldadsCode/inv3X3BlockDiagonal.py b/SimPEG/EldadsCode/inv3X3BlockDiagonal.py similarity index 100% rename from code/EldadsCode/inv3X3BlockDiagonal.py rename to SimPEG/EldadsCode/inv3X3BlockDiagonal.py diff --git a/code/EldadsCode/meshUtils.py b/SimPEG/EldadsCode/meshUtils.py similarity index 100% rename from code/EldadsCode/meshUtils.py rename to SimPEG/EldadsCode/meshUtils.py diff --git a/code/EldadsCode/sputils.py b/SimPEG/EldadsCode/sputils.py similarity index 100% rename from code/EldadsCode/sputils.py rename to SimPEG/EldadsCode/sputils.py diff --git a/code/EldadsCode/tools.py b/SimPEG/EldadsCode/tools.py similarity index 100% rename from code/EldadsCode/tools.py rename to SimPEG/EldadsCode/tools.py diff --git a/code/EldadsCode/utils.py b/SimPEG/EldadsCode/utils.py similarity index 100% rename from code/EldadsCode/utils.py rename to SimPEG/EldadsCode/utils.py diff --git a/code/EldadsCode/zevel.py b/SimPEG/EldadsCode/zevel.py similarity index 100% rename from code/EldadsCode/zevel.py rename to SimPEG/EldadsCode/zevel.py diff --git a/code/TensorMesh.py b/SimPEG/TensorMesh.py similarity index 100% rename from code/TensorMesh.py rename to SimPEG/TensorMesh.py diff --git a/code/TensorView.py b/SimPEG/TensorView.py similarity index 80% rename from code/TensorView.py rename to SimPEG/TensorView.py index ab5c09cf..155733e8 100644 --- a/code/TensorView.py +++ b/SimPEG/TensorView.py @@ -1,5 +1,6 @@ import numpy as np import matplotlib.pyplot as plt +import matplotlib from mpl_toolkits.mplot3d import Axes3D @@ -12,7 +13,7 @@ class TensorView(object): def __init__(self): pass - def plotImage(self, I, imageType='CC', figNum=1): + def plotImage(self, I, imageType='CC', figNum=1,ax=None): assert type(I) == np.ndarray, "I must be a numpy array" assert imageType in ["CC", "N"], "imageType must be 'CC' or 'N'" @@ -22,14 +23,22 @@ class TensorView(object): elif imageType == 'N': assert I.size == self.nN, "Incorrect dimensions for N." - fig = plt.figure(figNum) - fig.clf() - ax = plt.subplot(111) + if ax is None: + fig = plt.figure(figNum) + fig.clf() + ax = plt.subplot(111) + else: + assert isinstance(ax,matplotlib.axes.Axes), "ax must be an Axes!" + fig = ax.figure + if self.dim == 1: if imageType == 'CC': - ax.plot(self.vectorCCx, I, 'ro') + ph = ax.plot(self.vectorCCx, I, '-ro') elif imageType == 'N': - ax.plot(self.vectorNx, I, 'bs') + ph = ax.plot(self.vectorNx, I, '-bs') + ax.set_xticks(self.vectorNx) + ax.set_xlabel("x") + ax.axis('tight') elif self.dim == 2: if imageType == 'CC': C = I[:].reshape(self.n, order='F') @@ -37,12 +46,16 @@ class TensorView(object): C = I[:].reshape(self.n+1, order='F') C = 0.25*(C[:-1, :-1] + C[1:, :-1] + C[:-1, 1:] + C[1:, 1:]) - fh = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) - plt.xlabel("x") - plt.ylabel("y") - fig.colorbar(fh) + ph = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) + ax.axis('tight') + ax.set_xlabel("x") + ax.set_ylabel("y") + ax.set_xticks(self.vectorNx) + ax.set_yticks(self.vectorNy) + fig.show() + return ph def plotGrid(self): diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py new file mode 100644 index 00000000..2d1b1e99 --- /dev/null +++ b/SimPEG/__init__.py @@ -0,0 +1 @@ +from TensorMesh import TensorMesh diff --git a/code/getDIV.py b/SimPEG/getDIV.py similarity index 100% rename from code/getDIV.py rename to SimPEG/getDIV.py diff --git a/code/sputils.py b/SimPEG/sputils.py similarity index 100% rename from code/sputils.py rename to SimPEG/sputils.py diff --git a/code/tests/runTests.py b/SimPEG/tests/runTests.py similarity index 100% rename from code/tests/runTests.py rename to SimPEG/tests/runTests.py diff --git a/code/tests/runTests.sh b/SimPEG/tests/runTests.sh similarity index 100% rename from code/tests/runTests.sh rename to SimPEG/tests/runTests.sh diff --git a/code/tests/test_basemesh.py b/SimPEG/tests/test_basemesh.py similarity index 100% rename from code/tests/test_basemesh.py rename to SimPEG/tests/test_basemesh.py diff --git a/code/tests/test_div.py b/SimPEG/tests/test_div.py similarity index 100% rename from code/tests/test_div.py rename to SimPEG/tests/test_div.py diff --git a/code/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py similarity index 100% rename from code/tests/test_tensorMesh.py rename to SimPEG/tests/test_tensorMesh.py diff --git a/code/tests/test_utils.py b/SimPEG/tests/test_utils.py similarity index 100% rename from code/tests/test_utils.py rename to SimPEG/tests/test_utils.py diff --git a/code/utils.py b/SimPEG/utils.py similarity index 100% rename from code/utils.py rename to SimPEG/utils.py diff --git a/notebooks/exPlotImage2D.ipynb b/notebooks/exPlotImage2D.ipynb new file mode 100644 index 00000000..efcebc7e --- /dev/null +++ b/notebooks/exPlotImage2D.ipynb @@ -0,0 +1,173 @@ +{ + "metadata": { + "name": "exPlotImage2D" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import sys\n", + "sys.path.append('../')\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from SimPEG import TensorMesh" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test 1D Plots\n", + "\n", + "For 1D nodal or cell-centered plots are supported.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x0 = np.zeros(1)\n", + "h = np.random.rand(51)\n", + "mesh = TensorMesh([h],x0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'module' object is not callable", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m51\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmesh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTensorMesh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: 'module' object is not callable" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "sin = lambda x: np.sin(x)\n", + "xc = mesh.gridCC\n", + "xn = mesh.gridN\n", + "\n", + "fig = plt.figure(1)\n", + "fig.clf()\n", + "ph1 = mesh.plotImage(sin(xc),ax=subplot(111))\n", + "ph2 = mesh.plotImage(sin(xn),ax=subplot(111),imageType='N')\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'mesh' is not defined", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0msin\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mxc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmesh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridCC\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mxn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmesh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridN\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'mesh' is not defined" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test 2D Plots\n", + "\n", + "Plot x and y coordinates of cell-centred points" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x0 = np.zeros(2)\n", + "h1 = np.linspace(.1,.5,3)\n", + "h2 = np.linspace(.1,.5,5)\n", + "mesh = TensorMesh([h1,h2],x0)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "fig = plt.figure(1)\n", + "fig.clf()\n", + "ax1 = subplot(121)\n", + "ax2 = subplot(122)\n", + "mesh.plotImage(mesh.gridCC[:,0],ax = ax1)\n", + "ax1.set_title('x coordinates') \n", + "mesh.plotImage(mesh.gridCC[:,1],ax = ax2)\n", + "ax2.set_title('y coordinates') " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "pyout", + "prompt_number": 3, + "text": [ + "" + ] + }, + { + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAETCAYAAAA23nEoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGVVJREFUeJzt3XtwVOX9x/HPRlIMoCEkEeyAidFIEiABciNcYytgJ5VL\ny4jRosLghLZyLYxFy7A4SjuiAqYKkbGtlMvQAgW8VApNkyhIEm4/IMAgkZUKFAhikHAxDM/vD44L\nkQSScE422bxfMzvuyXnynO/ufA+f3SdnV5cxxggA0OwF+LoAAEDjQCAAACQRCAAAC4EAAJBEIAAA\nLAQCAEASgeCXIiMjlZubK0maPXu2nnnmGR9XBNw6+tp5LXxdAOzncrm8959//nnb5g0ICNDBgwcV\nFRVl25xAbdHXzuMdQhN26dKlBj8mn2OE0+hr3yEQ6qC0tFShoaHasWOHJOno0aMKDw9XQUFBtePL\nysr0+uuvq1u3bgoLC9P48eO9+9atW6eBAweqW7duWrhwoc6dO+fdt337dj399NOKjIzUjBkzdPTo\nUe++yMhIvfXWW+rdu7fatm2ry5cv69NPP9WgQYMUGRmp7OzsKjW43W6NGjVKkuTxeBQQEKDVq1cr\nNjZW8fHxWrJkiXdsUVGR0tLSFBISorS0NP3xj3/0npz9+/eXJCUkJOiOO+7Q3//+d0nSrl27NG7c\nON1zzz36zW9+o8OHD3vne+edd5SWlqbg4GDFxMR43+6jcZkzZ45GjBhR5WcTJkzQpEmTqh1PX/tx\nXxvUyaJFi0xcXJw5d+6cGTRokJk2bVqNY4cMGWJGjRplPvvsM3Px4kXzySefGGOMyc3NNffcc4/Z\nsGGDOXDggPnxj39sZs6caYwxpqKiwrRp08YsWrTInDhxwkyYMMEMGDDAO2dkZKSJi4szBQUF5sKF\nC+b06dOmVatW5t133zVHjhwxTzzxhAkMDDT//ve/jTHGuN1u84tf/MIYY8yhQ4eMy+UyI0eONIcP\nHzbr1683LVu2NOfPnzfGGLNt2zZTWFhoLl26ZDZt2mQiIiLMhg0bvMd2uVymtLTUu11WVmZCQkLM\nmjVrTHl5uZk9e7bp3bu3McaYkydPmo4dO5oDBw4YY4z54osvqvwuGo9jx46Z1q1bm6+//toYY0xl\nZaW56667zPbt26sdT1/7b18TCPUwZMgQ07VrV5OQkGC+/fbbasd8/fXXplWrVqasrOy6fRMmTDDT\np0/3bm/YsMHEx8cbY4xZvXq1SUtL8+6rqKioMk9kZKR58cUXvftXrFhh+vXr590uLS01LpfLe+LM\nnDnzuhNn27Zt3vGdO3c2//znP6t9DC+88IJ59tlnvdvfP3Hefvtt88wzz3i3L126ZO666y5z/Phx\nU1ZWZkJDQ837779f43OExuPhhx82ixYtMsYY895775kuXbpUO46+9u++ZsmoHsaOHauSkhKNHz9e\ngYGB1Y7ZtGmTIiIiFBoaet2+zZs3KzEx0budmJio3bt368yZM9q0aZN69uzp3deqVStFR0dr8+bN\n3p+lpqZ67xcVFSkhIcG7HRUVpeDg4BvW3717d+/9u+++2/vW/ciRIxo3bpzi4+N15513au7cudq1\na1eN82zcuFFLly5VSEiIQkJCFBYWpoqKChUUFCg0NFR//etfNXfuXN19992aNGmSTp48ecO64DtP\nPfWUd5llyZIl3uWY76Ov/buvCYQ6Onv2rCZNmqSxY8dq5syZOn36dLXjevfurS+++EKnTp26bl+f\nPn20detW7/bWrVu9zdq3b19t27bNu6+iokKfffaZevfu7f1ZixZXLw5LSUnRzp07vdulpaUqLy+v\n12N76aWXVFlZqQ8//FDl5eWaPHmyLl++7N0fEBBQ5Y9vP/rRj/Tkk0/q9OnT3tvZs2e969E/+clP\ntHHjRu3du1eHDh3SK6+8Uq+64LyhQ4dq165d2rNnjz744AM98cQT1Y6jr/27rwmEOpo4caJSUlL0\n9ttvKyMjQ+PGjat2XNu2bTVw4EBNmTJFBw8e1IULF7yvhoYOHarly5crNzdXBw8e1Jw5czRs2DBJ\n0sCBA1VSUqI//elPOnHihH73u98pOTm52ldkkjRo0CBt375dS5cu1dGjRzVr1qwqJ1ZdHD16VO3a\ntVNoaKjy8vK0ePHiKvsTExOrnPAjR47U6tWrtWbNGlVUVKiiokIffPCBzp49qwMHDig3N1cXL17U\nD37wA7Vs2VJ33HFHveqC84KCgvTzn/9cjz/+uFJTU9WxY8dqx9HX/t3XBEIdrF27Vv/617+0YMEC\nSdLrr7+u7du3a/ny5dWOf+edd9S1a1f99Kc/VadOnfS3v/1NkpSenq65c+dq9uzZGjZsmIYOHapp\n06ZJklq3bq3c3Fzl5+crOTlZQUFBWrp0aY01tW3bVuvXr9ef//xnpaWlKSUlpcrJ7HK5qly/fe39\n73O73dq5c6c6duyoOXPm6Nlnn60yfurUqXr11VcVEhKilStXeo/9n//8Rw888ICio6O9J9vFixc1\nffp0hYeHKykpSW3bttXkyZNv9hTDh5566int2bOnxuWi79DX/tvXLmO4ABeAdPjwYcXGxur48eNq\n06aNr8uBDzjyDmHMmDFq3769unXrVu3+vLw8BQcHq0ePHurRo4deeuklJ8oAbOevvX358mXNnj1b\n48aNIwyaMUe+umL06NEaP368nnzyyRrHDBgwQOvWrXPi8IBj/LG3Kyoq1KFDB/Xo0UNr1qzxdTnw\nIUcCoV+/fvJ4PDccw0oVmiJ/7O3WrVvrm2++8XUZaAR88kdll8ulzZs3q3v37poyZYpKS0t9UQZg\nO3obTZlPvu20Z8+e+u9//6vAwEC9++67mjhxot5///3rxt3oygHADna/mqe30VjUp7cdu8rI4/Ho\nkUce0e7du284zhijDh066PDhw2rZsmXV4lwuSe76F1EyU3rTLf36FuZoJNxdXMqTlO7jOvyJW/U7\naezqbXedj3xVnvynF/LkP4+lsXCrfr3tkyWj48ePe4t97733FB8ff90JAzRF9DaaMkeWjDIzM5Wf\nn6+ysjJ16tRJs2bNUmVlpSQpKytLK1eu1IIFC9SiRQvFx8frtddec6IMwHb0NvxZo/5gmi1LRkV5\nUkq6PQX5kLuLSx5JkT6uw5+45bsrgm51ycgj/+kFj/znsTQWbjWhJaMG5Qdh8J1IXxeARiPS1wXY\nKNLXBcDL/wMBAFArBAIAQBKBAACwEAgAAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAA\nsBAIAABJBAIAwEIgAAAkEQgAAAuBAACQRCAAACwEAgBAEoEAALAQCAAASQQCAMBCIAAAJBEIAAAL\ngQAAkEQgAAAsBAIAQBKBAACwEAgAAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAI\nAABJBAIAwEIgAAAkEQgAAAuBAACQRCAAACwEAgBAEoEAALAQCAAASQQCAMBCIAAAJBEIAAALgQAA\nkEQgAAAsBAIAQBKBAACwEAgAAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAIAABJ\nBAIAwEIgAAAkEQgAAAuBAACQRCAAACyOBMKYMWPUvn17devWrcYx06dPV1RUlBITE7V//34nygBs\nRV/D3zkSCKNHj9ZHH31U4/6ioiJ9/PHH2rp1q6ZOnaqpU6c6UQZgK/oa/s6RQOjXr59CQkJq3F9Y\nWKgRI0aoXbt2yszM1L59+5woA7AVfQ1/18IXBy0qKtKoUaO82+Hh4SotLdV9991Xzei8a+5HWjeg\n7jzWzSl162vpzMwg7/209EClpQc6WB382ad5lfo0r/LqD2adr9c8PgkEY4yMMVV+5nK5ahid7ng9\naB4iVfXlRJ7N89etr6Up7lY2V4Dm6vsvKF6vZyD45Cqj1NRU7d2717t98uRJRUVF+aIUwDb0NZo6\nnwXCqlWrdOrUKS1btkyxsbG+KAOwFX2Nps6RJaPMzEzl5+errKxMnTp10qxZs1RZeWV9KysrSykp\nKerbt6+SkpLUrl07LVmyxIkyAFvR1/B3LvP9Rc9G5Mr6q7v+E5TMtKsUn3N3qXktGvXjlq5b828o\nLpdLX5pQnxwb/q+j61S9eptPKgMAJBEIAAALgQAAkEQgAAAsBAIAQBKBAACwEAgAAEkEAgDAQiAA\nACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAIAABJBAIAwEIgAAAkEQgAAAuBAACQRCAAACwEAgBA\nEoEAALAQCAAASQQCAMBCIAAAJBEIAAALgQAAkEQgAAAsBAIAQNINAuGNN97Q6dOnG7IWoEEUSjrv\n6yKARqjGQDh+/LiSk5P16KOP6qOPPpIxpiHrAhxzVtIi6z69DVxVYyC8/PLLOnDggMaMGaO//OUv\nio6O1vPPPy+Px9OA5QH2+7Gk8dZ9ehu46oZ/QwgICFCHDh3Uvn173XbbbTp9+rSGDRuml19+uaHq\nAxzhsv5LbwNXuUwN75fnz5+vxYsXKzQ0VGPHjtXw4cMVGBioy5cvKy4uTvv373e+OJdLkrv+E5TM\ntKsUn3N3cd18EGpli6T/k3RM0ooVK3zW21+aUMePg+apo+tUvZZCW9S046uvvtLq1asVERFR5ecB\nAQFavXp13SsEGonzkkZKmifp0Ucf9f6c3kZzV2MgzJo1q8ZfiouLc6QYoCE8eIN99DaaMz6HAACQ\nRCAAACwEAgBAEoEAALAQCAAASQQCAMBCIAAAJBEIAAALgQAAkEQgAAAsBAIAQBKBAACwEAgAAEkE\nAgDA4kggFBQUKDY2VtHR0crOzq52THFxsZKTkxUbG6v09HQnygBsR2/Dn9X4/0O4FRMnTlROTo4i\nIiI0ePBgZWZmKiwszLvfGKMxY8Zo7ty5euihh1RWVuZEGYDt6G34M9vfIZSXl0uS+vfvr4iICA0a\nNEiFhYVVxmzdulXx8fF66KGHJKnKCQU0VvQ2/J3tgVBcXKyYmBjvdlxcnLZs2VJlzPr16+VyudSv\nXz898sgjWr9+vd1lALajt+HvHFkyupkLFy5o586d2rhxo86dO6eBAwdqz549CgoKqmZ03jX3I60b\nUHce6+akuvR2x18/e3UjOV1KSXe4OvitojypOO+aH9T8v0C+EdsDITk5WdOmTfNul5SU6OGHH64y\nJi0tTRcvXlSHDh0kSUlJSSooKNDgwYOrmTHd7hLRTEWq6suJvDr+vu29/Wt3HSsAapCSXvUFxVv1\nCwTbl4yCg4MlXbkaw+PxaMOGDUpNTa0yplevXsrPz9e5c+f01VdfaceOHerTp4/dpQC2orfh7xxZ\nMpo3b56ysrJUWVmpCRMmKCwsTDk5OZKkrKwshYaGavTo0UpKSlJ4eLhefPFFtWnTxolSAFvR2/Bn\nLmOM8XURNXG5XJLc9Z+gZKZdpficu4vL1yX4HbeuXCbqCy6XSypptKcemrournr1Np9UBgBIIhAA\nABYCAQAgiUAAAFgIBACAJAIBAGAhEAAAkggEAICFQAAASCIQAAAWAgEAIIlAAABYCAQAgCQCAQBg\nIRAAAJIIBACAhUAAAEgiEAAAFgIBACCJQAAAWAgEAIAkAgEAYCEQAACSCAQAgIVAAABIIhAAABYC\nAQAgiUAAAFgIBACAJAIBAGAhEAAAkggEAICFQAAASCIQAAAWAgEAIIlAAABYHAmEgoICxcbGKjo6\nWtnZ2dftX7t2rRISEtS9e3dlZGSouLjYiTIA29Hb8GcuY4yxe9IePXpo/vz5ioiI0ODBg/XJJ58o\nLCzMu7+iokKtW7eWJOXn52vGjBkqKCi4vjiXS5K7/oWUzKz/7zYy7i4uX5fgd9yS6tr+tvZ2ie2n\nHnBFF1ede1ty4B1CeXm5JKl///6KiIjQoEGDVFhYWGXMdyfMd+Nvv/12u8sAbEdvw9+1sHvC4uJi\nxcTEeLfj4uK0ZcsWZWRkVBn3j3/8Q5MnT9bZs2e1bdu2G8yYd839SOsG1J3HutWX7b39pvvq/eR0\nKSX9FqpDs1aUJxXn3fI0tgdCbQ0fPlzDhw/XihUrNGzYMO3YsaOGkekNWRb8WKSqvpzIc+g4te7t\nBe5r7jtUDJqJdFX9t3JWvWaxfckoOTlZ+/fv926XlJSoV69eNY4fOXKkjh49qvPnz9tdCmArehv+\nzvZACA4OlnTlagyPx6MNGzYoNTW1ypjS0lLvHzw+/PBDJSYmKigoyO5SAFvR2/B3jiwZzZs3T1lZ\nWaqsrNSECRMUFhamnJwcSVJWVpZWrVqlxYsXKzAwUD169NArr7ziRBmA7eht+DNHLju1C5edXsVl\np/Zzq+6XndrF5XJJrkZ76qGpM43kslMAQNNEIAAAJBEIAAALgQAAkEQgAAAsBAIAQBKBAACwEAgA\nAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAIAABJBAIAwEIgAAAkEQgAAAuBAACQ\nRCAAACyOBUJBQYFiY2MVHR2t7Ozs6/bv379faWlpuv322/Xaa685VQZgK/oa/qyFUxNPnDhROTk5\nioiI0ODBg5WZmamwsDDv/tDQUGVnZ2vNmjVOlQDYjr6GP3PkHUJ5ebkkqX///oqIiNCgQYNUWFhY\nZUx4eLiSkpIUGBjoRAmA7ehr+DtH3iEUFxcrJibGux0XF6ctW7YoIyOjHrPlXXM/0roBdeexbvVl\nb19LMg9esxEpehv159GtdfcVji0Z2Sfd1wXAT0Sq6j+5eT6p4lrpvi4AfiNSdnS3I0tGycnJ2r9/\nv3e7pKREvXr1cuJQQIOhr+HvHAmE4OBgSVeuyPB4PNqwYYNSU1OrHWuMcaIEwHb0NfydY0tG8+bN\nU1ZWliorKzVhwgSFhYUpJydHkpSVlaX//e9/Sk5O1pkzZxQQEKD58+dr7969atOmjVMlAbeMvoY/\nc5lG/FLG5XJJctd/gpKZdpXic+4uLl+X4Hfc8t0r+VvubeCG3PXqbT6pDACQRCAAACwEAgBAEoEA\nALAQCAAASQ4Fws2+EVKSpk+frqioKCUmJlb5sI/tivKcm7uBeXxdABpRb3scmtcXPL4uABZHAuG7\nb4TcuHGj3nzzTZWVlVXZX1RUpI8//lhbt27V1KlTNXXqVCfKuKI4z7m5G5jH1wWgEfW2x6F5fcHj\n6wJgsT0QavONkIWFhRoxYoTatWunzMxM7du3z+4yANvR2/B3tgdCTd8Iea2ioiLFxcV5t8PDw1Va\nWmp3KYCt6G34O59826kx5rpP0V355GZ13PU/UBfrd9+aVf85Ggm39d88H9aAm2uw3pbkX92Q5+sC\nIAfeIdTmGyFTU1O1d+9e7/bJkycVFRV13VzfnVzcuDl1o7e5+eutPmwPhNp8I2RqaqpWrVqlU6dO\nadmyZYqNjbW7DMB29Db8nSNLRjf7RsiUlBT17dtXSUlJateunZYsWeJEGYDt6G34NdMI5Ofnm5iY\nGHP//febN954o9oxv/3tb829995revbsafbt21fnOfbt22d69eplWrZsaV599VXbH4NdavNcGGNM\nUVGRue2228yqVasasLqm6WbP6ZkzZ8yUKVNMQkKC6dWrlzl48GCDHNeY5tPXxtDbdnOirxtFIHTv\n3t3k5+cbj8djOnfubE6ePFllf2FhoenTp485deqUWbZsmcnIyKjzHCdOnDDFxcXmhRdeaNQnzs0e\nhzHGXLp0yTz44IMmIyPDrFy50gdVNi03e05zcnLM+PHjjTHGbN682fzsZz9rkOM2p742ht62mxN9\n7fOvrrDj2u7azBEeHq6kpCQFBgY6+GhuTW0ehyRlZ2drxIgRCg8Pb+gSm5zaPKe5ubnKyMiQJKWl\npengwYMNctzm0tcSvW03p/ra54Fgx7XdtZmjKajN4zhy5IjWrl2rX/7yl5JudEkjpNo9p4MHD9by\n5ct1/vx5rVu3Trt379ahQ4ccP25z6WuJ3rabU33tk88h1JWp5jKq5toskyZN0h/+8Ae5XK5burwM\nV40cOVJffvmlBgwYoM6dOys6OlotW7Z0/Lj0dVX0tr3q09c+f4dgx7XdtZmjKajN49i2bZsee+wx\n3XvvvVq1apV+9atfad26dQ1dapNRm+e0VatWmjFjhoqKirRgwQIFBQXphz/8oePHbS59LdHbdnOq\nr30eCHZc212bOb7TmF911OZxfP755zp06JAOHTqkESNGaMGCBRoyZIgvym0SavOclpeX69tvv9W5\nc+f0+9//XgMHDmyQ4zaXvpbobbs51tc2/tG73vLy8kxMTIy57777zPz5840xxixcuNAsXLjQO+a5\n554zkZGRpmfPnmbv3r11nuPYsWOmY8eO5s477zRt27Y1nTp1Mt98800DPLq6qc1z8Z2nn36aS/Nq\n4WbP6ebNm80DDzxg7r//fjNq1ChTUVHRIMc1pvn0tTH0tt2c6GuXMY38pQUAoEH4fMkIANA4EAgA\nAEkEAgDAQiAAACQRCE1ecXGxEhISdPHiRVVUVKhr165Vrm0Hmip6u+FxlZEfmDFjhi5cuKDz58+r\nU6dOeu6553xdEmALerthEQh+oLKyUklJSQoKCtKnn37arL/+AP6F3m5YLBn5gbKyMlVUVOjs2bM6\nf/68r8sBbENvNyzeIfiBIUOG6PHHH9fnn3+uY8eOKTs729clAbagtxtWk/i2U9Rs8eLFatmypR57\n7DFdvnxZvXv3Vl5entLT031dGnBL6O2GxzsEAIAk/oYAALAQCAAASQQCAMBCIAAAJBEIAAALgQAA\nkCT9PxL88fDsDe+RAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 2)", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m type(ax)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file